summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js b/browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js
new file mode 100644
index 0000000000..aefa8f42f5
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_reload_manifest_cache.js
@@ -0,0 +1,72 @@
+"use strict";
+
+const { ExtensionPermissions } = ChromeUtils.importESModule(
+ "resource://gre/modules/ExtensionPermissions.sys.mjs"
+);
+
+add_task(async function test_reload_manifest_startupcache() {
+ const id = "id@tests.mozilla.org";
+
+ let ext = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: {
+ gecko: { id },
+ },
+ options_ui: {
+ open_in_tab: true,
+ page: "options.html",
+ },
+ optional_permissions: ["<all_urls>"],
+ },
+ useAddonManager: "temporary",
+ files: {
+ "options.html": `lol`,
+ },
+ background() {
+ browser.runtime.openOptionsPage();
+ browser.permissions.onAdded.addListener(() => {
+ browser.runtime.openOptionsPage();
+ });
+ },
+ });
+
+ async function waitOptionsTab() {
+ let tab = await BrowserTestUtils.waitForNewTab(gBrowser, url =>
+ url.endsWith("options.html")
+ );
+ BrowserTestUtils.removeTab(tab);
+ }
+
+ // Open a non-blank tab to force options to open a new tab.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "https://example.com/"
+ );
+ let optionsTabPromise = waitOptionsTab();
+
+ await ext.startup();
+ await optionsTabPromise;
+
+ let disabledPromise = awaitEvent("shutdown", id);
+ let enabledPromise = awaitEvent("ready", id);
+ optionsTabPromise = waitOptionsTab();
+
+ let addon = await AddonManager.getAddonByID(id);
+ await addon.reload();
+
+ await Promise.all([disabledPromise, enabledPromise, optionsTabPromise]);
+
+ optionsTabPromise = waitOptionsTab();
+ ExtensionPermissions.add(id, {
+ permissions: [],
+ origins: ["<all_urls>"],
+ });
+ await optionsTabPromise;
+
+ let policy = WebExtensionPolicy.getByID(id);
+ let optionsUrl = policy.extension.manifest.options_ui.page;
+ ok(optionsUrl.includes(policy.mozExtensionHostname), "Normalized manifest.");
+
+ await BrowserTestUtils.removeTab(tab);
+ await ext.unload();
+});