summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js')
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js132
1 files changed, 132 insertions, 0 deletions
diff --git a/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js b/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
new file mode 100644
index 0000000000..edf0392712
--- /dev/null
+++ b/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
@@ -0,0 +1,132 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+const { AddonTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/AddonTestUtils.sys.mjs"
+);
+const { HomePage } = ChromeUtils.import("resource:///modules/HomePage.jsm");
+const { ExtensionPermissions } = ChromeUtils.importESModule(
+ "resource://gre/modules/ExtensionPermissions.sys.mjs"
+);
+
+const { createAppInfo, promiseShutdownManager, promiseStartupManager } =
+ AddonTestUtils;
+
+const EXTENSION_ID = "test_overrides@tests.mozilla.org";
+const HOMEPAGE_EXTENSION_CONTROLLED =
+ "browser.startup.homepage_override.extensionControlled";
+const HOMEPAGE_PRIVATE_ALLOWED =
+ "browser.startup.homepage_override.privateAllowed";
+const HOMEPAGE_URL_PREF = "browser.startup.homepage";
+const HOMEPAGE_URI = "webext-homepage-1.html";
+
+Services.prefs.setBoolPref("browser.privatebrowsing.autostart", true);
+
+AddonTestUtils.init(this);
+AddonTestUtils.usePrivilegedSignatures = false;
+AddonTestUtils.overrideCertDB();
+
+createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
+
+function promisePrefChange(pref) {
+ return new Promise((resolve, reject) => {
+ Services.prefs.addObserver(pref, function observer() {
+ Services.prefs.removeObserver(pref, observer);
+ resolve(arguments);
+ });
+ });
+}
+
+let defaultHomepageURL;
+
+function verifyPrefSettings(controlled, allowed) {
+ equal(
+ Services.prefs.getBoolPref(HOMEPAGE_EXTENSION_CONTROLLED, false),
+ controlled,
+ "homepage extension controlled"
+ );
+ equal(
+ Services.prefs.getBoolPref(HOMEPAGE_PRIVATE_ALLOWED, false),
+ allowed,
+ "homepage private permission after permission change"
+ );
+
+ if (controlled && allowed) {
+ ok(
+ HomePage.get().endsWith(HOMEPAGE_URI),
+ "Home page url is overridden by the extension"
+ );
+ } else {
+ equal(HomePage.get(), defaultHomepageURL, "Home page url is default.");
+ }
+}
+
+async function promiseUpdatePrivatePermission(allowed, extension) {
+ info(`update private allowed permission`);
+ await Promise.all([
+ promisePrefChange(HOMEPAGE_PRIVATE_ALLOWED),
+ ExtensionPermissions[allowed ? "add" : "remove"](
+ extension.id,
+ { permissions: ["internal:privateBrowsingAllowed"], origins: [] },
+ extension
+ ),
+ ]);
+
+ verifyPrefSettings(true, allowed);
+}
+
+add_task(async function test_overrides_private() {
+ await promiseStartupManager();
+
+ let extensionInfo = {
+ useAddonManager: "permanent",
+ manifest: {
+ version: "1.0",
+ browser_specific_settings: {
+ gecko: {
+ id: EXTENSION_ID,
+ },
+ },
+ chrome_settings_overrides: {
+ homepage: HOMEPAGE_URI,
+ },
+ },
+ };
+ let extension = ExtensionTestUtils.loadExtension(extensionInfo);
+
+ defaultHomepageURL = HomePage.get();
+
+ await extension.startup();
+
+ verifyPrefSettings(true, false);
+
+ equal(HomePage.get(), defaultHomepageURL, "Home page url is default.");
+
+ info("add permission to extension");
+ await promiseUpdatePrivatePermission(true, extension.extension);
+ info("remove permission from extension");
+ await promiseUpdatePrivatePermission(false, extension.extension);
+ // set back to true to test upgrade removing extension control
+ info("add permission back to prepare for upgrade test");
+ await promiseUpdatePrivatePermission(true, extension.extension);
+
+ extensionInfo.manifest = {
+ version: "2.0",
+ browser_specific_settings: {
+ gecko: {
+ id: EXTENSION_ID,
+ },
+ },
+ };
+
+ await Promise.all([
+ promisePrefChange(HOMEPAGE_URL_PREF),
+ extension.upgrade(extensionInfo),
+ ]);
+
+ verifyPrefSettings(false, false);
+
+ await extension.unload();
+ await promiseShutdownManager();
+});