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
--- 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);