Bug 1745818 - Treat host permissions as optional in mv3, r=robwu
[gecko.git] / toolkit / components / extensions / test / xpcshell / test_ext_webSocket.js
blob20e7c94c385706fba9599b646cd84790d204b250
1 "use strict";
3 const HOSTS = new Set(["example.com"]);
5 Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
7 const server = createHttpServer({ hosts: HOSTS });
9 const BASE_URL = `http://example.com`;
10 const pageURL = `${BASE_URL}/plain.html`;
12 server.registerPathHandler("/plain.html", (request, response) => {
13   response.setStatusLine(request.httpVersion, 200, "OK");
14   response.setHeader("Content-Type", "text/html");
15   response.setHeader("Content-Security-Policy", "upgrade-insecure-requests;");
16   response.write("<!DOCTYPE html><html></html>");
17 });
19 async function testWebSocketInFrameUpgraded(data = {}) {
20   const frame = document.createElement("iframe");
21   frame.src = browser.runtime.getURL("frame.html");
22   document.documentElement.appendChild(frame);
25 async function test_webSocket(version) {
26   let extension = ExtensionTestUtils.loadExtension({
27     manifest: {
28       manifest_version: version,
29       permissions: ["webRequest", "webRequestBlocking"],
30       host_permissions: ["<all_urls>"],
31       granted_host_permissions: true,
32       content_scripts: [
33         {
34           matches: ["http://*/plain.html"],
35           run_at: "document_idle",
36           js: ["content_script.js"],
37         },
38       ],
39     },
40     temporarilyInstalled: true,
41     background() {
42       browser.webRequest.onBeforeRequest.addListener(
43         details => {
44           // the websockets should not be upgraded
45           browser.test.assertEq(
46             "ws:",
47             new URL(details.url).protocol,
48             "ws protocol worked"
49           );
50           browser.test.notifyPass("websocket");
51         },
52         { urls: ["wss://example.com/*", "ws://example.com/*"] },
53         ["blocking"]
54       );
55     },
56     files: {
57       "frame.html": `
58 <html>
59     <head>
60         <meta charset="utf-8"/>
61         <script type="application/javascript" src="frame_script.js"></script>
62     </head>
63     <body>
64     </body>
65 </html>
66           `,
67       "frame_script.js": `new WebSocket("ws://example.com/ws_dummy");`,
68       "content_script.js": `
69       (${testWebSocketInFrameUpgraded})()
70       `,
71     },
72   });
74   await extension.startup();
76   let contentPage = await ExtensionTestUtils.loadContentPage(pageURL);
77   await extension.awaitFinish("websocket");
78   await contentPage.close();
79   await extension.unload();
82 add_task(async function test_webSocket_upgrade_iframe() {
83   await test_webSocket(2);
84   await test_webSocket(3);
85 });