Bug 1015466 - Part 6, wait "http-on-opening-request" after tracker iframe is inserted. r?MattN draft
authorShih-Chiang Chien <schien@mozilla.com>
Tue, 23 May 2017 13:29:52 +0800
changeset 587453 ab9576f45d066a48e5b297bd3500b31578122ed1
parent 587452 c2cd990ee7162684b5c5f72705adeb9cff555a2a
child 631268 be67102978dc07b666350a2e528b49897906f6ec
push id61708
push userschien@mozilla.com
push dateThu, 01 Jun 2017 02:33:54 +0000
reviewersMattN
bugs1015466
milestone55.0a1
Bug 1015466 - Part 6, wait "http-on-opening-request" after tracker iframe is inserted. r?MattN The tracking protection status will be updated after nsHttpChannel.asyncOpen on chrome process and it is asynchronously triggered by inserting the tracker iframe. This is not guaranteed to be happened before the |showMenuPromise|. Waiting for "http-on-opening-request" on chrome process before "showMenuPromise" is invoked can ensure the tracking protection status is updated when the menu is shown. MozReview-Commit-ID: INjaJUMLvZU
browser/components/uitour/test/browser_trackingProtection_tour.js
--- a/browser/components/uitour/test/browser_trackingProtection_tour.js
+++ b/browser/components/uitour/test/browser_trackingProtection_tour.js
@@ -36,24 +36,36 @@ add_UITour_task(async function test_bloc
   await checkToggleTarget("controlCenter-trackingBlock");
   TrackingProtection.enableForCurrentPage();
 });
 
 
 async function checkToggleTarget(targetID) {
   let popup = document.getElementById("UITourTooltip");
 
+  let trackerOpened = new Promise(function(resolve, reject) {
+    Services.obs.addObserver(function onopen(subject) {
+      let asciiSpec = subject.QueryInterface(Ci.nsIHttpChannel).URI.asciiSpec;
+      if (asciiSpec === "https://tracking.example.com/") {
+        Services.obs.removeObserver(onopen, "http-on-opening-request");
+        resolve();
+      }
+    }, "http-on-opening-request");
+  });
+
   await ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
     let doc = content.document;
     let iframe = doc.createElement("iframe");
     iframe.setAttribute("id", "tracking-element");
     iframe.setAttribute("src", "https://tracking.example.com/");
     doc.body.insertBefore(iframe, doc.body.firstChild);
   });
 
+  await trackerOpened;
+
   let testTargetAvailability = async function(expectedAvailable) {
     let data = await getConfigurationPromise("availableTargets");
     let available = (data.targets.indexOf(targetID) != -1);
     is(available, expectedAvailable, "Target has expected availability.");
   };
   await testTargetAvailability(false);
   await showMenuPromise("controlCenter");
   await testTargetAvailability(true);