Global Metrics
path: .metrics.loc.cloc
old: 10.0
new: 33.0
path: .metrics.loc.ploc
old: 20.0
new: 315.0
path: .metrics.loc.lloc
old: 6.0
new: 142.0
path: .metrics.loc.sloc
old: 35.0
new: 437.0
path: .metrics.loc.blank
old: 5.0
new: 89.0
path: .metrics.cyclomatic.average
old: 1.0
new: 2.4242424242424243
path: .metrics.cyclomatic.sum
old: 2.0
new: 80.0
path: .metrics.halstead.estimated_program_length
old: 88.71062275542812
new: 1852.571755001392
path: .metrics.halstead.N2
old: 35.0
new: 568.0
path: .metrics.halstead.length
old: 65.0
new: 1385.0
path: .metrics.halstead.n1
old: 4.0
new: 26.0
path: .metrics.halstead.effort
old: 1083.2740473715478
new: 366424.7432203464
path: .metrics.halstead.level
old: 0.2714285714285714
new: 0.030065005417118092
path: .metrics.halstead.n2
old: 19.0
new: 222.0
path: .metrics.halstead.volume
old: 294.03152714370583
new: 11016.56188988582
path: .metrics.halstead.purity_ratio
old: 1.364778811621971
new: 1.3375969350190555
path: .metrics.halstead.bugs
old: 0.03515909094824921
new: 1.7068758748090724
path: .metrics.halstead.difficulty
old: 3.6842105263157894
new: 33.26126126126126
path: .metrics.halstead.N1
old: 30.0
new: 817.0
path: .metrics.halstead.vocabulary
old: 23.0
new: 248.0
path: .metrics.halstead.time
old: 60.18189152064154
new: 20356.930178908133
path: .metrics.nargs.average
old: 2.0
new: 1.2142857142857142
path: .metrics.nargs.sum
old: 2.0
new: 34.0
path: .metrics.mi.mi_visual_studio
old: 48.76502281909749
new: 3.337939181996685
path: .metrics.mi.mi_original
old: 83.3881890206567
new: 5.707876001214331
path: .metrics.mi.mi_sei
old: 81.63818207774861
new: -38.67180506653963
path: .metrics.cognitive.sum
old: 0.0
new: 58.0
path: .metrics.cognitive.average
old: 0.0
new: 2.0714285714285716
path: .metrics.nom.functions
old: 1.0
new: 28.0
path: .metrics.nom.total
old: 1.0
new: 28.0
path: .metrics.nexits.average
old: 0.0
new: 1.8571428571428572
path: .metrics.nexits.sum
old: 0.0
new: 52.0
Spaces Data
Minimal test - lines (39, 167)
path: .spaces[0].metrics.nargs.average
old: 2.0
new: 1.1538461538461535
path: .spaces[0].metrics.nargs.sum
old: 2.0
new: 15.0
path: .spaces[0].metrics.halstead.effort
old: 908.685381950068
new: 56911.700751818695
path: .spaces[0].metrics.halstead.n1
old: 4.0
new: 21.0
path: .spaces[0].metrics.halstead.N2
old: 29.0
new: 169.0
path: .spaces[0].metrics.halstead.level
old: 0.27586206896551724
new: 0.04959143420681882
path: .spaces[0].metrics.halstead.time
old: 50.482521219448216
new: 3161.7611528788166
path: .spaces[0].metrics.halstead.n2
old: 16.0
new: 88.0
path: .spaces[0].metrics.halstead.volume
old: 250.67182950346705
new: 2822.3328634319782
path: .spaces[0].metrics.halstead.bugs
old: 0.031271912314717605
new: 0.49318870458383707
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.2413793103448276
new: 1.5843372861353386
path: .spaces[0].metrics.halstead.N1
old: 29.0
new: 248.0
path: .spaces[0].metrics.halstead.length
old: 58.0
new: 417.0
path: .spaces[0].metrics.halstead.difficulty
old: 3.625
new: 20.164772727272727
path: .spaces[0].metrics.halstead.estimated_program_length
old: 72.0
new: 660.6686483184362
path: .spaces[0].metrics.halstead.vocabulary
old: 20.0
new: 109.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 9.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 0.6923076923076923
path: .spaces[0].metrics.mi.mi_original
old: 97.12851061595178
new: 45.20537984124371
path: .spaces[0].metrics.mi.mi_sei
old: 64.5277884619564
new: 1.6473763733378617
path: .spaces[0].metrics.mi.mi_visual_studio
old: 56.800298605819755
new: 26.435894644002172
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 25.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.6666666666666667
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 13.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 13.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 1.3076923076923077
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 17.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.ploc
old: 15.0
new: 97.0
path: .spaces[0].metrics.loc.lloc
old: 6.0
new: 41.0
path: .spaces[0].metrics.loc.sloc
old: 16.0
new: 129.0
path: .spaces[0].metrics.loc.blank
old: 1.0
new: 30.0
Code
namespace {
HWND GetHWNDFromDocShell(nsIDocShell* aShell) {
nsCOMPtr baseWindow(
do_QueryInterface(reinterpret_cast(aShell)));
if (!baseWindow) return nullptr;
nsCOMPtr widget;
baseWindow->GetMainWidget(getter_AddRefs(widget));
return widget ? (HWND)widget->GetNativeData(NS_NATIVE_WINDOW) : nullptr;
}
HWND GetHWNDFromDOMWindow(mozIDOMWindow* dw) {
nsCOMPtr widget;
if (!dw) return nullptr;
nsCOMPtr window = nsPIDOMWindowInner::From(dw);
return GetHWNDFromDocShell(window->GetDocShell());
}
nsresult SetWindowAppUserModelProp(mozIDOMWindow* aParent,
const nsString& aIdentifier) {
NS_ENSURE_ARG_POINTER(aParent);
if (aIdentifier.IsEmpty()) return NS_ERROR_INVALID_ARG;
HWND toplevelHWND = ::GetAncestor(GetHWNDFromDOMWindow(aParent), GA_ROOT);
if (!toplevelHWND) return NS_ERROR_INVALID_ARG;
RefPtr pPropStore;
if (FAILED(SHGetPropertyStoreForWindow(toplevelHWND, IID_IPropertyStore,
getter_AddRefs(pPropStore)))) {
return NS_ERROR_INVALID_ARG;
}
PROPVARIANT pv;
if (FAILED(InitPropVariantFromString(aIdentifier.get(), &pv))) {
return NS_ERROR_UNEXPECTED;
}
nsresult rv = NS_OK;
if (FAILED(pPropStore->SetValue(PKEY_AppUserModel_ID, pv)) ||
FAILED(pPropStore->Commit())) {
rv = NS_ERROR_FAILURE;
}
PropVariantClear(&pv);
return rv;
}
///////////////////////////////////////////////////////////////////////////////
// default nsITaskbarPreviewController
class DefaultController final : public nsITaskbarPreviewController {
~DefaultController() {}
HWND mWnd;
public:
explicit DefaultController(HWND hWnd) : mWnd(hWnd) {}
NS_DECL_ISUPPORTS
NS_DECL_NSITASKBARPREVIEWCONTROLLER
};
NS_IMETHODIMP
DefaultController::GetWidth(uint32_t* aWidth) {
RECT r;
::GetClientRect(mWnd, &r);
*aWidth = r.right;
return NS_OK;
}
NS_IMETHODIMP
DefaultController::GetHeight(uint32_t* aHeight) {
RECT r;
::GetClientRect(mWnd, &r);
*aHeight = r.bottom;
return NS_OK;
}
NS_IMETHODIMP
DefaultController::GetThumbnailAspectRatio(float* aThumbnailAspectRatio) {
uint32_t width, height;
GetWidth(&width);
GetHeight(&height);
if (!height) height = 1;
*aThumbnailAspectRatio = width / float(height);
return NS_OK;
}
NS_IMETHODIMP
DefaultController::RequestThumbnail(nsITaskbarPreviewCallback* aCallback,
uint32_t width, uint32_t height) {
return NS_OK;
}
NS_IMETHODIMP
DefaultController::RequestPreview(nsITaskbarPreviewCallback* aCallback) {
return NS_OK;
}
NS_IMETHODIMP
DefaultController::OnClose(void) {
MOZ_ASSERT_UNREACHABLE(
"OnClose should not be called for "
"TaskbarWindowPreviews");
return NS_OK;
}
NS_IMETHODIMP
DefaultController::OnActivate(bool* rAcceptActivation) {
*rAcceptActivation = true;
MOZ_ASSERT_UNREACHABLE(
"OnActivate should not be called for "
"TaskbarWindowPreviews");
return NS_OK;
}
NS_IMETHODIMP
DefaultController::OnClick(nsITaskbarPreviewButton* button) { return NS_OK; }
NS_IMPL_ISUPPORTS(DefaultController, nsITaskbarPreviewController)
} // namespace