Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"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 });
let extension = ExtensionTestUtils.loadExtension({
manifest: {
content_scripts: [
{
// ":8888" omitted due to bug 1362809.
matches: [
],
js: ["contentscript.js"],
run_at: "document_start",
all_frames: true,
},
],
permissions: [
"webRequest",
"webRequestBlocking",
],
},
files: {
"contentscript.js": () => {
// Content scripts are not expected to be run in the page of the
// thumbnail service, so this should never execute.
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();
});