forked from mirrors/gecko-dev
This patch does the following: * Moves most logic for initiating about:home / about:newtab into AboutNewTab.jsm * Makes AboutNewTab the API surface for overriding the default about:newtab URLs. * Reduces the surface of nsIAboutNewTabService, and makes the properties read-only * Splits the remaining code in the nsIAboutNewTabService into an implementation for the parent process, and one for content processes. This split will hopefully help reduce confusion about which code in AboutNewTabService is running in which process. Differential Revision: https://phabricator.services.mozilla.com/D65569 --HG-- rename : browser/components/newtab/test/xpcshell/test_AboutNewTabService.js => browser/components/newtab/test/xpcshell/test_AboutNewTab.js extra : moz-landing-system : lando
193 lines
5.8 KiB
JavaScript
193 lines
5.8 KiB
JavaScript
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set sts=2 sw=2 et tw=80: */
|
|
"use strict";
|
|
|
|
const { AddonTestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/AddonTestUtils.jsm"
|
|
);
|
|
|
|
const { AddonManager } = ChromeUtils.import(
|
|
"resource://gre/modules/AddonManager.jsm"
|
|
);
|
|
|
|
const { AboutNewTab } = ChromeUtils.import(
|
|
"resource:///modules/AboutNewTab.jsm"
|
|
);
|
|
|
|
// Lazy load to avoid having Services.appinfo cached first.
|
|
ChromeUtils.defineModuleGetter(
|
|
this,
|
|
"ExtensionParent",
|
|
"resource://gre/modules/ExtensionParent.jsm"
|
|
);
|
|
|
|
const { HomePage } = ChromeUtils.import("resource:///modules/HomePage.jsm");
|
|
|
|
AddonTestUtils.init(this);
|
|
|
|
// Allow for unsigned addons.
|
|
AddonTestUtils.overrideCertDB();
|
|
|
|
AddonTestUtils.createAppInfo(
|
|
"xpcshell@tests.mozilla.org",
|
|
"XPCShell",
|
|
"42",
|
|
"42"
|
|
);
|
|
|
|
add_task(async function test_settings_modules_not_loaded() {
|
|
await ExtensionParent.apiManager.lazyInit();
|
|
// Test that no settings modules are loaded.
|
|
let modules = Array.from(ExtensionParent.apiManager.settingsModules);
|
|
ok(modules.length, "we have settings modules");
|
|
for (let name of modules) {
|
|
ok(
|
|
!ExtensionParent.apiManager.getModule(name).loaded,
|
|
`${name} is not loaded`
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_settings_validated() {
|
|
let defaultNewTab = AboutNewTab.newTabURL;
|
|
equal(defaultNewTab, "about:newtab", "Newtab url is default.");
|
|
let defaultHomepageURL = HomePage.get();
|
|
equal(defaultHomepageURL, "about:home", "Home page url is default.");
|
|
|
|
let xpi = await AddonTestUtils.createTempWebExtensionFile({
|
|
manifest: {
|
|
version: "1.0",
|
|
applications: { gecko: { id: "test@mochi" } },
|
|
chrome_url_overrides: {
|
|
newtab: "/newtab",
|
|
},
|
|
chrome_settings_overrides: {
|
|
homepage: "https://example.com/",
|
|
},
|
|
},
|
|
});
|
|
let extension = ExtensionTestUtils.expectExtension("test@mochi");
|
|
let file = await AddonTestUtils.manuallyInstall(xpi);
|
|
await AddonTestUtils.promiseStartupManager();
|
|
await extension.awaitStartup();
|
|
|
|
equal(
|
|
HomePage.get(),
|
|
"https://example.com/",
|
|
"Home page url is extension controlled."
|
|
);
|
|
ok(
|
|
AboutNewTab.newTabURL.endsWith("/newtab"),
|
|
"newTabURL is extension controlled."
|
|
);
|
|
|
|
await AddonTestUtils.promiseShutdownManager();
|
|
// After shutdown, delete the xpi file.
|
|
Services.obs.notifyObservers(xpi, "flush-cache-entry");
|
|
try {
|
|
file.remove(true);
|
|
} catch (e) {
|
|
ok(false, e);
|
|
}
|
|
await AddonTestUtils.cleanupTempXPIs();
|
|
|
|
// Restart everything, the ExtensionAddonObserver should handle updating state.
|
|
let prefChanged = TestUtils.waitForPrefChange("browser.startup.homepage");
|
|
await AddonTestUtils.promiseStartupManager();
|
|
await prefChanged;
|
|
|
|
equal(HomePage.get(), defaultHomepageURL, "Home page url is default.");
|
|
equal(AboutNewTab.newTabURL, defaultNewTab, "newTabURL is reset to default.");
|
|
await AddonTestUtils.promiseShutdownManager();
|
|
});
|
|
|
|
add_task(async function test_settings_validated_safemode() {
|
|
let defaultNewTab = AboutNewTab.newTabURL;
|
|
equal(defaultNewTab, "about:newtab", "Newtab url is default.");
|
|
let defaultHomepageURL = HomePage.get();
|
|
equal(defaultHomepageURL, "about:home", "Home page url is default.");
|
|
|
|
function isDefaultSettings(postfix) {
|
|
equal(
|
|
HomePage.get(),
|
|
defaultHomepageURL,
|
|
`Home page url is default ${postfix}.`
|
|
);
|
|
equal(
|
|
AboutNewTab.newTabURL,
|
|
defaultNewTab,
|
|
`newTabURL is default ${postfix}.`
|
|
);
|
|
}
|
|
|
|
function isExtensionSettings(postfix) {
|
|
equal(
|
|
HomePage.get(),
|
|
"https://example.com/",
|
|
`Home page url is extension controlled ${postfix}.`
|
|
);
|
|
ok(
|
|
AboutNewTab.newTabURL.endsWith("/newtab"),
|
|
`newTabURL is extension controlled ${postfix}.`
|
|
);
|
|
}
|
|
|
|
async function switchSafeMode(inSafeMode) {
|
|
await AddonTestUtils.promiseShutdownManager();
|
|
AddonTestUtils.appInfo.inSafeMode = inSafeMode;
|
|
await AddonTestUtils.promiseStartupManager();
|
|
return AddonManager.getAddonByID("test@mochi");
|
|
}
|
|
|
|
let xpi = await AddonTestUtils.createTempWebExtensionFile({
|
|
manifest: {
|
|
version: "1.0",
|
|
applications: { gecko: { id: "test@mochi" } },
|
|
chrome_url_overrides: {
|
|
newtab: "/newtab",
|
|
},
|
|
chrome_settings_overrides: {
|
|
homepage: "https://example.com/",
|
|
},
|
|
},
|
|
});
|
|
let extension = ExtensionTestUtils.expectExtension("test@mochi");
|
|
await AddonTestUtils.manuallyInstall(xpi);
|
|
await AddonTestUtils.promiseStartupManager();
|
|
await extension.awaitStartup();
|
|
|
|
isExtensionSettings("on extension startup");
|
|
|
|
// Disable in safemode and verify settings are removed in normal mode.
|
|
let addon = await switchSafeMode(true);
|
|
await addon.disable();
|
|
addon = await switchSafeMode(false);
|
|
isDefaultSettings("after disabling addon during safemode");
|
|
|
|
// Enable in safemode and verify settings are back in normal mode.
|
|
addon = await switchSafeMode(true);
|
|
await addon.enable();
|
|
addon = await switchSafeMode(false);
|
|
isExtensionSettings("after enabling addon during safemode");
|
|
|
|
// Uninstall in safemode and verify settings are removed in normal mode.
|
|
addon = await switchSafeMode(true);
|
|
await addon.uninstall();
|
|
addon = await switchSafeMode(false);
|
|
isDefaultSettings("after uninstalling addon during safemode");
|
|
|
|
await AddonTestUtils.promiseShutdownManager();
|
|
await AddonTestUtils.cleanupTempXPIs();
|
|
});
|
|
|
|
// There are more settings modules than used in this test file, they should have been
|
|
// loaded during the test extensions uninstall. Ensure that all settings modules have
|
|
// been loaded.
|
|
add_task(async function test_settings_modules_loaded() {
|
|
// Test that all settings modules are loaded.
|
|
let modules = Array.from(ExtensionParent.apiManager.settingsModules);
|
|
ok(modules.length, "we have settings modules");
|
|
for (let name of modules) {
|
|
ok(ExtensionParent.apiManager.getModule(name).loaded, `${name} was loaded`);
|
|
}
|
|
});
|