зеркало из https://github.com/mozilla/gecko-dev.git
118 строки
3.4 KiB
JavaScript
118 строки
3.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/. */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
FirefoxRelay: "resource://gre/modules/FirefoxRelay.sys.mjs",
|
|
});
|
|
|
|
export class ContextMenuParent extends JSWindowActorParent {
|
|
receiveMessage(message) {
|
|
let browser = this.manager.rootFrameLoader.ownerElement;
|
|
let win = browser.ownerGlobal;
|
|
// It's possible that the <xul:browser> associated with this
|
|
// ContextMenu message doesn't belong to a window that actually
|
|
// loads nsContextMenu.js. In that case, try to find the chromeEventHandler,
|
|
// since that'll likely be the "top" <xul:browser>, and then use its window's
|
|
// nsContextMenu instance instead.
|
|
if (!win.openContextMenu) {
|
|
let topBrowser = browser.ownerGlobal.docShell.chromeEventHandler;
|
|
win = topBrowser.ownerGlobal;
|
|
}
|
|
|
|
message.data.context.showRelay &&= lazy.FirefoxRelay.isEnabled;
|
|
|
|
win.openContextMenu(message, browser, this);
|
|
}
|
|
|
|
hiding() {
|
|
try {
|
|
this.sendAsyncMessage("ContextMenu:Hiding", {});
|
|
} catch (e) {
|
|
// This will throw if the content goes away while the
|
|
// context menu is still open.
|
|
}
|
|
}
|
|
|
|
reloadFrame(targetIdentifier, forceReload) {
|
|
this.sendAsyncMessage("ContextMenu:ReloadFrame", {
|
|
targetIdentifier,
|
|
forceReload,
|
|
});
|
|
}
|
|
|
|
getImageText(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:GetImageText", {
|
|
targetIdentifier,
|
|
});
|
|
}
|
|
|
|
toggleRevealPassword(targetIdentifier) {
|
|
this.sendAsyncMessage("ContextMenu:ToggleRevealPassword", {
|
|
targetIdentifier,
|
|
});
|
|
}
|
|
|
|
async useRelayMask(targetIdentifier, origin) {
|
|
if (!origin) {
|
|
return;
|
|
}
|
|
|
|
const windowGlobal = this.manager.browsingContext.currentWindowGlobal;
|
|
const browser = windowGlobal.rootFrameLoader.ownerElement;
|
|
const emailMask = await lazy.FirefoxRelay.generateUsername(browser, origin);
|
|
if (emailMask) {
|
|
this.sendAsyncMessage("ContextMenu:UseRelayMask", {
|
|
targetIdentifier,
|
|
emailMask,
|
|
});
|
|
}
|
|
}
|
|
|
|
reloadImage(targetIdentifier) {
|
|
this.sendAsyncMessage("ContextMenu:ReloadImage", { targetIdentifier });
|
|
}
|
|
|
|
getFrameTitle(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:GetFrameTitle", { targetIdentifier });
|
|
}
|
|
|
|
mediaCommand(targetIdentifier, command, data) {
|
|
let windowGlobal = this.manager.browsingContext.currentWindowGlobal;
|
|
let browser = windowGlobal.rootFrameLoader.ownerElement;
|
|
let win = browser.ownerGlobal;
|
|
let windowUtils = win.windowUtils;
|
|
this.sendAsyncMessage("ContextMenu:MediaCommand", {
|
|
targetIdentifier,
|
|
command,
|
|
data,
|
|
handlingUserInput: windowUtils.isHandlingUserInput,
|
|
});
|
|
}
|
|
|
|
canvasToBlobURL(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:Canvas:ToBlobURL", { targetIdentifier });
|
|
}
|
|
|
|
saveVideoFrameAsImage(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:SaveVideoFrameAsImage", {
|
|
targetIdentifier,
|
|
});
|
|
}
|
|
|
|
setAsDesktopBackground(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:SetAsDesktopBackground", {
|
|
targetIdentifier,
|
|
});
|
|
}
|
|
|
|
getSearchFieldBookmarkData(targetIdentifier) {
|
|
return this.sendQuery("ContextMenu:SearchFieldBookmarkData", {
|
|
targetIdentifier,
|
|
});
|
|
}
|
|
}
|