diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /toolkit/modules/ActorManagerParent.jsm | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/modules/ActorManagerParent.jsm')
-rw-r--r-- | toolkit/modules/ActorManagerParent.jsm | 531 |
1 files changed, 531 insertions, 0 deletions
diff --git a/toolkit/modules/ActorManagerParent.jsm b/toolkit/modules/ActorManagerParent.jsm new file mode 100644 index 0000000000..804498dc3c --- /dev/null +++ b/toolkit/modules/ActorManagerParent.jsm @@ -0,0 +1,531 @@ +/* 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"; + +/** + * This module handles JavaScript-implemented JSWindowActors, registered through DOM IPC + * infrastructure, and are fission-compatible. + */ + +var EXPORTED_SYMBOLS = ["ActorManagerParent"]; + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +/** + * Fission-compatible JSProcess implementations. + * Each actor options object takes the form of a ProcessActorOptions dictionary. + * Detailed documentation of these options is in dom/docs/ipc/jsactors.rst, + * available at https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html + */ +let JSPROCESSACTORS = { + AsyncPrefs: { + parent: { + moduleURI: "resource://gre/modules/AsyncPrefs.jsm", + }, + child: { + moduleURI: "resource://gre/modules/AsyncPrefs.jsm", + }, + }, + + ContentPrefs: { + parent: { + moduleURI: "resource://gre/modules/ContentPrefServiceParent.jsm", + }, + child: { + moduleURI: "resource://gre/modules/ContentPrefServiceChild.jsm", + }, + }, + ExtensionContent: { + child: { + moduleURI: "resource://gre/modules/ExtensionContent.jsm", + }, + includeParent: true, + }, +}; + +/** + * Fission-compatible JSWindowActor implementations. + * Each actor options object takes the form of a WindowActorOptions dictionary. + * Detailed documentation of these options is in dom/docs/ipc/jsactors.rst, + * available at https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html + */ +let JSWINDOWACTORS = { + AboutCertViewer: { + parent: { + moduleURI: "resource://gre/modules/AboutCertViewerParent.jsm", + }, + child: { + moduleURI: "resource://gre/modules/AboutCertViewerChild.jsm", + + events: { + DOMWindowCreated: { capture: true }, + }, + }, + + matches: ["about:certificate"], + }, + + AboutHttpsOnlyError: { + parent: { + moduleURI: "resource://gre/actors/AboutHttpsOnlyErrorParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/AboutHttpsOnlyErrorChild.jsm", + events: { + DOMWindowCreated: {}, + }, + }, + matches: ["about:httpsonlyerror?*"], + allFrames: true, + }, + + AudioPlayback: { + parent: { + moduleURI: "resource://gre/actors/AudioPlaybackParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/AudioPlaybackChild.jsm", + observers: ["audio-playback"], + }, + + allFrames: true, + }, + + AutoComplete: { + parent: { + moduleURI: "resource://gre/actors/AutoCompleteParent.jsm", + // These two messages are also used, but are currently synchronous calls + // through the per-process message manager. + // "FormAutoComplete:GetSelectedIndex", + // "FormAutoComplete:SelectBy" + }, + + child: { + moduleURI: "resource://gre/actors/AutoCompleteChild.jsm", + }, + + allFrames: true, + }, + + Autoplay: { + parent: { + moduleURI: "resource://gre/actors/AutoplayParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/AutoplayChild.jsm", + events: { + GloballyAutoplayBlocked: {}, + }, + }, + + allFrames: true, + }, + + AutoScroll: { + parent: { + moduleURI: "resource://gre/actors/AutoScrollParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/AutoScrollChild.jsm", + events: { + mousedown: { capture: true, mozSystemGroup: true }, + }, + }, + + allFrames: true, + }, + + BackgroundThumbnails: { + child: { + moduleURI: "resource://gre/actors/BackgroundThumbnailsChild.jsm", + events: { + DOMDocElementInserted: { capture: true }, + }, + }, + messageManagerGroups: ["thumbnails"], + }, + + BrowserElement: { + parent: { + moduleURI: "resource://gre/actors/BrowserElementParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/BrowserElementChild.jsm", + events: { + DOMWindowClose: {}, + }, + }, + + allFrames: true, + }, + + Conduits: { + parent: { + moduleURI: "resource://gre/modules/ConduitsParent.jsm", + }, + + child: { + moduleURI: "resource://gre/modules/ConduitsChild.jsm", + }, + + allFrames: true, + }, + + Controllers: { + parent: { + moduleURI: "resource://gre/actors/ControllersParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/ControllersChild.jsm", + }, + + allFrames: true, + }, + + DateTimePicker: { + parent: { + moduleURI: "resource://gre/actors/DateTimePickerParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/DateTimePickerChild.jsm", + events: { + MozOpenDateTimePicker: {}, + MozUpdateDateTimePicker: {}, + MozCloseDateTimePicker: {}, + }, + }, + + allFrames: true, + }, + + ExtFind: { + child: { + moduleURI: "resource://gre/actors/ExtFindChild.jsm", + }, + + allFrames: true, + }, + + FindBar: { + parent: { + moduleURI: "resource://gre/actors/FindBarParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/FindBarChild.jsm", + events: { + keypress: { mozSystemGroup: true }, + }, + }, + + allFrames: true, + messageManagerGroups: ["browsers", "test"], + }, + + // This is the actor that responds to requests from the find toolbar and + // searches for matches and highlights them. + Finder: { + child: { + moduleURI: "resource://gre/actors/FinderChild.jsm", + }, + + allFrames: true, + }, + + FormHistory: { + parent: { + moduleURI: "resource://gre/actors/FormHistoryParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/FormHistoryChild.jsm", + events: { + DOMFormBeforeSubmit: {}, + }, + }, + + allFrames: true, + }, + + InlineSpellChecker: { + parent: { + moduleURI: "resource://gre/actors/InlineSpellCheckerParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/InlineSpellCheckerChild.jsm", + }, + + allFrames: true, + }, + + KeyPressEventModelChecker: { + child: { + moduleURI: "resource://gre/actors/KeyPressEventModelCheckerChild.jsm", + events: { + CheckKeyPressEventModel: { capture: true, mozSystemGroup: true }, + }, + }, + + allFrames: true, + }, + + LoginManager: { + parent: { + moduleURI: "resource://gre/modules/LoginManagerParent.jsm", + }, + child: { + moduleURI: "resource://gre/modules/LoginManagerChild.jsm", + events: { + DOMFormBeforeSubmit: {}, + DOMFormHasPassword: {}, + DOMInputPasswordAdded: {}, + }, + }, + + allFrames: true, + messageManagerGroups: ["browsers", "webext-browsers", ""], + }, + + ManifestMessages: { + child: { + moduleURI: "resource://gre/modules/ManifestMessagesChild.jsm", + }, + }, + + PictureInPictureLauncher: { + parent: { + moduleURI: "resource://gre/modules/PictureInPicture.jsm", + }, + child: { + moduleURI: "resource://gre/actors/PictureInPictureChild.jsm", + events: { + MozTogglePictureInPicture: { capture: true }, + }, + }, + + allFrames: true, + }, + + PictureInPicture: { + parent: { + moduleURI: "resource://gre/modules/PictureInPicture.jsm", + }, + child: { + moduleURI: "resource://gre/actors/PictureInPictureChild.jsm", + }, + + allFrames: true, + }, + + PictureInPictureToggle: { + parent: { + moduleURI: "resource://gre/modules/PictureInPicture.jsm", + }, + child: { + moduleURI: "resource://gre/actors/PictureInPictureChild.jsm", + events: { + UAWidgetSetupOrChange: {}, + contextmenu: { capture: true }, + }, + }, + + allFrames: true, + }, + + PopupBlocking: { + parent: { + moduleURI: "resource://gre/actors/PopupBlockingParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/PopupBlockingChild.jsm", + events: { + DOMPopupBlocked: { capture: true }, + }, + }, + allFrames: true, + }, + + Printing: { + parent: { + moduleURI: "resource://gre/actors/PrintingParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/PrintingChild.jsm", + events: { + PrintingError: { capture: true }, + printPreviewUpdate: { capture: true }, + }, + }, + }, + + PrintingSelection: { + child: { + moduleURI: "resource://gre/actors/PrintingSelectionChild.jsm", + }, + allFrames: true, + }, + + PurgeSessionHistory: { + child: { + moduleURI: "resource://gre/actors/PurgeSessionHistoryChild.jsm", + }, + allFrames: true, + }, + + Select: { + parent: { + moduleURI: "resource://gre/actors/SelectParent.jsm", + }, + + child: { + moduleURI: "resource://gre/actors/SelectChild.jsm", + events: { + mozshowdropdown: {}, + "mozshowdropdown-sourcetouch": {}, + mozhidedropdown: { mozSystemGroup: true }, + }, + }, + + allFrames: true, + }, + + // This actor is available for all pages that one can + // view the source of, however it won't be created until a + // request to view the source is made via the message + // 'ViewSource:LoadSource' or 'ViewSource:LoadSourceWithSelection'. + ViewSource: { + child: { + moduleURI: "resource://gre/actors/ViewSourceChild.jsm", + }, + + allFrames: true, + }, + + // This actor is for the view-source page itself. + ViewSourcePage: { + parent: { + moduleURI: "resource://gre/actors/ViewSourcePageParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/ViewSourcePageChild.jsm", + events: { + pageshow: { capture: true }, + click: {}, + }, + }, + + matches: ["view-source:*"], + allFrames: true, + }, + + WebChannel: { + parent: { + moduleURI: "resource://gre/actors/WebChannelParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/WebChannelChild.jsm", + events: { + WebChannelMessageToChrome: { capture: true, wantUntrusted: true }, + }, + }, + + allFrames: true, + }, + + Thumbnails: { + child: { + moduleURI: "resource://gre/actors/ThumbnailsChild.jsm", + }, + }, + + UAWidgets: { + child: { + moduleURI: "resource://gre/actors/UAWidgetsChild.jsm", + events: { + UAWidgetSetupOrChange: {}, + UAWidgetTeardown: {}, + }, + }, + + allFrames: true, + }, + + UnselectedTabHover: { + parent: { + moduleURI: "resource://gre/actors/UnselectedTabHoverParent.jsm", + }, + child: { + moduleURI: "resource://gre/actors/UnselectedTabHoverChild.jsm", + events: { + "UnselectedTabHover:Enable": {}, + "UnselectedTabHover:Disable": {}, + }, + }, + + allFrames: true, + }, +}; + +var ActorManagerParent = { + _addActors(actors, kind) { + let register, unregister; + switch (kind) { + case "JSProcessActor": + register = ChromeUtils.registerProcessActor; + unregister = ChromeUtils.unregisterProcessActor; + break; + case "JSWindowActor": + register = ChromeUtils.registerWindowActor; + unregister = ChromeUtils.unregisterWindowActor; + break; + default: + throw new Error("Invalid JSActor kind " + kind); + } + for (let [actorName, actor] of Object.entries(actors)) { + // If enablePreference is set, only register the actor while the + // preference is set to true. + if (actor.enablePreference) { + let actorNameProp = actorName + "_Preference"; + XPCOMUtils.defineLazyPreferenceGetter( + this, + actorNameProp, + actor.enablePreference, + false, + (prefName, prevValue, isEnabled) => { + if (isEnabled) { + register(actorName, actor); + } else { + unregister(actorName, actor); + } + if (actor.onPreferenceChanged) { + actor.onPreferenceChanged(prefName, prevValue, isEnabled); + } + } + ); + if (!this[actorNameProp]) { + continue; + } + } + + register(actorName, actor); + } + }, + + addJSProcessActors(actors) { + this._addActors(actors, "JSProcessActor"); + }, + addJSWindowActors(actors) { + this._addActors(actors, "JSWindowActor"); + }, +}; + +ActorManagerParent.addJSProcessActors(JSPROCESSACTORS); +ActorManagerParent.addJSWindowActors(JSWINDOWACTORS); |