Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // -*- Mode: javascript; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // This Source Code Form is subject to the terms of the Mozilla Public
3 // License, v. 2.0. If a copy of the MPL was not distributed with this
4 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 this.EXPORTED_SYMBOLS = ["RemoteFinder", "RemoteFinderListener"];
8 const Ci = Components.interfaces;
9 const Cc = Components.classes;
10 const Cu = Components.utils;
12 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
14 function RemoteFinder(browser) {
15 this._browser = browser;
16 this._listeners = [];
17 this._searchString = null;
19 this._browser.messageManager.addMessageListener("Finder:Result", this);
20 this._browser.messageManager.sendAsyncMessage("Finder:Initialize");
21 }
23 RemoteFinder.prototype = {
24 addResultListener: function (aListener) {
25 if (this._listeners.indexOf(aListener) === -1)
26 this._listeners.push(aListener);
27 },
29 removeResultListener: function (aListener) {
30 this._listeners = this._listeners.filter(l => l != aListener);
31 },
33 receiveMessage: function (aMessage) {
34 this._searchString = aMessage.data.searchString;
36 for (let l of this._listeners) {
37 l.onFindResult(aMessage.data);
38 }
39 },
41 get searchString() {
42 return this._searchString;
43 },
45 set caseSensitive(aSensitive) {
46 this._browser.messageManager.sendAsyncMessage("Finder:CaseSensitive",
47 { caseSensitive: aSensitive });
48 },
50 fastFind: function (aSearchString, aLinksOnly) {
51 this._browser.messageManager.sendAsyncMessage("Finder:FastFind",
52 { searchString: aSearchString,
53 linksOnly: aLinksOnly });
54 },
56 findAgain: function (aFindBackwards, aLinksOnly) {
57 this._browser.messageManager.sendAsyncMessage("Finder:FindAgain",
58 { findBackwards: aFindBackwards,
59 linksOnly: aLinksOnly });
60 },
62 highlight: function (aHighlight, aWord) {
63 this._browser.messageManager.sendAsyncMessage("Finder:Highlight",
64 { highlight: aHighlight,
65 word: aWord });
66 },
68 enableSelection: function () {
69 this._browser.messageManager.sendAsyncMessage("Finder:EnableSelection");
70 },
72 removeSelection: function () {
73 this._browser.messageManager.sendAsyncMessage("Finder:RemoveSelection");
74 },
76 focusContent: function () {
77 this._browser.messageManager.sendAsyncMessage("Finder:FocusContent");
78 },
80 keyPress: function (aEvent) {
81 this._browser.messageManager.sendAsyncMessage("Finder:KeyPress",
82 { keyCode: aEvent.keyCode,
83 shiftKey: aEvent.shiftKey });
84 }
85 }
87 function RemoteFinderListener(global) {
88 let {Finder} = Cu.import("resource://gre/modules/Finder.jsm", {});
89 this._finder = new Finder(global.docShell);
90 this._finder.addResultListener(this);
91 this._global = global;
93 for (let msg of this.MESSAGES) {
94 global.addMessageListener(msg, this);
95 }
96 }
98 RemoteFinderListener.prototype = {
99 MESSAGES: [
100 "Finder:CaseSensitive",
101 "Finder:FastFind",
102 "Finder:FindAgain",
103 "Finder:Highlight",
104 "Finder:EnableSelection",
105 "Finder:RemoveSelection",
106 "Finder:FocusContent",
107 "Finder:KeyPress"
108 ],
110 onFindResult: function (aData) {
111 this._global.sendAsyncMessage("Finder:Result", aData);
112 },
114 //XXXmikedeboer-20131016: implement |shouldFocusContent| here to mitigate
115 // issues like bug 921338 and bug 921308.
116 shouldFocusContent: function () {
117 return true;
118 },
120 receiveMessage: function (aMessage) {
121 let data = aMessage.data;
123 switch (aMessage.name) {
124 case "Finder:CaseSensitive":
125 this._finder.caseSensitive = data.caseSensitive;
126 break;
128 case "Finder:FastFind":
129 this._finder.fastFind(data.searchString, data.linksOnly);
130 break;
132 case "Finder:FindAgain":
133 this._finder.findAgain(data.findBackwards, data.linksOnly);
134 break;
136 case "Finder:Highlight":
137 this._finder.highlight(data.highlight, data.word);
138 break;
140 case "Finder:RemoveSelection":
141 this._finder.removeSelection();
142 break;
144 case "Finder:FocusContent":
145 this._finder.focusContent();
146 break;
148 case "Finder:KeyPress":
149 this._finder.keyPress(data);
150 break;
151 }
152 }
153 };