Bug 1455405 fix intermittent by using real events, r?rpl draft
authorShane Caraveo <scaraveo@mozilla.com>
Mon, 16 Jul 2018 09:08:30 -0300
changeset 818683 31b042656dcbb3589850e405f2520026e0af87fc
parent 818682 2ed1506d1dc7db3d70a3feed95f1456bce05bbee
push id116318
push usermixedpuppy@gmail.com
push dateMon, 16 Jul 2018 12:08:59 +0000
reviewersrpl
bugs1455405
milestone63.0a1
Bug 1455405 fix intermittent by using real events, r?rpl This test was testing that files are loaded/executed/etc in the page, but what we really care about is that the webrequest api works. Other tests are responsible for stuff like css and js actually work. The patch does maintain (fixed) the js test, but removes the css test for lack of a good way to properly wait for css to apply. MozReview-Commit-ID: B2uByaxNeK2
toolkit/components/extensions/test/mochitest/file_script_good.js
toolkit/components/extensions/test/mochitest/mochitest-common.ini
toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
--- a/toolkit/components/extensions/test/mochitest/file_script_good.js
+++ b/toolkit/components/extensions/test/mochitest/file_script_good.js
@@ -1,3 +1,12 @@
 "use strict";
 
 window.success = window.success ? window.success + 1 : 1;
+
+{
+  let scripts = document.getElementsByTagName("script");
+  let url = new URL(scripts[scripts.length - 1].src);
+  let flag = url.searchParams.get("q");
+  if (flag) {
+    window.postMessage(flag, "*");
+  }
+}
--- a/toolkit/components/extensions/test/mochitest/mochitest-common.ini
+++ b/toolkit/components/extensions/test/mochitest/mochitest-common.ini
@@ -120,17 +120,17 @@ skip-if = os == 'android' && debug # bug
 [test_ext_webnavigation.html]
 skip-if = os == 'android' && debug # bug 1397615
 [test_ext_webnavigation_filters.html]
 skip-if = (os == 'android' && debug) || (verify && (os == 'linux' || os == 'mac')) # bug 1397615
 [test_ext_webrequest_auth.html]
 skip-if = os == 'android'
 [test_ext_webrequest_background_events.html]
 [test_ext_webrequest_basic.html]
-skip-if = os == 'android' && debug || (os == 'linux' && !asan) # bug 1397615, bug 1455405
+skip-if = os == 'android' && debug # bug 1397615
 [test_ext_webrequest_errors.html]
 [test_ext_webrequest_filter.html]
 skip-if = os == 'android' && debug # bug 1452348
 [test_ext_webrequest_frameId.html]
 [test_ext_webrequest_hsts.html]
 skip-if = os == 'android' || os == 'linux' # linux, bug 1398120
 [test_ext_webrequest_upgrade.html]
 [test_ext_webrequest_upload.html]
--- a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html
@@ -7,20 +7,24 @@
   <script type="text/javascript" src="/tests/SimpleTest/AddTask.js"></script>
   <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
   <script type="text/javascript" src="head_webrequest.js"></script>
   <script type="text/javascript" src="head.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 <script>
 "use strict";
 
-function spinEventLoop() {
-  return new Promise((resolve, reject) => {
-    window.requestIdleCallback(() => {
-      resolve();
+function promiseWindowEvent(name, accept) {
+  return new Promise(resolve => {
+    window.addEventListener(name, function listener(event) {
+      if (event.data !== accept) {
+        return;
+      }
+      window.removeEventListener(name, listener);
+      resolve(event);
     });
   });
 }
 
 if (AppConstants.platform === "android") {
   SimpleTest.requestLongerTimeout(3);
 }
 
@@ -75,21 +79,16 @@ add_task(async function test_webRequest_
   };
   extension.sendMessage("set-expected", {expect, origin: location.href});
   await extension.awaitMessage("continue");
   addStylesheet("file_style_bad.css");
   await extension.awaitMessage("cancelled");
   // we redirect to style_good which completes the test
   addStylesheet("file_style_redirect.css");
   await extension.awaitMessage("done");
-
-  // waiting for CSS applied.
-  await spinEventLoop();
-  let style = window.getComputedStyle(document.getElementById("test"));
-  is(style.getPropertyValue("color"), "rgb(255, 0, 0)", "Good CSS loaded");
 });
 
 add_task(async function test_webRequest_images() {
   let expect = {
     "file_image_bad.png": {
       type: "image",
       events: ["onBeforeRequest", "onErrorOccurred"],
       cancel: "onBeforeRequest",
@@ -127,26 +126,24 @@ add_task(async function test_webRequest_
       redirect: "file_script_good.js",
     },
     "file_script_good.js": {
       type: "script",
     },
   };
   extension.sendMessage("set-expected", {expect, origin: location.href});
   await extension.awaitMessage("continue");
+  let message = promiseWindowEvent("message", "test1");
   addScript("file_script_bad.js");
   await extension.awaitMessage("cancelled");
   // we redirect to script_good which completes the test
-  addScript("file_script_redirect.js");
+  addScript("file_script_redirect.js?q=test1");
   await extension.awaitMessage("done");
 
-  // wait for JS executed
-  await spinEventLoop();
-  is(window.success, 1, "Good script ran");
-  is(window.failure, undefined, "Failure script didn't run");
+  is((await message).data, "test1", "good script ran");
 });
 
 add_task(async function test_webRequest_xhr_get() {
   let expect = {
     "file_script_xhr.js": {
       type: "script",
     },
     "xhr_resource": {
@@ -190,26 +187,26 @@ add_task(async function test_webRequest_
     "nonexistent_script_url.js": {
       status: 404,
       type: "script",
       cached: false,
     },
   };
   extension.sendMessage("set-expected", {expect, origin: location.href});
   await extension.awaitMessage("continue");
+  let message = promiseWindowEvent("message", "test1");
+
   addImage("file_image_good.png");
-  addScript("file_script_good.js");
+  addScript("file_script_good.js?q=test1");
+
+  is((await message).data, "test1", "good script ran");
+
   addStylesheet("file_style_good.css");
   addScript("nonexistent_script_url.js");
   await extension.awaitMessage("done");
-
-  // wait for JS executed
-  await spinEventLoop();
-  is(window.success, 2, "Good script ran");
-  is(window.failure, undefined, "Failure script didn't run");
 });
 
 add_task(async function test_webRequest_headers() {
   let expect = {
     "file_script_nonexistent.js": {
       type: "script",
       status: 404,
       headers: {