Bug 1163418 - Remove use of CPOWs in safebrowsing tests. r=felipe

This commit is contained in:
Blake Kaplan 2016-06-09 15:38:07 -07:00
parent 65c8df357c
commit 5688cefb7f
2 changed files with 35 additions and 21 deletions

View File

@ -22,32 +22,46 @@ XPCOMUtils.defineLazyModuleGetter(this, "Task",
function promiseTabLoadEvent(tab, url, eventType="load")
{
let deferred = Promise.defer();
info("Wait tab event: " + eventType);
info(`Wait tab event: ${eventType}`);
function handle(event) {
if (event.originalTarget != tab.linkedBrowser.contentDocument ||
event.target.location.href == "about:blank" ||
(url && event.target.location.href != url)) {
info("Skipping spurious '" + eventType + "'' event" +
" for " + event.target.location.href);
return;
function handle(loadedUrl) {
if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) {
info(`Skipping spurious load event for ${loadedUrl}`);
return false;
}
clearTimeout(timeout);
tab.linkedBrowser.removeEventListener(eventType, handle, true);
info("Tab event received: " + eventType);
deferred.resolve(event);
info("Tab event received: load");
return true;
}
// Create two promises: one resolved from the content process when the page
// loads and one that is rejected if we take too long to load the url.
let loaded;
if (eventType === "load") {
loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle);
} else {
// No need to use handle.
loaded =
BrowserTestUtils.waitForContentEvent(tab.linkedBrowser, eventType,
true, undefined, true);
}
let timeout = setTimeout(() => {
tab.linkedBrowser.removeEventListener(eventType, handle, true);
deferred.reject(new Error("Timed out while waiting for a '" + eventType + "'' event"));
deferred.reject(new Error(`Timed out while waiting for a ${eventType} event`));
}, 30000);
tab.linkedBrowser.addEventListener(eventType, handle, true, true);
if (url) {
tab.linkedBrowser.loadURI(url);
}
return deferred.promise;
loaded.then(() => {
clearTimeout(timeout);
deferred.resolve()
});
if (url)
BrowserTestUtils.loadURI(tab.linkedBrowser, url);
// Promise.all rejects if either promise rejects (i.e. if we time out) and
// if our loaded promise resolves before the timeout, then we resolve the
// timeout promise as well, causing the all promise to resolve.
return Promise.all([deferred.promise, loaded]);
}
Services.prefs.setCharPref("urlclassifier.forbiddenTable", "test-forbid-simple");

View File

@ -97,7 +97,7 @@ this.ContentTaskUtils = {
* @returns {Promise}
* @resolves The Event object.
*/
waitForEvent(subject, eventName, capture, checkFn) {
waitForEvent(subject, eventName, capture, checkFn, wantsUntrusted = false) {
return new Promise((resolve, reject) => {
subject.addEventListener(eventName, function listener(event) {
try {
@ -114,7 +114,7 @@ this.ContentTaskUtils = {
}
reject(ex);
}
}, capture);
}, capture, wantsUntrusted);
});
},
};