DesktopActorRegistry.sys.mjs (22188B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 import { ActorManagerParent } from "resource://gre/modules/ActorManagerParent.sys.mjs"; 6 7 const lazy = {}; 8 9 ChromeUtils.defineESModuleGetters(lazy, { 10 BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs", 11 }); 12 13 /** 14 * Fission-compatible JSProcess implementations. 15 * Each actor options object takes the form of a ProcessActorOptions dictionary. 16 * Detailed documentation of these options is in dom/docs/ipc/jsactors.rst, 17 * available at https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html 18 */ 19 let JSPROCESSACTORS = { 20 // Miscellaneous stuff that needs to be initialized per process. 21 BrowserProcess: { 22 child: { 23 esModuleURI: "resource:///actors/BrowserProcessChild.sys.mjs", 24 observers: [ 25 // WebRTC related notifications. They are here to avoid loading WebRTC 26 // components when not needed. 27 "getUserMedia:request", 28 "recording-device-stopped", 29 "PeerConnection:request", 30 "recording-device-events", 31 "recording-window-ended", 32 ], 33 }, 34 }, 35 36 MozCachedOHTTP: { 37 parent: { 38 esModuleURI: 39 "moz-src:///browser/components/mozcachedohttp/actors/MozCachedOHTTPParent.sys.mjs", 40 }, 41 includeParent: true, 42 }, 43 44 RefreshBlockerObserver: { 45 child: { 46 esModuleURI: "resource:///actors/RefreshBlockerChild.sys.mjs", 47 observers: [ 48 "webnavigation-create", 49 "chrome-webnavigation-create", 50 "webnavigation-destroy", 51 "chrome-webnavigation-destroy", 52 ], 53 }, 54 55 enablePreference: "accessibility.blockautorefresh", 56 onPreferenceChanged: isEnabled => { 57 lazy.BrowserWindowTracker.orderedWindows.forEach(win => { 58 for (let browser of win.gBrowser.browsers) { 59 try { 60 browser.sendMessageToActor( 61 "PreferenceChanged", 62 { isEnabled }, 63 "RefreshBlocker", 64 "all" 65 ); 66 } catch (ex) {} 67 } 68 }); 69 }, 70 }, 71 }; 72 73 /** 74 * Fission-compatible JSWindowActor implementations. 75 * Detailed documentation of these options is in dom/docs/ipc/jsactors.rst, 76 * available at https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html 77 */ 78 let JSWINDOWACTORS = { 79 Megalist: { 80 parent: { 81 esModuleURI: "resource://gre/actors/MegalistParent.sys.mjs", 82 }, 83 child: { 84 esModuleURI: "resource://gre/actors/MegalistChild.sys.mjs", 85 events: { 86 DOMContentLoaded: {}, 87 }, 88 }, 89 includeChrome: true, 90 matches: ["chrome://global/content/megalist/megalist.html"], 91 allFrames: true, 92 enablePreference: "browser.contextual-password-manager.enabled", 93 }, 94 95 AboutLogins: { 96 parent: { 97 esModuleURI: "resource:///actors/AboutLoginsParent.sys.mjs", 98 }, 99 child: { 100 esModuleURI: "resource:///actors/AboutLoginsChild.sys.mjs", 101 events: { 102 AboutLoginsCopyLoginDetail: { wantUntrusted: true }, 103 AboutLoginsCreateLogin: { wantUntrusted: true }, 104 AboutLoginsDeleteLogin: { wantUntrusted: true }, 105 AboutLoginsDismissBreachAlert: { wantUntrusted: true }, 106 AboutLoginsImportFromBrowser: { wantUntrusted: true }, 107 AboutLoginsImportFromFile: { wantUntrusted: true }, 108 AboutLoginsImportReportInit: { wantUntrusted: true }, 109 AboutLoginsImportReportReady: { wantUntrusted: true }, 110 AboutLoginsInit: { wantUntrusted: true }, 111 AboutLoginsGetHelp: { wantUntrusted: true }, 112 AboutLoginsOpenPreferences: { wantUntrusted: true }, 113 AboutLoginsOpenSite: { wantUntrusted: true }, 114 AboutLoginsRecordTelemetryEvent: { wantUntrusted: true }, 115 AboutLoginsRemoveAllLogins: { wantUntrusted: true }, 116 AboutLoginsSortChanged: { wantUntrusted: true }, 117 AboutLoginsSyncEnable: { wantUntrusted: true }, 118 AboutLoginsUpdateLogin: { wantUntrusted: true }, 119 AboutLoginsExportPasswords: { wantUntrusted: true }, 120 }, 121 }, 122 matches: ["about:logins", "about:logins?*", "about:loginsimportreport"], 123 allFrames: true, 124 remoteTypes: ["privilegedabout"], 125 }, 126 127 AboutMessagePreview: { 128 parent: { 129 esModuleURI: "resource:///actors/AboutMessagePreviewParent.sys.mjs", 130 }, 131 child: { 132 esModuleURI: "resource:///actors/AboutMessagePreviewChild.sys.mjs", 133 events: { 134 DOMDocElementInserted: { capture: true }, 135 }, 136 }, 137 matches: ["about:messagepreview", "about:messagepreview?*"], 138 }, 139 140 AboutPrivateBrowsing: { 141 parent: { 142 esModuleURI: "resource:///actors/AboutPrivateBrowsingParent.sys.mjs", 143 }, 144 child: { 145 esModuleURI: "resource:///actors/AboutPrivateBrowsingChild.sys.mjs", 146 147 events: { 148 DOMDocElementInserted: { capture: true }, 149 }, 150 }, 151 152 matches: ["about:privatebrowsing*"], 153 }, 154 155 AboutProtections: { 156 parent: { 157 esModuleURI: "resource:///actors/AboutProtectionsParent.sys.mjs", 158 }, 159 child: { 160 esModuleURI: "resource:///actors/AboutProtectionsChild.sys.mjs", 161 162 events: { 163 DOMDocElementInserted: { capture: true }, 164 }, 165 }, 166 167 matches: ["about:protections", "about:protections?*"], 168 }, 169 170 AboutReader: { 171 parent: { 172 esModuleURI: "resource:///actors/AboutReaderParent.sys.mjs", 173 }, 174 child: { 175 esModuleURI: "resource:///actors/AboutReaderChild.sys.mjs", 176 events: { 177 DOMContentLoaded: {}, 178 pageshow: { mozSystemGroup: true }, 179 // Don't try to create the actor if only the pagehide event fires. 180 // This can happen with the initial about:blank documents. 181 pagehide: { mozSystemGroup: true, createActor: false }, 182 }, 183 }, 184 messageManagerGroups: ["browsers"], 185 }, 186 187 AboutTabCrashed: { 188 parent: { 189 esModuleURI: "resource:///actors/AboutTabCrashedParent.sys.mjs", 190 }, 191 child: { 192 esModuleURI: "resource:///actors/AboutTabCrashedChild.sys.mjs", 193 events: { 194 DOMDocElementInserted: { capture: true }, 195 }, 196 }, 197 198 matches: ["about:tabcrashed*"], 199 }, 200 201 AboutTor: { 202 parent: { 203 esModuleURI: "resource:///actors/AboutTorParent.sys.mjs", 204 }, 205 child: { 206 esModuleURI: "resource:///actors/AboutTorChild.sys.mjs", 207 208 events: { 209 DOMContentLoaded: {}, 210 L10nMutationsFinished: {}, 211 SubmitSearchOnionize: { wantUntrusted: true }, 212 SurveyDismissed: { wantUntrusted: true }, 213 UserDismissedYEC: { wantUntrusted: true }, 214 }, 215 }, 216 217 matches: ["about:tor"], 218 }, 219 220 AboutWelcome: { 221 parent: { 222 esModuleURI: "resource:///actors/AboutWelcomeParent.sys.mjs", 223 }, 224 child: { 225 esModuleURI: "resource:///actors/AboutWelcomeChild.sys.mjs", 226 events: { 227 // This is added so the actor instantiates immediately and makes 228 // methods available to the page js on load. 229 DOMDocElementInserted: {}, 230 }, 231 }, 232 matches: ["about:welcome"], 233 remoteTypes: ["privilegedabout"], 234 235 // See Bug 1618306 236 // Remove this preference check when we turn on separate about:welcome for all users. 237 enablePreference: "browser.aboutwelcome.enabled", 238 }, 239 240 AIChatContent: { 241 parent: { 242 esModuleURI: 243 "moz-src:///browser/components/aiwindow/ui/actors/AIChatContentParent.sys.mjs", 244 }, 245 child: { 246 esModuleURI: 247 "moz-src:///browser/components/aiwindow/ui/actors/AIChatContentChild.sys.mjs", 248 events: { 249 "AIChatContent:DispatchSearch": { wantUntrusted: true }, 250 }, 251 }, 252 allFrames: true, 253 matches: ["about:aichatcontent"], 254 enablePreference: "browser.aiwindow.enabled", 255 }, 256 257 BackupUI: { 258 parent: { 259 esModuleURI: "resource:///actors/BackupUIParent.sys.mjs", 260 }, 261 child: { 262 esModuleURI: "resource:///actors/BackupUIChild.sys.mjs", 263 events: { 264 "BackupUI:InitWidget": { wantUntrusted: true }, 265 "BackupUI:TriggerCreateBackup": { wantUntrusted: true }, 266 "BackupUI:EnableScheduledBackups": { wantUntrusted: true }, 267 "BackupUI:DisableScheduledBackups": { wantUntrusted: true }, 268 "BackupUI:ShowFilepicker": { wantUntrusted: true }, 269 "BackupUI:GetBackupFileInfo": { wantUntrusted: true }, 270 "BackupUI:RestoreFromBackupFile": { wantUntrusted: true }, 271 "BackupUI:RestoreFromBackupChooseFile": { wantUntrusted: true }, 272 "BackupUI:EnableEncryption": { wantUntrusted: true }, 273 "BackupUI:DisableEncryption": { wantUntrusted: true }, 274 "BackupUI:ShowBackupLocation": { wantUntrusted: true }, 275 "BackupUI:EditBackupLocation": { wantUntrusted: true }, 276 "BackupUI:SetEmbeddedComponentPersistentData": { wantUntrusted: true }, 277 "BackupUI:FlushEmbeddedComponentPersistentData": { 278 wantUntrusted: true, 279 }, 280 "BackupUI:ErrorBarDismissed": { wantUntrusted: true }, 281 }, 282 }, 283 includeChrome: true, 284 allFrames: true, 285 matches: [ 286 "about:preferences*", 287 "about:settings*", 288 "about:welcome*", 289 "chrome://browser/content/spotlight.html", 290 ], 291 }, 292 293 BlockedSite: { 294 parent: { 295 esModuleURI: "resource:///actors/BlockedSiteParent.sys.mjs", 296 }, 297 child: { 298 esModuleURI: "resource:///actors/BlockedSiteChild.sys.mjs", 299 events: { 300 AboutBlockedLoaded: { wantUntrusted: true }, 301 click: {}, 302 }, 303 }, 304 matches: ["about:blocked?*"], 305 allFrames: true, 306 }, 307 308 BrowserTab: { 309 child: { 310 esModuleURI: "resource:///actors/BrowserTabChild.sys.mjs", 311 }, 312 313 messageManagerGroups: ["browsers"], 314 }, 315 316 CanonicalURL: { 317 parent: { 318 esModuleURI: "resource:///actors/CanonicalURLParent.sys.mjs", 319 }, 320 child: { 321 esModuleURI: "resource:///actors/CanonicalURLChild.sys.mjs", 322 events: { 323 DOMContentLoaded: {}, 324 pageshow: {}, 325 }, 326 }, 327 enablePreference: "browser.tabs.notes.enabled", 328 matches: ["http://*/*", "https://*/*"], 329 messageManagerGroups: ["browsers"], 330 }, 331 332 ClickHandler: { 333 parent: { 334 esModuleURI: "resource:///actors/ClickHandlerParent.sys.mjs", 335 }, 336 child: { 337 esModuleURI: "resource:///actors/ClickHandlerChild.sys.mjs", 338 events: { 339 chromelinkclick: { capture: true, mozSystemGroup: true }, 340 }, 341 }, 342 343 allFrames: true, 344 }, 345 346 CryptoSafety: { 347 parent: { 348 esModuleURI: "resource:///actors/CryptoSafetyParent.sys.mjs", 349 }, 350 351 child: { 352 esModuleURI: "resource:///actors/CryptoSafetyChild.sys.mjs", 353 group: "browsers", 354 events: { 355 copy: { mozSystemGroup: true }, 356 cut: { mozSystemGroup: true }, 357 }, 358 }, 359 360 allFrames: true, 361 }, 362 363 /* Note: this uses the same JSMs as ClickHandler, but because it 364 * relies on "normal" click events anywhere on the page (not just 365 * links) and is expensive, and only does something for the 366 * small group of people who have the feature enabled, it is its 367 * own actor which is only registered if the pref is enabled. 368 */ 369 MiddleMousePasteHandler: { 370 parent: { 371 esModuleURI: "resource:///actors/ClickHandlerParent.sys.mjs", 372 }, 373 child: { 374 esModuleURI: "resource:///actors/ClickHandlerChild.sys.mjs", 375 events: { 376 auxclick: { capture: true, mozSystemGroup: true }, 377 }, 378 }, 379 enablePreference: "middlemouse.contentLoadURL", 380 381 allFrames: true, 382 }, 383 384 ContentSearch: { 385 parent: { 386 esModuleURI: "resource:///actors/ContentSearchParent.sys.mjs", 387 }, 388 child: { 389 esModuleURI: "resource:///actors/ContentSearchChild.sys.mjs", 390 events: { 391 ContentSearchClient: { capture: true, wantUntrusted: true }, 392 }, 393 }, 394 matches: [ 395 "about:home", 396 "about:welcome", 397 "about:newtab", 398 "about:privatebrowsing", 399 "about:test-about-content-search-ui", 400 ], 401 remoteTypes: ["privilegedabout"], 402 }, 403 404 ContextMenu: { 405 parent: { 406 esModuleURI: "resource:///actors/ContextMenuParent.sys.mjs", 407 }, 408 409 child: { 410 esModuleURI: "resource:///actors/ContextMenuChild.sys.mjs", 411 events: { 412 contextmenu: { mozSystemGroup: true }, 413 }, 414 }, 415 416 allFrames: true, 417 }, 418 419 CustomKeys: { 420 parent: { 421 esModuleURI: "resource:///actors/CustomKeysParent.sys.mjs", 422 }, 423 child: { 424 esModuleURI: "resource:///actors/CustomKeysChild.sys.mjs", 425 events: { 426 DOMDocElementInserted: { wantUntrusted: true }, 427 }, 428 }, 429 matches: ["about:keyboard"], 430 remoteTypes: ["privilegedabout"], 431 }, 432 433 DecoderDoctor: { 434 parent: { 435 esModuleURI: "resource:///actors/DecoderDoctorParent.sys.mjs", 436 }, 437 438 child: { 439 esModuleURI: "resource:///actors/DecoderDoctorChild.sys.mjs", 440 observers: ["decoder-doctor-notification"], 441 }, 442 443 messageManagerGroups: ["browsers"], 444 allFrames: true, 445 }, 446 447 DOMFullscreen: { 448 parent: { 449 esModuleURI: "resource:///actors/DOMFullscreenParent.sys.mjs", 450 }, 451 452 child: { 453 esModuleURI: "resource:///actors/DOMFullscreenChild.sys.mjs", 454 events: { 455 "MozDOMFullscreen:Request": {}, 456 "MozDOMFullscreen:Entered": {}, 457 "MozDOMFullscreen:NewOrigin": {}, 458 "MozDOMFullscreen:Exit": {}, 459 "MozDOMFullscreen:Exited": {}, 460 }, 461 }, 462 463 messageManagerGroups: ["browsers"], 464 allFrames: true, 465 }, 466 467 EncryptedMedia: { 468 parent: { 469 esModuleURI: "resource:///actors/EncryptedMediaParent.sys.mjs", 470 }, 471 472 child: { 473 esModuleURI: "resource:///actors/EncryptedMediaChild.sys.mjs", 474 observers: ["mediakeys-request"], 475 }, 476 477 messageManagerGroups: ["browsers"], 478 allFrames: true, 479 }, 480 481 FormValidation: { 482 parent: { 483 esModuleURI: "resource:///actors/FormValidationParent.sys.mjs", 484 }, 485 486 child: { 487 esModuleURI: "resource:///actors/FormValidationChild.sys.mjs", 488 events: { 489 MozInvalidForm: {}, 490 // Listening to ‘pageshow’ event is only relevant if an invalid form 491 // popup was open, so don't create the actor when fired. 492 pageshow: { createActor: false }, 493 }, 494 }, 495 496 allFrames: true, 497 }, 498 499 // GenAIParent.sys.mjs and GenAIChild.sys.mjs are missing. tor-browser#44045. 500 501 LightweightTheme: { 502 child: { 503 esModuleURI: "resource:///actors/LightweightThemeChild.sys.mjs", 504 events: { 505 pageshow: { mozSystemGroup: true }, 506 DOMContentLoaded: {}, 507 }, 508 }, 509 includeChrome: true, 510 allFrames: true, 511 matches: [ 512 "about:asrouter", 513 "about:home", 514 "about:newtab", 515 "about:welcome", 516 "chrome://browser/content/syncedtabs/sidebar.xhtml", 517 "chrome://browser/content/places/historySidebar.xhtml", 518 "chrome://browser/content/places/bookmarksSidebar.xhtml", 519 "chrome://browser/content/sidebar/sidebar-history.html", 520 "chrome://browser/content/sidebar/sidebar-customize.html", 521 "chrome://browser/content/sidebar/sidebar-syncedtabs.html", 522 "chrome://browser/content/genai/chat.html", 523 "about:firefoxview", 524 "about:editprofile", 525 "about:deleteprofile", 526 "about:newprofile", 527 "about:opentabs", 528 ], 529 }, 530 531 LinkHandler: { 532 parent: { 533 esModuleURI: "resource:///actors/LinkHandlerParent.sys.mjs", 534 }, 535 child: { 536 esModuleURI: "resource:///actors/LinkHandlerChild.sys.mjs", 537 events: { 538 DOMHeadElementParsed: {}, 539 DOMLinkAdded: {}, 540 DOMLinkChanged: {}, 541 pageshow: {}, 542 // The `pagehide` event is only used to clean up state which will not be 543 // present if the actor hasn't been created. 544 pagehide: { createActor: false }, 545 }, 546 }, 547 548 messageManagerGroups: ["browsers"], 549 }, 550 551 // LinkPreviewParent.sys.mjs and LinkPreviewChild.sys.mjs are missing. 552 // tor-browser#44045. 553 554 OnionLocation: { 555 parent: { 556 esModuleURI: "resource:///modules/OnionLocationParent.sys.mjs", 557 }, 558 child: { 559 esModuleURI: "resource:///modules/OnionLocationChild.sys.mjs", 560 events: { 561 pageshow: { mozSystemGroup: true }, 562 }, 563 }, 564 messageManagerGroups: ["browsers"], 565 }, 566 567 PageAssist: { 568 parent: { 569 esModuleURI: "resource:///actors/PageAssistParent.sys.mjs", 570 }, 571 child: { 572 esModuleURI: "resource:///actors/PageAssistChild.sys.mjs", 573 }, 574 includeChrome: true, 575 enablePreference: "browser.ml.pageAssist.enabled", 576 }, 577 578 PageInfo: { 579 child: { 580 esModuleURI: "resource:///actors/PageInfoChild.sys.mjs", 581 }, 582 583 allFrames: true, 584 }, 585 586 PageInfoPreview: { 587 child: { 588 esModuleURI: "resource:///actors/PageInfoPreviewChild.sys.mjs", 589 }, 590 }, 591 592 PageStyle: { 593 parent: { 594 esModuleURI: "resource:///actors/PageStyleParent.sys.mjs", 595 }, 596 child: { 597 esModuleURI: "resource:///actors/PageStyleChild.sys.mjs", 598 events: { 599 pageshow: { createActor: false }, 600 }, 601 }, 602 603 messageManagerGroups: ["browsers"], 604 allFrames: true, 605 }, 606 607 Pdfjs: { 608 parent: { 609 esModuleURI: "resource://pdf.js/PdfjsParent.sys.mjs", 610 }, 611 child: { 612 esModuleURI: "resource://pdf.js/PdfjsChild.sys.mjs", 613 }, 614 allFrames: true, 615 }, 616 617 // GMP crash reporting 618 Plugin: { 619 parent: { 620 esModuleURI: "resource:///actors/PluginParent.sys.mjs", 621 }, 622 child: { 623 esModuleURI: "resource:///actors/PluginChild.sys.mjs", 624 events: { 625 PluginCrashed: { capture: true }, 626 }, 627 }, 628 629 allFrames: true, 630 }, 631 632 PointerLock: { 633 parent: { 634 esModuleURI: "resource:///actors/PointerLockParent.sys.mjs", 635 }, 636 child: { 637 esModuleURI: "resource:///actors/PointerLockChild.sys.mjs", 638 events: { 639 "MozDOMPointerLock:Entered": {}, 640 "MozDOMPointerLock:Exited": {}, 641 }, 642 }, 643 644 messageManagerGroups: ["browsers"], 645 allFrames: true, 646 }, 647 648 Profiles: { 649 parent: { 650 esModuleURI: "resource:///actors/ProfilesParent.sys.mjs", 651 }, 652 child: { 653 esModuleURI: "resource:///actors/ProfilesChild.sys.mjs", 654 events: { 655 DOMDocElementInserted: { wantUntrusted: true }, 656 }, 657 }, 658 matches: ["about:editprofile", "about:deleteprofile", "about:newprofile"], 659 remoteTypes: ["privilegedabout"], 660 }, 661 662 Prompt: { 663 parent: { 664 esModuleURI: "resource:///actors/PromptParent.sys.mjs", 665 }, 666 includeChrome: true, 667 allFrames: true, 668 }, 669 670 RefreshBlocker: { 671 parent: { 672 esModuleURI: "resource:///actors/RefreshBlockerParent.sys.mjs", 673 }, 674 child: { 675 esModuleURI: "resource:///actors/RefreshBlockerChild.sys.mjs", 676 }, 677 678 messageManagerGroups: ["browsers"], 679 enablePreference: "accessibility.blockautorefresh", 680 }, 681 682 Rulesets: { 683 parent: { 684 esModuleURI: "resource:///modules/RulesetsParent.sys.mjs", 685 }, 686 child: { 687 esModuleURI: "resource:///modules/RulesetsChild.sys.mjs", 688 events: { 689 DOMWindowCreated: {}, 690 }, 691 }, 692 matches: ["about:rulesets*"], 693 }, 694 695 ScreenshotsComponent: { 696 parent: { 697 esModuleURI: "resource:///modules/ScreenshotsUtils.sys.mjs", 698 }, 699 child: { 700 esModuleURI: "resource:///actors/ScreenshotsComponentChild.sys.mjs", 701 events: { 702 "Screenshots:Close": {}, 703 "Screenshots:Copy": {}, 704 "Screenshots:Download": {}, 705 "Screenshots:HidePanel": {}, 706 "Screenshots:OverlaySelection": {}, 707 "Screenshots:RecordEvent": {}, 708 "Screenshots:ShowPanel": {}, 709 "Screenshots:FocusPanel": {}, 710 }, 711 }, 712 enablePreference: "screenshots.browser.component.enabled", 713 }, 714 715 ScreenshotsHelper: { 716 parent: { 717 esModuleURI: "resource:///modules/ScreenshotsUtils.sys.mjs", 718 }, 719 child: { 720 esModuleURI: "resource:///modules/ScreenshotsHelperChild.sys.mjs", 721 }, 722 allFrames: true, 723 enablePreference: "screenshots.browser.component.enabled", 724 }, 725 726 SearchSERPTelemetry: { 727 parent: { 728 esModuleURI: "resource:///actors/SearchSERPTelemetryParent.sys.mjs", 729 }, 730 child: { 731 esModuleURI: "resource:///actors/SearchSERPTelemetryChild.sys.mjs", 732 events: { 733 DOMContentLoaded: {}, 734 pageshow: { mozSystemGroup: true }, 735 // The 'pagehide' event is only used to clean up state, and should not 736 // force actor creation. 737 pagehide: { createActor: false }, 738 load: { mozSystemGroup: true, capture: true }, 739 }, 740 }, 741 matches: ["https://*/*"], 742 }, 743 744 ShieldFrame: { 745 parent: { 746 esModuleURI: "resource://normandy-content/ShieldFrameParent.sys.mjs", 747 }, 748 child: { 749 esModuleURI: "resource://normandy-content/ShieldFrameChild.sys.mjs", 750 events: { 751 pageshow: {}, 752 pagehide: {}, 753 ShieldPageEvent: { wantUntrusted: true }, 754 }, 755 }, 756 matches: ["about:studies*"], 757 }, 758 759 SpeechDispatcher: { 760 parent: { 761 esModuleURI: "resource:///actors/SpeechDispatcherParent.sys.mjs", 762 }, 763 764 child: { 765 esModuleURI: "resource:///actors/SpeechDispatcherChild.sys.mjs", 766 observers: ["chrome-synth-voices-error"], 767 }, 768 769 messageManagerGroups: ["browsers"], 770 allFrames: true, 771 }, 772 773 SwitchDocumentDirection: { 774 child: { 775 esModuleURI: "resource:///actors/SwitchDocumentDirectionChild.sys.mjs", 776 }, 777 778 allFrames: true, 779 }, 780 781 TLSCertificateBinding: { 782 child: { 783 esModuleURI: "resource:///actors/TLSCertificateBindingChild.sys.mjs", 784 }, 785 786 messageManagerGroups: ["browsers"], 787 }, 788 789 UITour: { 790 parent: { 791 esModuleURI: "moz-src:///browser/components/uitour/UITourParent.sys.mjs", 792 }, 793 child: { 794 esModuleURI: "moz-src:///browser/components/uitour/UITourChild.sys.mjs", 795 events: { 796 mozUITour: { wantUntrusted: true }, 797 }, 798 }, 799 800 enablePreference: "browser.uitour.enabled", 801 messageManagerGroups: ["browsers"], 802 }, 803 804 WebRTC: { 805 parent: { 806 esModuleURI: "resource:///actors/WebRTCParent.sys.mjs", 807 }, 808 child: { 809 esModuleURI: "resource:///actors/WebRTCChild.sys.mjs", 810 }, 811 812 allFrames: true, 813 }, 814 }; 815 816 export let DesktopActorRegistry = { 817 init() { 818 ActorManagerParent.addJSProcessActors(JSPROCESSACTORS); 819 ActorManagerParent.addJSWindowActors(JSWINDOWACTORS); 820 }, 821 };