Bug 1455405 fix intermittent by using real events, r=rpl
authorShane Caraveo <scaraveo@mozilla.com>
Mon, 16 Jul 2018 09:08:30 -0300
changeset 818997 21074760bff672d53594a4d1a45cd4460f6d66b0
parent 818996 e40038281727001cf3da186e14a7fa8eb1e79f09
child 818998 48135d25898304a1c991b66639ffa029b0d0035c
push id116413
push userbgrinstead@mozilla.com
push dateMon, 16 Jul 2018 22:40:17 +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: {