Bug 1602318 - Change search engine tests to listen for, and block loads in the parent. r=kmag

Differential Revision: https://phabricator.services.mozilla.com/D67098
This commit is contained in:
Matt Woodrow 2020-04-26 00:49:49 +00:00
parent 6e36d339b4
commit d84621ec50
3 changed files with 13 additions and 77 deletions

View File

@ -185,15 +185,17 @@ async function testSearchEngine(engineDetails) {
await test.preTest(tab);
}
let stateChangePromise = promiseStateChangeURI();
let promises = [
BrowserTestUtils.waitForDocLoadAndStopIt(
"https://www.google.com/search?client=" + test.code + "&q=foo",
tab
),
BrowserTestUtils.browserStopped(tab.linkedBrowser, null, true),
];
await test.run(tab);
let receivedURI = await stateChangePromise;
let receivedURLParams = new URLSearchParams(receivedURI.split("?")[1]);
Assert.equal(receivedURLParams.get("client"), test.code);
await Promise.all(promises);
if (test.postTest) {
await test.postTest(tab);

View File

@ -189,13 +189,14 @@ async function testSearchEngine(engineDetails) {
await test.preTest(tab);
}
let stateChangePromise = promiseStateChangeURI();
let promises = [
BrowserTestUtils.waitForDocLoadAndStopIt(test.searchURL, tab),
BrowserTestUtils.browserStopped(tab.linkedBrowser, null, true),
];
await test.run(tab);
let receivedURI = await stateChangePromise;
Assert.equal(receivedURI, test.searchURL);
await Promise.all(promises);
}
engine.alias = undefined;

View File

@ -109,73 +109,6 @@ async function promiseNewEngine(basename, options = {}) {
return engine;
}
let promiseStateChangeFrameScript =
"data:," +
encodeURIComponent(
`(${() => {
/* globals docShell, sendAsyncMessage */
const global = this;
const LISTENER = Symbol("listener");
let listener = {
QueryInterface: ChromeUtils.generateQI([
"nsISupportsWeakReference",
"nsIWebProgressListener",
]),
onStateChange: function onStateChange(webProgress, req, flags, status) {
// Only care about top-level document starts
if (
!webProgress.isTopLevel ||
!(flags & Ci.nsIWebProgressListener.STATE_START)
) {
return;
}
req.QueryInterface(Ci.nsIChannel);
let spec = req.originalURI.spec;
if (spec == "about:blank") {
return;
}
delete global[LISTENER];
docShell.removeProgressListener(listener);
req.cancel(Cr.NS_ERROR_FAILURE);
sendAsyncMessage("PromiseStateChange::StateChanged", spec);
},
};
// Make sure the weak reference stays alive.
global[LISTENER] = listener;
docShell.QueryInterface(Ci.nsIWebProgress);
docShell.addProgressListener(
listener,
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT
);
}})()`
);
function promiseStateChangeURI() {
const MSG = "PromiseStateChange::StateChanged";
return new Promise(resolve => {
let mm = window.getGroupMessageManager("browsers");
mm.loadFrameScript(promiseStateChangeFrameScript, true);
let listener = msg => {
mm.removeMessageListener(MSG, listener);
mm.removeDelayedFrameScript(promiseStateChangeFrameScript);
resolve(msg.data);
};
mm.addMessageListener(MSG, listener);
});
}
// Get an array of the one-off buttons.
function getOneOffs() {
let oneOffs = [];