summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js')
-rw-r--r--toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js b/toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js
new file mode 100644
index 0000000000..666d4f324f
--- /dev/null
+++ b/toolkit/components/extensions/test/browser/browser_ext_windows_popup_title.js
@@ -0,0 +1,133 @@
+"use strict";
+
+// Check that extension popup windows contain the name of the extension
+// as well as the title of the loaded document, but not the URL.
+add_task(async function test_popup_title() {
+ const name = "custom_title_number_9_please";
+ const docTitle = "popup-test-title";
+
+ const extensionWithImplicitHostPermission = ExtensionTestUtils.loadExtension({
+ manifest: {
+ name,
+ },
+ async background() {
+ let popup;
+
+ // Called after the popup loads
+ browser.runtime.onMessage.addListener(async ({ docTitle }) => {
+ const name = browser.runtime.getManifest().name;
+ const { id } = await popup;
+ const { title } = await browser.windows.get(id);
+
+ browser.test.assertTrue(
+ title.includes(name),
+ "popup title must include extension name"
+ );
+ browser.test.assertTrue(
+ title.includes(docTitle),
+ "popup title must include extension document title"
+ );
+ browser.test.assertFalse(
+ title.includes("moz-extension:"),
+ "popup title must not include extension URL"
+ );
+
+ // share window data with other extensions
+ browser.test.sendMessage("windowData", {
+ id: id,
+ fullTitle: title,
+ });
+
+ browser.test.onMessage.addListener(async message => {
+ if (message === "cleanup") {
+ await browser.windows.remove(id);
+ browser.test.sendMessage("finishedCleanup");
+ }
+ });
+
+ browser.test.sendMessage("done");
+ });
+
+ popup = browser.windows.create({
+ url: "/index.html",
+ type: "popup",
+ });
+ },
+ files: {
+ "index.html": `<!doctype html>
+ <meta charset="utf-8">
+ <title>${docTitle}</title>,
+ <script src="index.js"></script>
+ `,
+ "index.js": `addEventListener(
+ "load",
+ () => browser.runtime.sendMessage({docTitle: document.title})
+ );`,
+ },
+ });
+
+ const extensionWithoutPermissions = ExtensionTestUtils.loadExtension({
+ async background() {
+ const { id } = await new Promise(resolve => {
+ browser.test.onMessage.addListener(message => {
+ resolve(message);
+ });
+ });
+
+ const { title } = await browser.windows.get(id);
+
+ browser.test.assertEq(
+ title,
+ undefined,
+ "popup window must not include title"
+ );
+
+ browser.test.sendMessage("done");
+ },
+ });
+
+ const extensionWithTabsPermission = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["tabs"],
+ },
+ async background() {
+ const { id, fullTitle } = await new Promise(resolve => {
+ browser.test.onMessage.addListener(message => {
+ resolve(message);
+ });
+ });
+
+ const { title } = await browser.windows.get(id);
+
+ browser.test.assertEq(
+ title,
+ fullTitle,
+ "popup title equals expected title"
+ );
+
+ browser.test.sendMessage("done");
+ },
+ });
+
+ await extensionWithoutPermissions.startup();
+ await extensionWithTabsPermission.startup();
+ await extensionWithImplicitHostPermission.startup();
+
+ const windowData = await extensionWithImplicitHostPermission.awaitMessage(
+ "windowData"
+ );
+
+ extensionWithoutPermissions.sendMessage(windowData);
+ extensionWithTabsPermission.sendMessage(windowData);
+
+ await extensionWithoutPermissions.awaitMessage("done");
+ await extensionWithTabsPermission.awaitMessage("done");
+ await extensionWithImplicitHostPermission.awaitMessage("done");
+
+ extensionWithImplicitHostPermission.sendMessage("cleanup");
+ await extensionWithImplicitHostPermission.awaitMessage("finishedCleanup");
+
+ await extensionWithoutPermissions.unload();
+ await extensionWithTabsPermission.unload();
+ await extensionWithImplicitHostPermission.unload();
+});