summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/ActorManagerParent.jsm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /toolkit/modules/ActorManagerParent.jsm
parentInitial commit. (diff)
downloadfirefox-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.jsm531
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);