|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Components.utils.import("resource://gre/modules/Timer.jsm"); |
|
5 |
|
6 const Ci = Components.interfaces; |
|
7 |
|
8 let tab; |
|
9 let browser; |
|
10 |
|
11 const scrollHtml = |
|
12 "<textarea id=\"textarea1\" row=2>Firefox\n\nFirefox\n\n\n\n\n\n\n\n\n\n" + |
|
13 "</textarea><a href=\"about:blank\">blank</a>"; |
|
14 |
|
15 const scrollTest = |
|
16 "var textarea = content.document.getElementById(\"textarea1\");" + |
|
17 "textarea.scrollTop = textarea.scrollHeight;" + |
|
18 "sendAsyncMessage(\"ScrollDone\", { });" |
|
19 |
|
20 function test() |
|
21 { |
|
22 waitForExplicitFinish(); |
|
23 |
|
24 tab = gBrowser.addTab("data:text/html;base64," + |
|
25 btoa(scrollHtml)); |
|
26 browser = gBrowser.getBrowserForTab(tab); |
|
27 gBrowser.selectedTab = tab; |
|
28 |
|
29 browser.addEventListener("load", find, true); |
|
30 } |
|
31 |
|
32 function find() |
|
33 { |
|
34 browser.removeEventListener("load", find, true); |
|
35 let listener = { |
|
36 onFindResult: function(aData) { |
|
37 browser.finder.removeResultListener(listener); |
|
38 |
|
39 ok(aData.result == Ci.nsITypeAheadFind.FIND_FOUND, "should find string"); |
|
40 |
|
41 browser.messageManager.addMessageListener("ScrollDone", |
|
42 function f(aMsg) { |
|
43 browser.messageManager.removeMessageListener("ScrollDone", f); |
|
44 browser.loadURI("about:blank"); |
|
45 browser.addEventListener("load", findAgain, true); |
|
46 }); |
|
47 |
|
48 // scroll textarea to bottom |
|
49 browser.messageManager.loadFrameScript("data:text/javascript;base64," + |
|
50 btoa(scrollTest), false); |
|
51 |
|
52 }, |
|
53 }; |
|
54 browser.finder.addResultListener(listener); |
|
55 gFindBar.onFindCommand(); |
|
56 EventUtils.sendString("F"); |
|
57 } |
|
58 |
|
59 function findAgain() |
|
60 { |
|
61 browser.removeEventListener("load", findAgain, true); |
|
62 |
|
63 ok(browser.currentURI.spec == "about:blank", "cannot navigate to about:blank"); |
|
64 let listener = { |
|
65 onFindResult: function(aData) { |
|
66 browser.finder.removeResultListener(listener); |
|
67 cleanup(); |
|
68 }, |
|
69 }; |
|
70 |
|
71 browser.finder.addResultListener(listener); |
|
72 // find again needs delay for crash test |
|
73 setTimeout(function() { |
|
74 // ignore exception if occured |
|
75 try { |
|
76 gFindBar.onFindAgainCommand(false); |
|
77 } catch (e) { |
|
78 } |
|
79 cleanup(); |
|
80 }, 0); |
|
81 } |
|
82 |
|
83 function cleanup() |
|
84 { |
|
85 gBrowser.removeTab(tab); |
|
86 finish(); |
|
87 } |