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: }