forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			193 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
	
		
			5.9 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.importESModule(
 | |
|   "resource://testing-common/AddonTestUtils.sys.mjs"
 | |
| );
 | |
| 
 | |
| const { AddonManager } = ChromeUtils.importESModule(
 | |
|   "resource://gre/modules/AddonManager.sys.mjs"
 | |
| );
 | |
| 
 | |
| const { AboutNewTab } = ChromeUtils.importESModule(
 | |
|   "resource:///modules/AboutNewTab.sys.mjs"
 | |
| );
 | |
| 
 | |
| // Lazy load to avoid having Services.appinfo cached first.
 | |
| ChromeUtils.defineESModuleGetters(this, {
 | |
|   ExtensionParent: "resource://gre/modules/ExtensionParent.sys.mjs",
 | |
| });
 | |
| 
 | |
| const { HomePage } = ChromeUtils.importESModule(
 | |
|   "resource:///modules/HomePage.sys.mjs"
 | |
| );
 | |
| 
 | |
| 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",
 | |
|       browser_specific_settings: { 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",
 | |
|       browser_specific_settings: { 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`);
 | |
|   }
 | |
| });
 | 
