michael@0: /* Any copyright is dedicated to the Public Domain.
michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */
michael@0:
michael@0: Components.utils.import("resource://gre/modules/Timer.jsm");
michael@0:
michael@0: const Ci = Components.interfaces;
michael@0:
michael@0: let tab;
michael@0: let browser;
michael@0:
michael@0: const scrollHtml =
michael@0: "blank";
michael@0:
michael@0: const scrollTest =
michael@0: "var textarea = content.document.getElementById(\"textarea1\");" +
michael@0: "textarea.scrollTop = textarea.scrollHeight;" +
michael@0: "sendAsyncMessage(\"ScrollDone\", { });"
michael@0:
michael@0: function test()
michael@0: {
michael@0: waitForExplicitFinish();
michael@0:
michael@0: tab = gBrowser.addTab("data:text/html;base64," +
michael@0: btoa(scrollHtml));
michael@0: browser = gBrowser.getBrowserForTab(tab);
michael@0: gBrowser.selectedTab = tab;
michael@0:
michael@0: browser.addEventListener("load", find, true);
michael@0: }
michael@0:
michael@0: function find()
michael@0: {
michael@0: browser.removeEventListener("load", find, true);
michael@0: let listener = {
michael@0: onFindResult: function(aData) {
michael@0: browser.finder.removeResultListener(listener);
michael@0:
michael@0: ok(aData.result == Ci.nsITypeAheadFind.FIND_FOUND, "should find string");
michael@0:
michael@0: browser.messageManager.addMessageListener("ScrollDone",
michael@0: function f(aMsg) {
michael@0: browser.messageManager.removeMessageListener("ScrollDone", f);
michael@0: browser.loadURI("about:blank");
michael@0: browser.addEventListener("load", findAgain, true);
michael@0: });
michael@0:
michael@0: // scroll textarea to bottom
michael@0: browser.messageManager.loadFrameScript("data:text/javascript;base64," +
michael@0: btoa(scrollTest), false);
michael@0:
michael@0: },
michael@0: };
michael@0: browser.finder.addResultListener(listener);
michael@0: gFindBar.onFindCommand();
michael@0: EventUtils.sendString("F");
michael@0: }
michael@0:
michael@0: function findAgain()
michael@0: {
michael@0: browser.removeEventListener("load", findAgain, true);
michael@0:
michael@0: ok(browser.currentURI.spec == "about:blank", "cannot navigate to about:blank");
michael@0: let listener = {
michael@0: onFindResult: function(aData) {
michael@0: browser.finder.removeResultListener(listener);
michael@0: cleanup();
michael@0: },
michael@0: };
michael@0:
michael@0: browser.finder.addResultListener(listener);
michael@0: // find again needs delay for crash test
michael@0: setTimeout(function() {
michael@0: // ignore exception if occured
michael@0: try {
michael@0: gFindBar.onFindAgainCommand(false);
michael@0: } catch (e) {
michael@0: }
michael@0: cleanup();
michael@0: }, 0);
michael@0: }
michael@0:
michael@0: function cleanup()
michael@0: {
michael@0: gBrowser.removeTab(tab);
michael@0: finish();
michael@0: }