forked from mirrors/gecko-dev
this.browser in toolkit/actors/ControllersParent.jsm is the top level browser, ie the browser holding the root content document. So the conversion that happens in that file converts the coordinates to be relative to the root content document, but they need to be relative to the root of whichever child process we are sending the event to. The best way I found out how to do this was to pass the coords down to the child process still relative to the parent process widget and then in the child process use the child to parent transform matrix to make them relative to the root widget in the child process. I needed a new nsIDOMWindowUtils functions because I don't think there is anything existing to do this. Differential Revision: https://phabricator.services.mozilla.com/D126861
94 lines
2.4 KiB
JavaScript
94 lines
2.4 KiB
JavaScript
/* vim: set ts=2 sw=2 sts=2 et tw=80: */
|
|
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
var EXPORTED_SYMBOLS = ["ControllersParent"];
|
|
|
|
class ControllersParent extends JSWindowActorParent {
|
|
constructor() {
|
|
super();
|
|
|
|
// 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 = {};
|
|
}
|
|
|
|
get browser() {
|
|
return this.browsingContext.top.embedderElement;
|
|
}
|
|
|
|
// Update the set of enabled and disabled commands.
|
|
enableDisableCommands(aAction, aEnabledCommands, aDisabledCommands) {
|
|
// Clear the list first
|
|
this.supportedCommands = {};
|
|
|
|
for (let command of aEnabledCommands) {
|
|
this.supportedCommands[command] = true;
|
|
}
|
|
|
|
for (let command of aDisabledCommands) {
|
|
this.supportedCommands[command] = false;
|
|
}
|
|
|
|
let browser = this.browser;
|
|
if (browser) {
|
|
browser.ownerGlobal.updateCommands(aAction);
|
|
}
|
|
}
|
|
|
|
isCommandEnabled(aCommand) {
|
|
return this.supportedCommands[aCommand] || false;
|
|
}
|
|
|
|
supportsCommand(aCommand) {
|
|
return aCommand in this.supportedCommands;
|
|
}
|
|
|
|
doCommand(aCommand) {
|
|
this.sendAsyncMessage("ControllerCommands:Do", aCommand);
|
|
}
|
|
|
|
getCommandStateWithParams(aCommand, aCommandParams) {
|
|
throw Components.Exception("Not implemented", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
|
}
|
|
|
|
doCommandWithParams(aCommand, aCommandParams) {
|
|
let cmd = {
|
|
cmd: aCommand,
|
|
params: null,
|
|
};
|
|
if (aCommand == "cmd_lookUpDictionary") {
|
|
cmd.params = {
|
|
x: {
|
|
type: "long",
|
|
value: aCommandParams.getLongValue("x"),
|
|
},
|
|
y: {
|
|
type: "long",
|
|
value: aCommandParams.getLongValue("y"),
|
|
},
|
|
};
|
|
} else {
|
|
throw Components.Exception(
|
|
"Not implemented",
|
|
Cr.NS_ERROR_NOT_IMPLEMENTED
|
|
);
|
|
}
|
|
this.sendAsyncMessage("ControllerCommands:DoWithParams", cmd);
|
|
}
|
|
|
|
getSupportedCommands() {
|
|
throw Components.Exception("Not implemented", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
|
}
|
|
|
|
onEvent() {}
|
|
}
|
|
|
|
ControllersParent.prototype.QueryInterface = ChromeUtils.generateQI([
|
|
"nsIBrowserController",
|
|
"nsIController",
|
|
"nsICommandController",
|
|
]);
|