Bug 1368527 test using hsts to see flow
MozReview-Commit-ID: EJVkU4ORGis
new file mode 100644
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/hsts.sjs
@@ -0,0 +1,8 @@
+function handleRequest(request, response) {
+ let page = "<!DOCTYPE html><html><body><p>HSTS page</p></body></html>";
+ response.setStatusLine(request.httpVersion, "200", "OK");
+ response.setHeader("Strict-Transport-Security", "max-age=60");
+ response.setHeader("Content-Type", "text/html", false);
+ response.setHeader("Content-Length", page.length + "", false);
+ response.write(page);
+}
--- a/toolkit/components/extensions/test/mochitest/mochitest-common.ini
+++ b/toolkit/components/extensions/test/mochitest/mochitest-common.ini
@@ -42,16 +42,17 @@ support-files =
file_simple_xhr_frame2.html
redirection.sjs
file_privilege_escalation.html
file_ext_test_api_injection.js
file_permission_xhr.html
file_teardown_test.js
return_headers.sjs
webrequest_worker.js
+ hsts.sjs
!/toolkit/components/passwordmgr/test/authenticate.sjs
!/dom/tests/mochitest/geolocation/network_geolocation.sjs
[test_ext_clipboard.html]
# skip-if = # disabled test case with_permission_allow_copy, see inline comment.
[test_ext_inIncognitoContext_window.html]
skip-if = os == 'android' # Android does not support multiple windows.
[test_ext_geturl.html]
@@ -110,16 +111,17 @@ skip-if = os == 'android' # Bug 1258975
# (it has only been enabled for apps and privileged code). See Bug 1119462 for additional info.
skip-if = os == 'android'
[test_ext_unload_frame.html]
[test_ext_listener_proxies.html]
[test_ext_web_accessible_resources.html]
[test_ext_webrequest_auth.html]
skip-if = os == 'android'
[test_ext_webrequest_background_events.html]
+[test_ext_webrequest_hsts.html]
[test_ext_webrequest_basic.html]
[test_ext_webrequest_filter.html]
[test_ext_webrequest_frameId.html]
[test_ext_webrequest_suspend.html]
[test_ext_webrequest_upload.html]
skip-if = os == 'android' # Currently fails in emulator tests
[test_ext_webrequest_permission.html]
[test_ext_webrequest_websocket.html]
new file mode 100644
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_hsts.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML>
+
+<html>
+<head>
+<meta charset="utf-8">
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
+ <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <script type="text/javascript" src="head.js"></script>
+ <script type="text/javascript" src="head_webrequest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+<script>
+"use strict";
+
+function getExtension(background) {
+ let manifest = {
+ "permissions": [
+ "webRequest",
+ "webRequestBlocking",
+ "<all_urls>",
+ ],
+ };
+ return ExtensionTestUtils.loadExtension({
+ manifest,
+ background,
+ });
+}
+
+add_task(async function test_test() {
+ ok(true, "this test has run");
+});
+
+// This test makes a request against a server that redirects with a 302.
+add_task(async function test_hsts_request() {
+ const testPath = "example.org/tests/toolkit/components/extensions/test/mochitest";
+
+ let extension = getExtension(async function() {
+ let urls = ["*://example.org/tests/*"];
+ browser.webRequest.onBeforeRequest.addListener(details => {
+ browser.test.log(`onBeforeRequest ${JSON.stringify(details)}`);
+ }, {urls}, ["blocking"]);
+ browser.webRequest.onBeforeSendHeaders.addListener(details => {
+ browser.test.log(`onBeforeSendHeaders ${JSON.stringify(details)}`);
+ }, {urls}, ["blocking", "requestHeaders"]);
+ browser.webRequest.onSendHeaders.addListener(details => {
+ browser.test.log(`onSendHeaders ${JSON.stringify(details)}`);
+ }, {urls}, ["requestHeaders"]);
+ browser.webRequest.onHeadersReceived.addListener(details => {
+ browser.test.log(`onHeadersReceived ${JSON.stringify(details)}`);
+ }, {urls}, ["blocking", "responseHeaders"]);
+ browser.webRequest.onBeforeRedirect.addListener(details => {
+ browser.test.log(`onBeforeRedirect ${JSON.stringify(details)}`);
+ }, {urls});
+ browser.webRequest.onResponseStarted.addListener(details => {
+ browser.test.log(`onResponseStarted ${JSON.stringify(details)}`);
+ }, {urls});
+ browser.webRequest.onCompleted.addListener(details => {
+ browser.test.log(`onCompleted ${JSON.stringify(details)}`);
+ }, {urls});
+ browser.webRequest.onErrorOccurred.addListener(details => {
+ browser.test.log(`onErrorOccurred ${JSON.stringify(details)}`);
+ }, {urls});
+
+ async function onUpdated(tabId, tabInfo, tab) {
+ if (tabInfo.status !== "complete") {
+ return;
+ }
+ browser.test.log(`tab created ${tabId} ${JSON.stringify(tabInfo)} ${tab.url}`);
+ browser.tabs.remove(tabId);
+ browser.tabs.onUpdated.removeListener(onUpdated);
+ browser.test.sendMessage("tabs-done");
+ }
+ browser.test.onMessage.addListener(url => {
+ browser.tabs.onUpdated.addListener(onUpdated);
+ browser.tabs.create({url});
+ });
+ });
+ await extension.startup();
+ extension.sendMessage(`https://${testPath}/redirection.sjs`);
+ await extension.awaitMessage("tabs-done");
+ extension.sendMessage(`https://${testPath}/hsts.sjs`);
+ await extension.awaitMessage("tabs-done");
+ extension.sendMessage(`http://${testPath}/hsts.sjs`);
+ await extension.awaitMessage("tabs-done");
+ await extension.unload();
+});
+</script>
+</head>
+<body>
+
+</body>
+</html>