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.

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

mercurial