diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/modules/RemoteController.jsm | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/modules/RemoteController.jsm')
-rw-r--r-- | toolkit/modules/RemoteController.jsm | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/toolkit/modules/RemoteController.jsm b/toolkit/modules/RemoteController.jsm new file mode 100644 index 000000000..23f1bd949 --- /dev/null +++ b/toolkit/modules/RemoteController.jsm @@ -0,0 +1,96 @@ +// -*- indent-tabs-mode: nil; js-indent-level: 2 -*- +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +this.EXPORTED_SYMBOLS = ["RemoteController"]; + +const Ci = Components.interfaces; +const Cc = Components.classes; +const Cu = Components.utils; +const Cr = Components.results; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +function RemoteController(browser) +{ + this._browser = browser; + + // A map of commands that have had their enabled/disabled state assigned. The + // value of each key will be true if enabled, and false if disabled. + this._supportedCommands = { }; +} + +RemoteController.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIController, + Ci.nsICommandController]), + + isCommandEnabled: function(aCommand) { + return this._supportedCommands[aCommand] || false; + }, + + supportsCommand: function(aCommand) { + return aCommand in this._supportedCommands; + }, + + doCommand: function(aCommand) { + this._browser.messageManager.sendAsyncMessage("ControllerCommands:Do", aCommand); + }, + + getCommandStateWithParams: function(aCommand, aCommandParams) { + throw Cr.NS_ERROR_NOT_IMPLEMENTED; + }, + + doCommandWithParams: function(aCommand, aCommandParams) { + let cmd = { + cmd: aCommand, + params: null + }; + if (aCommand == "cmd_lookUpDictionary") { + // Although getBoundingClientRect of the element is logical pixel, but + // x and y parameter of cmd_lookUpDictionary are device pixel. + // So we need calculate child process's coordinate using correct unit. + let rect = this._browser.getBoundingClientRect(); + let scale = this._browser.ownerDocument.defaultView.devicePixelRatio; + cmd.params = { + x: { + type: "long", + value: aCommandParams.getLongValue("x") - rect.left * scale + }, + y: { + type: "long", + value: aCommandParams.getLongValue("y") - rect.top * scale + } + }; + } else { + throw Cr.NS_ERROR_NOT_IMPLEMENTED; + } + this._browser.messageManager.sendAsyncMessage( + "ControllerCommands:DoWithParams", cmd); + }, + + getSupportedCommands: function(aCount, aCommands) { + throw Cr.NS_ERROR_NOT_IMPLEMENTED; + }, + + onEvent: function () {}, + + // This is intended to be called from the remote-browser binding to update + // the enabled and disabled commands. + enableDisableCommands: function(aAction, + aEnabledLength, aEnabledCommands, + aDisabledLength, aDisabledCommands) { + // Clear the list first + this._supportedCommands = { }; + + for (let c = 0; c < aEnabledLength; c++) { + this._supportedCommands[aEnabledCommands[c]] = true; + } + + for (let c = 0; c < aDisabledLength; c++) { + this._supportedCommands[aDisabledCommands[c]] = false; + } + + this._browser.ownerDocument.defaultView.updateCommands(aAction); + } +}; |