summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html139
1 files changed, 139 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html
new file mode 100644
index 0000000000..f086d29d02
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upgrade.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test for simple WebExtension</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <script type="text/javascript" src="head.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+
+<script type="text/javascript">
+"use strict";
+
+add_task(async function test_webRequest_upgrade() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: [
+ "webRequest",
+ "webRequestBlocking",
+ "*://mochi.test/tests/*",
+ ],
+ },
+ background() {
+ browser.webRequest.onSendHeaders.addListener((details) => {
+ // At this point, the request should have been upgraded.
+ browser.test.assertTrue(details.url.startsWith("https:"), "request is upgraded");
+ browser.test.assertTrue(details.url.includes("file_sample"), "redirect after upgrade worked");
+ // Note: although not significant for the test assertions, note that
+ // the requested file won't load - https://mochi.test:8888/ does not
+ // resolve to anything on the test server.
+ browser.test.sendMessage("finished");
+ }, {urls: ["*://mochi.test/tests/*"]});
+
+ browser.webRequest.onBeforeRequest.addListener((details) => {
+ browser.test.log(`onBeforeRequest ${details.requestId} ${details.url}`);
+ let url = new URL(details.url);
+ if (url.protocol == "http:") {
+ return {upgradeToSecure: true};
+ }
+ // After the channel is initially upgraded, we get another onBeforeRequest
+ // call. Here we can redirect again to a new url.
+ if (details.url.includes("file_mixed.html")) {
+ let redirectUrl = new URL("file_sample.html", details.url).href;
+ return {redirectUrl};
+ }
+ }, {urls: ["*://mochi.test/tests/*"]}, ["blocking"]);
+ },
+ });
+
+ await extension.startup();
+ let win = window.open("http://mochi.test:8888/tests/toolkit/components/extensions/test/mochitest/file_mixed.html");
+ await extension.awaitMessage("finished");
+ win.close();
+ await extension.unload();
+});
+
+add_task(async function test_webRequest_redirect_wins() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: [
+ "webRequest",
+ "webRequestBlocking",
+ "*://mochi.test/tests/*",
+ ],
+ },
+ background() {
+ browser.webRequest.onSendHeaders.addListener((details) => {
+ // At this point, the request should have been redirected instead of upgraded.
+ browser.test.assertTrue(details.url.includes("file_sample"), "request was redirected");
+ browser.test.sendMessage("finished");
+ }, {urls: ["*://mochi.test/tests/*"]});
+
+ browser.webRequest.onBeforeRequest.addListener((details) => {
+ if (details.url.includes("file_mixed.html")) {
+ let redirectUrl = new URL("file_sample.html", details.url).href;
+ return {upgradeToSecure: true, redirectUrl};
+ }
+ }, {urls: ["*://mochi.test/tests/*"]}, ["blocking"]);
+ },
+ });
+
+ await extension.startup();
+ let win = window.open("http://mochi.test:8888/tests/toolkit/components/extensions/test/mochitest/file_mixed.html");
+ await extension.awaitMessage("finished");
+ win.close();
+ await extension.unload();
+});
+
+// Test that there is no infinite redirect loop when upgradeToSecure is used on
+// https. This test checks that the redirect chain is: http -> https -> done.
+add_task(async function upgradeToSecure_for_https_is_noop() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: [
+ "webRequest",
+ "webRequestBlocking",
+ "*://example.com/tests/*",
+ ],
+ },
+ background() {
+ let count = 0;
+ browser.webRequest.onBeforeRequest.addListener(
+ details => {
+ browser.test.log(`onBeforeRequest ${details.requestId} ${details.url}`);
+ ++count;
+ if (details.url.startsWith("http:")) {
+ browser.test.assertEq(1, count, "Initial request is http:");
+ } else {
+ browser.test.assertEq(2, count, "Second request is https:");
+ }
+ return {upgradeToSecure: true};
+ },
+ { urls: ["*://example.com/tests/*file_sample.html"] },
+ ["blocking"]
+ );
+ browser.webRequest.onCompleted.addListener(
+ details => {
+ browser.test.log(`onCompleted ${details.requestId} ${details.url}`);
+ browser.test.assertTrue(details.url.startsWith("https"), "is https");
+ browser.test.assertEq(2, count, "Seen two requests (http + https)");
+ browser.test.sendMessage("finished");
+ },
+ { urls: ["*://example.com/tests/*file_sample.html"] },
+ );
+ },
+ });
+
+ await extension.startup();
+ // eslint-disable-next-line @microsoft/sdl/no-insecure-url
+ let win = window.open("http://example.com/tests/toolkit/components/extensions/test/mochitest/file_sample.html");
+ await extension.awaitMessage("finished");
+ win.close();
+ await extension.unload();
+});
+</script>
+
+</body>
+</html>