summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js')
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js234
1 files changed, 234 insertions, 0 deletions
diff --git a/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js b/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js
new file mode 100644
index 0000000000..24ee403cb6
--- /dev/null
+++ b/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_home.js
@@ -0,0 +1,234 @@
+/* -*- 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"
+);
+
+ChromeUtils.defineESModuleGetters(this, {
+ RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
+ TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
+ sinon: "resource://testing-common/Sinon.sys.mjs",
+});
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ HomePage: "resource:///modules/HomePage.jsm",
+});
+
+function promisePrefChanged(expectedValue) {
+ return TestUtils.waitForPrefChange("browser.startup.homepage", value =>
+ value.endsWith(expectedValue)
+ );
+}
+
+const HOMEPAGE_EXTENSION_CONTROLLED =
+ "browser.startup.homepage_override.extensionControlled";
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "1",
+ "42"
+);
+
+async function setupRemoteSettings() {
+ const settings = await RemoteSettings("hijack-blocklists");
+ sinon.stub(settings, "get").returns([
+ {
+ id: "homepage-urls",
+ matches: ["ignore=me"],
+ _status: "synced",
+ },
+ ]);
+}
+
+add_task(async function setup() {
+ await AddonTestUtils.promiseStartupManager();
+ await setupRemoteSettings();
+});
+
+add_task(async function test_overriding_with_ignored_url() {
+ // Manually poke into the ignore list a value to be ignored.
+ HomePage._ignoreList.push("ignore=me");
+ Services.prefs.setBoolPref(HOMEPAGE_EXTENSION_CONTROLLED, false);
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: {
+ gecko: {
+ id: "ignore_homepage@example.com",
+ },
+ },
+ chrome_settings_overrides: { homepage: "https://example.com/?ignore=me" },
+ name: "extension",
+ },
+ useAddonManager: "temporary",
+ });
+
+ await extension.startup();
+
+ Assert.ok(HomePage.isDefault, "Should still have the default homepage");
+ Assert.equal(
+ Services.prefs.getBoolPref(
+ "browser.startup.homepage_override.extensionControlled"
+ ),
+ false,
+ "Should not be extension controlled."
+ );
+ TelemetryTestUtils.assertEvents(
+ [
+ {
+ object: "ignore",
+ value: "set_blocked_extension",
+ extra: { webExtensionId: "ignore_homepage@example.com" },
+ },
+ ],
+ {
+ category: "homepage",
+ method: "preference",
+ }
+ );
+
+ await extension.unload();
+ HomePage._ignoreList.pop();
+});
+
+add_task(async function test_overriding_cancelled_after_ignore_update() {
+ const oldHomePageIgnoreList = HomePage._ignoreList;
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: {
+ gecko: {
+ id: "ignore_homepage1@example.com",
+ },
+ },
+ chrome_settings_overrides: {
+ homepage: "https://example.com/?ignore1=me",
+ },
+ name: "extension",
+ },
+ useAddonManager: "temporary",
+ });
+
+ await extension.startup();
+
+ Assert.ok(!HomePage.isDefault, "Should have overriden the new homepage");
+ Assert.equal(
+ Services.prefs.getBoolPref(
+ "browser.startup.homepage_override.extensionControlled"
+ ),
+ true,
+ "Should be extension controlled."
+ );
+
+ let prefChanged = TestUtils.waitForPrefChange(
+ "browser.startup.homepage_override.extensionControlled"
+ );
+
+ await HomePage._handleIgnoreListUpdated({
+ data: {
+ current: [{ id: "homepage-urls", matches: ["ignore1=me"] }],
+ },
+ });
+
+ await prefChanged;
+
+ await TestUtils.waitForCondition(
+ () =>
+ !Services.prefs.getBoolPref(
+ "browser.startup.homepage_override.extensionControlled",
+ false
+ ),
+ "Should not longer be extension controlled"
+ );
+
+ Assert.ok(HomePage.isDefault, "Should have reset the homepage");
+
+ TelemetryTestUtils.assertEvents(
+ [
+ {
+ object: "ignore",
+ value: "saved_reset",
+ },
+ ],
+ {
+ category: "homepage",
+ method: "preference",
+ }
+ );
+
+ await extension.unload();
+ HomePage._ignoreList = oldHomePageIgnoreList;
+});
+
+add_task(async function test_overriding_homepage_locale() {
+ Services.locale.availableLocales = ["en-US", "es-ES"];
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: {
+ gecko: {
+ id: "homepage@example.com",
+ },
+ },
+ chrome_settings_overrides: {
+ homepage: "/__MSG_homepage__",
+ },
+ name: "extension",
+ default_locale: "en",
+ },
+ useAddonManager: "permanent",
+
+ files: {
+ "_locales/en/messages.json": {
+ homepage: {
+ message: "homepage.html",
+ description: "homepage",
+ },
+ },
+
+ "_locales/es_ES/messages.json": {
+ homepage: {
+ message: "default.html",
+ description: "homepage",
+ },
+ },
+ },
+ });
+
+ let prefPromise = promisePrefChanged("homepage.html");
+ await extension.startup();
+ await prefPromise;
+
+ Assert.equal(
+ HomePage.get(),
+ `moz-extension://${extension.uuid}/homepage.html`,
+ "Should have overridden the new homepage"
+ );
+
+ // Set the new locale now, and disable the L10nRegistry reset
+ // when shutting down the addon mananger. This allows us to
+ // restart under a new locale without a lot of fuss.
+ let reqLoc = Services.locale.requestedLocales;
+ Services.locale.requestedLocales = ["es-ES"];
+
+ prefPromise = promisePrefChanged("default.html");
+ await AddonTestUtils.promiseShutdownManager({ clearL10nRegistry: false });
+ await AddonTestUtils.promiseStartupManager();
+ await extension.awaitStartup();
+ await prefPromise;
+
+ Assert.equal(
+ HomePage.get(),
+ `moz-extension://${extension.uuid}/default.html`,
+ "Should have overridden the new homepage"
+ );
+
+ await extension.unload();
+
+ Services.locale.requestedLocales = reqLoc;
+});