summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/RemoteController.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/RemoteController.jsm')
-rw-r--r--toolkit/modules/RemoteController.jsm96
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);
+ }
+};