toolkit/modules/RemoteFinder.jsm

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial