Bug 1357723 fix intermittent failure of tab close, r?kmag
MozReview-Commit-ID: 257gWUotCqE
--- 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>"}]));