summaryrefslogtreecommitdiffstats
path: root/browser/components/tests/browser/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/tests/browser/head.js')
-rw-r--r--browser/components/tests/browser/head.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/browser/components/tests/browser/head.js b/browser/components/tests/browser/head.js
new file mode 100644
index 0000000000..89c8df8613
--- /dev/null
+++ b/browser/components/tests/browser/head.js
@@ -0,0 +1,90 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
+ sinon: "resource://testing-common/Sinon.sys.mjs",
+});
+
+// Helpers for testing telemetry events.
+
+// Tests can change the category to filter for different events.
+var gTelemetryCategory = "upgrade_dialog";
+
+function AssertEvents(message, ...events) {
+ info(`Checking telemetry events: ${message}`);
+ TelemetryTestUtils.assertEvents(
+ events.map(event => [gTelemetryCategory, ...event]),
+ { category: gTelemetryCategory }
+ );
+}
+
+const BROWSER_GLUE =
+ Cc["@mozilla.org/browser/browserglue;1"].getService().wrappedJSObject;
+
+// Helpers for mocking various shell states.
+
+let didMockShell = false;
+function mockShell(overrides = {}) {
+ if (!didMockShell) {
+ sinon.stub(window, "getShellService");
+ registerCleanupFunction(() => {
+ getShellService.restore();
+ });
+ didMockShell = true;
+ }
+
+ const sharedPinStub = sinon.stub().resolves(undefined);
+ let mock = {
+ canPin: false,
+ isDefault: false,
+ isPinned: false,
+
+ async checkPinCurrentAppToTaskbarAsync(privateBrowsing = false) {
+ if (!this.canPin) {
+ throw Error;
+ }
+ },
+ get isAppInDock() {
+ return this.isPinned;
+ },
+ isCurrentAppPinnedToTaskbarAsync(privateBrowsing = false) {
+ return Promise.resolve(this.isPinned);
+ },
+ isDefaultBrowser() {
+ return this.isDefault;
+ },
+ get macDockSupport() {
+ return this;
+ },
+ // eslint-disable-next-line mozilla/use-chromeutils-generateqi
+ QueryInterface() {
+ return this;
+ },
+ get shellService() {
+ return this;
+ },
+
+ ensureAppIsPinnedToDock: sharedPinStub,
+ pinCurrentAppToTaskbarAsync: sharedPinStub,
+ setAsDefault: sinon.stub(),
+ ...overrides,
+ };
+
+ // Prefer the mocked implementation and fall back to the original version,
+ // which can call back into the mocked version (via this.shellService).
+ mock = new Proxy(mock, {
+ get(target, prop) {
+ return (prop in target ? target : ShellService)[prop];
+ },
+ set(target, prop, val) {
+ (prop in target ? target : ShellService)[prop] = val;
+ return true;
+ },
+ });
+
+ getShellService.returns(mock);
+ return mock;
+}