Bug 1357723 fix intermittent failure of tab close, r?kmag draft
authorShane Caraveo <scaraveo@mozilla.com>
Mon, 24 Apr 2017 13:59:36 -0700
changeset 567343 e38f50328ed3a6c8d918e402ece7e23d773168af
parent 565261 a34919b3d942cfd4f0737d432742b0ffa9929389
child 625614 6d4cc4d05eeec3f3f6b8a874ed7156e9ae512e0d
push id55537
push usermixedpuppy@gmail.com
push dateMon, 24 Apr 2017 21:00:44 +0000
reviewerskmag
bugs1357723
milestone55.0a1
Bug 1357723 fix intermittent failure of tab close, r?kmag MozReview-Commit-ID: 257gWUotCqE
toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html
toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html
--- a/toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html
+++ b/toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html
@@ -1,13 +1,10 @@
 <!DOCTYPE HTML>
 
 <html>
 <head>
 <meta charset="utf-8">
 <script>
 "use strict";
-window.onload = () => {
-  window.close();
-};
 </script>
 </head>
 </html>
--- a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
@@ -227,26 +227,56 @@ add_task(function* test_webRequest_heade
   };
   extension.sendMessage("set-expected", {expect, origin: location.href});
   yield extension.awaitMessage("continue");
   addScript("file_script_nonexistent.js");
   yield extension.awaitMessage("done");
 });
 
 add_task(function* test_webRequest_tabId() {
+  function background() {
+    let tab;
+    browser.tabs.onCreated.addListener(newTab => {
+      tab = newTab;
+    });
+
+    browser.test.onMessage.addListener(msg => {
+      if (msg === "close-tab") {
+        browser.tabs.remove(tab.id);
+        browser.test.sendMessage("tab-closed");
+      }
+    });
+  }
+
+  let tabExt = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: [
+        "tabs",
+      ],
+    },
+    background,
+  });
+  yield tabExt.startup();
+
   let expect = {
     "file_WebRequest_page3.html": {
       type: "main_frame",
     },
   };
   extension.sendMessage("set-expected", {expect, origin: location.href});
   yield extension.awaitMessage("continue");
   let a = addLink(`file_WebRequest_page3.html?trigger=a&nocache=${Math.random()}`);
   a.click();
   yield extension.awaitMessage("done");
+
+  let closed = tabExt.awaitMessage("tab-closed");
+  tabExt.sendMessage("close-tab");
+  yield closed;
+
+  yield tabExt.unload();
 });
 
 add_task(function* test_webRequest_tabId_browser() {
   async function background(url) {
     let tabId;
     browser.test.onMessage.addListener(async (msg, expected) => {
       await browser.tabs.remove(tabId);
       browser.test.sendMessage("done");
--- a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html
@@ -106,32 +106,52 @@ function background() {
   let onBeforeRequest = details => {
     browser.test.log(`${name} ${details.requestId} ${details.url}`);
 
     onUpload(details);
   };
 
   browser.webRequest.onBeforeRequest.addListener(
     onBeforeRequest, FILTERS, ["requestBody"]);
+
+  let tab;
+  browser.tabs.onCreated.addListener(newTab => {
+    tab = newTab;
+  });
+
+  browser.test.onMessage.addListener(msg => {
+    if (msg === "close-tab") {
+      browser.tabs.remove(tab.id);
+      browser.test.sendMessage("tab-closed");
+    }
+  });
 }
 
 add_task(function* test_xhr_forms() {
   let extension = ExtensionTestUtils.loadExtension({
     manifest: {
       permissions: [
+        "tabs",
         "webRequest",
         "webRequestBlocking",
         "<all_urls>",
       ],
     },
     background,
   });
 
   yield extension.startup();
 
+  function* doneAndTabClosed() {
+    yield extension.awaitMessage("done");
+    let closed = extension.awaitMessage("tab-closed");
+    extension.sendMessage("close-tab");
+    yield closed;
+  }
+
   for (let form of document.forms) {
     if (file.name in form.elements) {
       SpecialPowers.wrap(form.elements[file.name]).mozSetFileArray(files);
     }
     let action = new URL(form.action);
     let formData = new FormData(form);
     let webRequestFD = {};
 
@@ -142,29 +162,29 @@ add_task(function* test_xhr_forms() {
       action.searchParams.set("upload", JSON.stringify(webRequestFD));
       action.searchParams.set("enctype", form.enctype);
     };
 
     updateActionURL();
 
     form.action = action;
     form.submit();
-    yield extension.awaitMessage("done");
+    yield doneAndTabClosed();
 
     if (form.enctype !== "multipart/form-data") {
       continue;
     }
 
     let post = (data) => {
       let xhr = new XMLHttpRequest();
       action.searchParams.set("xhr", "1");
       xhr.open("POST", action.href);
       xhr.send(data);
       action.searchParams.delete("xhr");
-      return extension.awaitMessage("done");
+      return doneAndTabClosed();
     };
 
     formData.append(blob.name, blob.content, blob.fileName);
     formData.append("formDataField", "some value");
     updateActionURL();
     yield post(formData);
 
     action.searchParams.set("upload", JSON.stringify([{file: "<file>"}]));