summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js b/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
new file mode 100644
index 0000000000..acf8b4446a
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
@@ -0,0 +1,110 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+const SLOW_PAGE =
+ getRootDirectory(gTestPath).replace(
+ "chrome://mochitests/content",
+ "http://www.example.com"
+ ) + "file_slowed_document.sjs";
+
+async function runTest(stopLoadFunc) {
+ async function background() {
+ let urls = ["http://www.example.com/*"];
+ browser.webRequest.onCompleted.addListener(
+ details => {
+ browser.test.sendMessage("done", {
+ msg: "onCompleted",
+ requestId: details.requestId,
+ });
+ },
+ { urls }
+ );
+
+ browser.webRequest.onBeforeRequest.addListener(
+ details => {
+ browser.test.sendMessage("onBeforeRequest", {
+ requestId: details.requestId,
+ });
+ },
+ { urls },
+ ["blocking"]
+ );
+
+ browser.webRequest.onErrorOccurred.addListener(
+ details => {
+ browser.test.sendMessage("done", {
+ msg: "onErrorOccurred",
+ requestId: details.requestId,
+ });
+ },
+ { urls }
+ );
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: [
+ "webRequest",
+ "webRequestBlocking",
+ "http://www.example.com/*",
+ ],
+ },
+ background,
+ });
+ await extension.startup();
+
+ // Open a SLOW_PAGE and don't wait for it to load
+ let slowTab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ SLOW_PAGE,
+ false
+ );
+
+ stopLoadFunc(slowTab);
+
+ // Retrieve the requestId from onBeforeRequest
+ let requestIdOnBeforeRequest = await extension.awaitMessage(
+ "onBeforeRequest"
+ );
+
+ // Now verify that we got the correct event and request id
+ let doneMessage = await extension.awaitMessage("done");
+
+ // We shouldn't get the onCompleted message here
+ is(doneMessage.msg, "onErrorOccurred", "received onErrorOccurred message");
+ is(
+ requestIdOnBeforeRequest.requestId,
+ doneMessage.requestId,
+ "request Ids match"
+ );
+
+ BrowserTestUtils.removeTab(slowTab);
+ await extension.unload();
+}
+
+/**
+ * Check that after we cancel a slow page load, we get an error associated with
+ * our request.
+ */
+add_task(async function test_click_stop_button() {
+ await runTest(async slowTab => {
+ // Stop the load
+ let stopButton = document.getElementById("stop-button");
+ await TestUtils.waitForCondition(() => {
+ return !stopButton.disabled;
+ });
+ stopButton.click();
+ });
+});
+
+/**
+ * Check that after we close the tab corresponding to a slow page load,
+ * that we get an error associated with our request.
+ */
+add_task(async function test_remove_tab() {
+ await runTest(slowTab => {
+ // Remove the tab
+ BrowserTestUtils.removeTab(slowTab);
+ });
+});