summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js b/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
new file mode 100644
index 0000000000..19146fbe42
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
@@ -0,0 +1,96 @@
+"use strict";
+
+const { ExtensionPermissions } = ChromeUtils.importESModule(
+ "resource://gre/modules/ExtensionPermissions.sys.mjs"
+);
+
+const NEWTAB_PRIVATE_ALLOWED = "browser.newtab.privateAllowed";
+const NEWTAB_EXTENSION_CONTROLLED = "browser.newtab.extensionControlled";
+const NEWTAB_URI = "webext-newtab-1.html";
+
+function promisePrefChange(pref) {
+ return new Promise((resolve, reject) => {
+ Services.prefs.addObserver(pref, function observer() {
+ Services.prefs.removeObserver(pref, observer);
+ resolve(arguments);
+ });
+ });
+}
+
+function verifyPrefSettings(controlled, allowed) {
+ is(
+ Services.prefs.getBoolPref(NEWTAB_EXTENSION_CONTROLLED, false),
+ controlled,
+ "newtab extension controlled"
+ );
+ is(
+ Services.prefs.getBoolPref(NEWTAB_PRIVATE_ALLOWED, false),
+ allowed,
+ "newtab private permission after permission change"
+ );
+
+ if (controlled) {
+ ok(
+ AboutNewTab.newTabURL.endsWith(NEWTAB_URI),
+ "Newtab url is overridden by the extension."
+ );
+ }
+ if (controlled && allowed) {
+ ok(
+ BROWSER_NEW_TAB_URL.endsWith(NEWTAB_URI),
+ "active newtab url is overridden by the extension."
+ );
+ } else {
+ let expectednewTab = controlled ? "about:privatebrowsing" : "about:newtab";
+ is(BROWSER_NEW_TAB_URL, expectednewTab, "active newtab url is default.");
+ }
+}
+
+async function promiseUpdatePrivatePermission(allowed, extension) {
+ info(`update private allowed permission`);
+ let ext = WebExtensionPolicy.getByID(extension.id).extension;
+ await Promise.all([
+ promisePrefChange(NEWTAB_PRIVATE_ALLOWED),
+ ExtensionPermissions[allowed ? "add" : "remove"](
+ extension.id,
+ { permissions: ["internal:privateBrowsingAllowed"], origins: [] },
+ ext
+ ),
+ ]);
+
+ verifyPrefSettings(true, allowed);
+}
+
+add_task(async function test_new_tab_private() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: {
+ gecko: {
+ id: "@private-newtab",
+ },
+ },
+ chrome_url_overrides: {
+ newtab: NEWTAB_URI,
+ },
+ },
+ files: {
+ NEWTAB_URI: `
+ <!DOCTYPE html>
+ <head>
+ <meta charset="utf-8"/></head>
+ <html>
+ <body>
+ </body>
+ </html>
+ `,
+ },
+ useAddonManager: "permanent",
+ });
+ await extension.startup();
+
+ verifyPrefSettings(true, false);
+
+ await promiseUpdatePrivatePermission(true, extension);
+
+ await extension.unload();
+});