const scrollHtml =
' +
'blank';
add_task(async
function () {
let url =
"data:text/html;base64," + btoa(scrollHtml);
await BrowserTestUtils.withNewTab(
{ gBrowser, url },
async
function (browser) {
let awaitFindResult =
new Promise(resolve => {
let listener = {
onFindResult(aData) {
info(
"got find result");
browser.finder.removeResultListener(listener);
Assert.equal(
aData.result,
Ci.nsITypeAheadFind.FIND_FOUND,
"should find string"
);
resolve();
},
onCurrentSelection() {},
onMatchesCountResult() {},
};
info(
"about to add results listener, open find bar, and send 'F' string"
);
browser.finder.addResultListener(listener);
});
await gFindBarPromise;
gFindBar.onFindCommand();
EventUtils.sendString(
"F");
info(
"added result listener and sent string 'F'");
await awaitFindResult;
// scroll textarea to bottom
await SpecialPowers.spawn(browser, [], () => {
let textarea = content.document.getElementById(
"textarea1");
textarea.scrollTop = textarea.scrollHeight;
});
BrowserTestUtils.startLoadingURIString(browser,
"about:blank");
await BrowserTestUtils.browserLoaded(browser);
Assert.equal(
browser.currentURI.spec,
"about:blank",
"got load event for about:blank"
);
let awaitFindResult2 =
new Promise(resolve => {
let listener = {
onFindResult() {
info(
"got find result #2");
browser.finder.removeResultListener(listener);
resolve();
},
onCurrentSelection() {},
onMatchesCountResult() {},
};
browser.finder.addResultListener(listener);
info(
"added result listener");
});
// find again needs delay for crash test
setTimeout(
function () {
// ignore exception if occured
try {
info(
"about to send find again command");
gFindBar.onFindAgainCommand(
false);
info(
"sent find again command");
}
catch (e) {
info(
"got exception from onFindAgainCommand: " + e);
}
}, 0);
await awaitFindResult2;
}
);
});