summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js')
-rw-r--r--toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js b/toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js
new file mode 100644
index 0000000000..96a2216067
--- /dev/null
+++ b/toolkit/components/extensions/test/browser/browser_ext_thumbnails_bg_extension.js
@@ -0,0 +1,94 @@
+"use strict";
+
+/* import-globals-from ../../../thumbnails/test/head.js */
+loadTestSubscript("../../../thumbnails/test/head.js");
+
+// The service that creates thumbnails of webpages in the background loads a
+// web page in the background (with several features disabled). Extensions
+// should be able to observe requests, but not run content scripts.
+add_task(async function test_thumbnails_background_visibility_to_extensions() {
+ const iframeUrl = "http://example.com/?iframe";
+ const testPageUrl = bgTestPageURL({ iframe: iframeUrl });
+ // ^ testPageUrl is http://mochi.test:8888/.../thumbnails_background.sjs?...
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ content_scripts: [
+ {
+ // ":8888" omitted due to bug 1362809.
+ matches: [
+ "http://mochi.test/*/thumbnails_background.sjs*",
+ "http://example.com/?iframe*",
+ ],
+ js: ["contentscript.js"],
+ run_at: "document_start",
+ all_frames: true,
+ },
+ ],
+ permissions: [
+ "webRequest",
+ "webRequestBlocking",
+ "http://example.com/*",
+ "http://mochi.test/*",
+ ],
+ },
+ files: {
+ "contentscript.js": () => {
+ // Content scripts are not expected to be run in the page of the
+ // thumbnail service, so this should never execute.
+ new Image().src = "http://example.com/?unexpected-content-script";
+ browser.test.fail("Content script ran in thumbs, unexpectedly.");
+ },
+ },
+ background() {
+ let requests = [];
+ browser.webRequest.onBeforeRequest.addListener(
+ ({ url, tabId, frameId, type }) => {
+ browser.test.assertEq(-1, tabId, "Thumb page is not a tab");
+ // We want to know if frameId is 0 or non-negative (or possibly -1).
+ if (type === "sub_frame") {
+ browser.test.assertTrue(frameId > 0, `frame ${frameId} for ${url}`);
+ } else {
+ browser.test.assertEq(0, frameId, `frameId for ${type} ${url}`);
+ }
+ requests.push({ type, url });
+ },
+ {
+ types: ["main_frame", "sub_frame", "image"],
+ urls: ["*://*/*"],
+ },
+ ["blocking"]
+ );
+ browser.test.onMessage.addListener(msg => {
+ browser.test.assertEq("get-results", msg, "expected message");
+ browser.test.sendMessage("webRequest-results", requests);
+ });
+ },
+ });
+
+ await extension.startup();
+
+ ok(!thumbnailExists(testPageUrl), "Thumbnail should not be cached yet.");
+
+ await bgCapture(testPageUrl);
+ ok(thumbnailExists(testPageUrl), "Thumbnail should be cached after capture");
+ removeThumbnail(testPageUrl);
+
+ extension.sendMessage("get-results");
+ Assert.deepEqual(
+ await extension.awaitMessage("webRequest-results"),
+ [
+ {
+ type: "main_frame",
+ url: testPageUrl,
+ },
+ {
+ type: "sub_frame",
+ url: iframeUrl,
+ },
+ ],
+ "Expected requests via webRequest"
+ );
+
+ await extension.unload();
+});