summaryrefslogtreecommitdiffstats
path: root/browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js')
-rw-r--r--browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js204
1 files changed, 204 insertions, 0 deletions
diff --git a/browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js b/browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js
new file mode 100644
index 0000000000..c0e1aadb8b
--- /dev/null
+++ b/browser/components/tests/browser/browser_browserGlue_upgradeDialog_trigger.js
@@ -0,0 +1,204 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { ExperimentFakes } = ChromeUtils.importESModule(
+ "resource://testing-common/NimbusTestUtils.sys.mjs"
+);
+const { ExperimentAPI } = ChromeUtils.importESModule(
+ "resource://nimbus/ExperimentAPI.sys.mjs"
+);
+const { OnboardingMessageProvider } = ChromeUtils.import(
+ "resource://activity-stream/lib/OnboardingMessageProvider.jsm"
+);
+
+XPCOMUtils.defineLazyServiceGetters(this, {
+ BrowserHandler: ["@mozilla.org/browser/clh;1", "nsIBrowserHandler"],
+});
+
+add_setup(() => {
+ Services.telemetry.clearEvents();
+});
+
+async function forceMajorUpgrade() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.startup.homepage_override.mstone", "88.0"]],
+ });
+
+ void BrowserHandler.defaultArgs;
+
+ return async () => {
+ await SpecialPowers.popPrefEnv();
+ BrowserHandler.majorUpgrade = false;
+ Services.prefs.clearUserPref("browser.startup.upgradeDialog.version");
+ };
+}
+
+add_task(async function not_major_upgrade() {
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+
+ AssertEvents("Not major upgrade for upgrade dialog requirements", [
+ "trigger",
+ "reason",
+ "not-major",
+ ]);
+});
+
+add_task(async function remote_disabled() {
+ await ExperimentAPI.ready();
+ let doCleanup = await ExperimentFakes.enrollWithRollout({
+ featureId: NimbusFeatures.upgradeDialog.featureId,
+ value: {
+ enabled: false,
+ },
+ });
+
+ // Simulate starting from a previous version.
+ let cleanupUpgrade = await forceMajorUpgrade();
+
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+
+ AssertEvents("Feature disabled for upgrade dialog requirements", [
+ "trigger",
+ "reason",
+ "disabled",
+ ]);
+
+ await doCleanup();
+ await cleanupUpgrade();
+});
+
+add_task(async function enterprise_disabled() {
+ const defaultPrefs = Services.prefs.getDefaultBranch("");
+ const pref = "browser.aboutwelcome.enabled";
+ const orig = defaultPrefs.getBoolPref(pref, true);
+ defaultPrefs.setBoolPref(pref, false);
+
+ let cleanupUpgrade = await forceMajorUpgrade();
+
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+
+ AssertEvents("Welcome disabled like enterprise policy", [
+ "trigger",
+ "reason",
+ "no-welcome",
+ ]);
+
+ await cleanupUpgrade();
+ defaultPrefs.setBoolPref(pref, orig);
+});
+
+add_task(async function show_major_upgrade() {
+ const defaultPrefs = Services.prefs.getDefaultBranch("");
+ const pref = "browser.startup.upgradeDialog.enabled";
+ const orig = defaultPrefs.getBoolPref(pref, true);
+ defaultPrefs.setBoolPref(pref, true);
+
+ let cleanupUpgrade = await forceMajorUpgrade();
+
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+ const [win] = await TestUtils.topicObserved("subdialog-loaded");
+ const data = await OnboardingMessageProvider.getUpgradeMessage();
+ Assert.equal(data.id, "FX_MR_106_UPGRADE", "MR 106 Upgrade Dialog Shown");
+ win.close();
+
+ AssertEvents("Upgrade dialog opened from major upgrade", [
+ "trigger",
+ "reason",
+ "satisfied",
+ ]);
+
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+
+ AssertEvents("Shouldn't reshow for upgrade dialog requirements", [
+ "trigger",
+ "reason",
+ "already-shown",
+ ]);
+
+ defaultPrefs.setBoolPref(pref, orig);
+ await cleanupUpgrade();
+});
+
+add_task(async function test_mr2022_upgradeDialogEnabled() {
+ const FALLBACK_PREF = "browser.startup.upgradeDialog.enabled";
+
+ async function runMajorReleaseTest(
+ { onboarding = undefined, enabled = undefined, fallbackPref = undefined },
+ expected
+ ) {
+ info("Testing upgradeDialog with:");
+ info(` majorRelease2022.onboarding=${onboarding}`);
+ info(` upgradeDialog.enabled=${enabled}`);
+ info(` ${FALLBACK_PREF}=${fallbackPref}`);
+
+ let mr2022Cleanup = async () => {};
+ let upgradeDialogCleanup = async () => {};
+
+ if (typeof onboarding !== "undefined") {
+ mr2022Cleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "majorRelease2022",
+ value: { onboarding },
+ });
+ }
+
+ if (typeof enabled !== "undefined") {
+ upgradeDialogCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "upgradeDialog",
+ value: { enabled },
+ });
+ }
+
+ if (typeof fallbackPref !== "undefined") {
+ await SpecialPowers.pushPrefEnv({
+ set: [[FALLBACK_PREF, fallbackPref]],
+ });
+ }
+
+ const cleanupForcedUpgrade = await forceMajorUpgrade();
+
+ try {
+ await BROWSER_GLUE._maybeShowDefaultBrowserPrompt();
+ AssertEvents(`Upgrade dialog ${expected ? "shown" : "not shown"}`, [
+ "trigger",
+ "reason",
+ expected ? "satisfied" : "disabled",
+ ]);
+
+ if (expected) {
+ const [win] = await TestUtils.topicObserved("subdialog-loaded");
+ win.close();
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ }
+ } finally {
+ await cleanupForcedUpgrade();
+ if (typeof fallbackPref !== "undefined") {
+ await SpecialPowers.popPrefEnv();
+ }
+ await upgradeDialogCleanup();
+ await mr2022Cleanup();
+ }
+ }
+
+ await runMajorReleaseTest({ onboarding: true }, true);
+ await runMajorReleaseTest({ onboarding: true, enabled: false }, true);
+ await runMajorReleaseTest({ onboarding: true, fallbackPref: false }, true);
+
+ await runMajorReleaseTest({ onboarding: false }, false);
+ await runMajorReleaseTest({ onboarding: false, enabled: true }, false);
+ await runMajorReleaseTest({ onboarding: false, fallbackPref: true }, false);
+
+ await runMajorReleaseTest({ enabled: true }, true);
+ await runMajorReleaseTest({ enabled: true, fallbackPref: false }, true);
+ await runMajorReleaseTest({ fallbackPref: true }, true);
+
+ await runMajorReleaseTest({ enabled: false }, false);
+ await runMajorReleaseTest({ enabled: false, fallbackPref: true }, false);
+ await runMajorReleaseTest({ fallbackPref: false }, false);
+
+ // Test the default configuration.
+ await runMajorReleaseTest({}, true);
+});