/* 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 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" , 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, }); } }