Name Description Size
AboutNewTab.sys.mjs init - Initializes an instance of Activity Stream if one doesn't exist already. 6966
AsyncTabSwitcher.sys.mjs The tab switcher is responsible for asynchronously switching tabs in e10s. It waits until the new tab is ready (i.e., the layer tree is available) before switching to it. Then it unloads the layer tree for the old tab. The tab switcher is a state machine. For each tab, it maintains state about whether the layer tree for the tab is available, being loaded, being unloaded, or unavailable. It also keeps track of the tab currently being displayed, the tab it's trying to load, and the tab the user has asked to switch to. The switcher object is created upon tab switch. It is released when there are no pending tabs to load or unload. The following general principles have guided the design: 1. We only request one layer tree at a time. If the user switches to a different tab while waiting, we don't request the new layer tree until the old tab has loaded or timed out. 2. If loading the layers for a tab times out, we show the spinner and possibly request the layer tree for another tab if the user has requested one. 3. We discard layer trees on a delay. This way, if the user is switching among the same tabs frequently, we don't continually load the same tabs. It's important that we always show either the spinner or a tab whose layers are available. Otherwise the compositor will draw an entirely black frame, which is very jarring. To ensure this never happens when switching away from a tab, we assume the old tab might still be drawn until a MozAfterPaint event occurs. Because layout and compositing happen asynchronously, we don't have any other way of knowing when the switch actually takes place. Therefore, we don't unload the old tab until the next MozAfterPaint event. 47096
BackgroundTask_install.sys.mjs This task ought to have an ephemeral profile and should not apply updates. These settings are controlled externally, by `BackgroundTasks::IsUpdatingTaskName` and `BackgroundTasks::IsEphemeralProfileTaskName`. 1016
BackgroundTask_uninstall.sys.mjs This task ought to have an ephemeral profile and should not apply updates. These settings are controlled externally, by `BackgroundTasks::IsUpdatingTaskName` and `BackgroundTasks::IsEphemeralProfileTaskName`. 1728
BrowserUIUtils.sys.mjs -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- 6975
BrowserUsageTelemetry.sys.mjs -*- js-indent-level: 2; indent-tabs-mode: nil -*- 44723
BrowserWindowTracker.sys.mjs This module tracks each browser window and informs network module the current selected tab's content outer window ID. 13221
ContentCrashHandlers.sys.mjs BrowserWeakMap is exactly like a WeakMap, but expects <xul:browser> objects only. Under the hood, BrowserWeakMap keys the map off of the <xul:browser> permanentKey. If, however, the browser has never gotten a permanentKey, it falls back to keying on the <xul:browser> element itself. 35759
Discovery.sys.mjs 4101
EveryWindow.sys.mjs This module enables consumers to register callbacks on every current and future browser window. Usage: EveryWindow.registerCallback(id, init, uninit); EveryWindow.unregisterCallback(id); id is expected to be a unique value that identifies the consumer, to be used for unregistration. If the id is already in use, registerCallback returns false without doing anything. Each callback will receive the window for which it is presently being called as the first argument. init is called on every existing window at the time of registration, and on all future windows at browser-delayed-startup-finished. uninit is called on every existing window if requested at the time of unregistration, and at the time of domwindowclosed. If the window is closing, a second argument is passed with value `true`. 3301
ExtensionsUI.sys.mjs 23002
FaviconLoader.sys.mjs 19593
FeatureCallout.sys.mjs Feature Callout fetches messages relevant to a given source and displays them in the parent page pointing to the element they describe. 75026
HomePage.sys.mjs HomePage provides tools to keep track of the current homepage, and the applications's default homepage. It includes tools to insure that certain urls are ignored. As a result, all set/get requests for the homepage preferences should be routed through here. 11243
LaterRun.sys.mjs 5522
metrics.yaml 5482 5008
NewTabPagePreloading.sys.mjs This module is in charge of preloading 'new tab' pages for use when the user opens a new tab. 6262
OpenInTabsUtils.sys.mjs Utility functions that can be used when opening multiple tabs, that can be called without any tabbrowser instance. 2331
PageActions.sys.mjs Initializes PageActions. @param {boolean} addShutdownBlocker This param exists only for tests. Normally the default value of true must be used. 41729
PartnerLinkAttribution.sys.mjs Sends an attribution request to an anonymizing proxy. @param {string} targetURL The URL we are routing through the anonmyzing proxy. @param {string} source The source of the anonmized request, e.g. "urlbar". @param {string} [campaignID] The campaign ID for attribution. This should be a valid path on the anonymizing proxy. For example, if `campaignID` was `foo`, we'd send an attribution request to Optional. If it's not provided, we default to the topsites campaign. 7235
PermissionUI.sys.mjs PermissionUI is responsible for exposing both a prototype PermissionPrompt that can be used by arbitrary browser components and add-ons, but also hosts the implementations of built-in permission prompts. If you're developing a feature that requires web content to ask for special permissions from the user, this module is for you. Suppose a system add-on wants to add a new prompt for a new request for getting more low-level access to the user's sound card, and the permission request is coming up from content by way of the nsContentPermissionHelper. The system add-on could then do the following: const { Integration } = ChromeUtils.importESModule( "resource://gre/modules/Integration.sys.mjs" ); const { PermissionUI } = ChromeUtils.import( "resource:///modules/PermissionUI.jsm" ); const SoundCardIntegration = base => { let soundCardObj = { createPermissionPrompt(type, request) { if (type != "sound-api") { return super.createPermissionPrompt(...arguments); } let permissionPrompt = { get permissionKey() { return "sound-permission"; } // etc - see the documentation for PermissionPrompt for // a better idea of what things one can and should override. }; Object.setPrototypeOf( permissionPrompt, PermissionUI.PermissionPromptForRequest ); return permissionPrompt; }, }; Object.setPrototypeOf(soundCardObj, base); return soundCardObj; }; // Add-on startup: Integration.contentPermission.register(SoundCardIntegration); // ... // Add-on shutdown: Integration.contentPermission.unregister(SoundCardIntegration); Note that PermissionPromptForRequest must be used as the prototype, since the prompt is wrapping an nsIContentPermissionRequest, and going through nsIContentPermissionPrompt. It is, however, possible to take advantage of PermissionPrompt without having to go through nsIContentPermissionPrompt or with a nsIContentPermissionRequest. The PermissionPrompt can be imported, subclassed, and have prompt() called directly, without the caller having called into createPermissionPrompt. 41747
PingCentre.sys.mjs Observe various notifications and send them to a telemetry endpoint. @param {Object} options @param {string} options.topic - a unique ID for users of PingCentre to distinguish their data on the server side. 5537
ProcessHangMonitor.sys.mjs -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- 20496
Sanitizer.sys.mjs Whether we should sanitize on shutdown. 40408
SelectionChangedMenulist.sys.mjs 904
SiteDataManager.sys.mjs Retrieve the latest site data and store it in SiteDataManager. Updating site data is a *very* expensive operation. This method exists so that consumers can manually decide when to update, most methods on SiteDataManager will not trigger updates automatically. It is *highly discouraged* to await on this function to finish before showing UI. Either trigger the update some time before the data is needed or use the entryUpdatedCallback parameter to update the UI async. @param {entryUpdatedCallback} a function to be called whenever a site is added or updated. This can be used to e.g. fill a UI that lists sites without blocking on the entire update to finish. @returns a Promise that resolves when updating is done. 21720
SitePermissions.sys.mjs A helper module to manage temporary permissions. Permissions are keyed by browser, so methods take a Browser element to identify the corresponding permission set. This uses a WeakMap to key browsers, so that entries are automatically cleared once the browser stops existing (once there are no other references to the browser object); 41798
TabsList.sys.mjs Populate the popup with menuitems and setup the listeners. 15075
TabUnloader.sys.mjs -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- 16447
TransientPrefs.sys.mjs Use for preferences that should only be visible when they've been modified. When reset to their default state, they remain visible until restarting the application. 634
URILoadingHelper.sys.mjs 25187
webrtcUI.sys.mjs 41347
WindowsJumpLists.sys.mjs -*- indent-tabs-mode: nil; js-indent-level: 2 -*- 18238
WindowsPreviewPerTab.sys.mjs This module implements the front end behavior for AeroPeek. Starting in Windows Vista, the taskbar began showing live thumbnail previews of windows when the user hovered over the window icon in the taskbar. Starting with Windows 7, the taskbar allows an application to expose its tabbed interface in the taskbar by showing thumbnail previews rather than the default window preview. Additionally, when a user hovers over a thumbnail (tab or window), they are shown a live preview of the window (or tab + its containing window). In Windows 7, a title, icon, close button and optional toolbar are shown for each preview. This feature does not make use of the toolbar. For window previews, the title is the window title and the icon the window icon. For tab previews, the title is the page title and the page's favicon. In both cases, the close button "does the right thing." The primary objects behind this feature are nsITaskbarTabPreview and nsITaskbarPreviewController. Each preview has a controller. The controller responds to the user's interactions on the taskbar and provides the required data to the preview for determining the size of the tab and thumbnail. The PreviewController class implements this interface. The preview will request the controller to provide a thumbnail or preview when the user interacts with the taskbar. To reduce the overhead of drawing the tab area, the controller implementation caches the tab's contents in a <canvas> element. If no previews or thumbnails have been requested for some time, the controller will discard its cached tab contents. Screen real estate is limited so when there are too many thumbnails to fit on the screen, the taskbar stops displaying thumbnails and instead displays just the title, icon and close button in a similar fashion to previous versions of the taskbar. If there are still too many previews to fit on the screen, the taskbar resorts to a scroll up and scroll down button pair to let the user scroll through the list of tabs. Since this is undoubtedly inconvenient for users with many tabs, the AeroPeek objects turns off all of the tab previews. This tells the taskbar to revert to one preview per window. If the number of tabs falls below this magic threshold, the preview-per-tab behavior returns. There is no reliable way to determine when the scroll buttons appear on the taskbar, so a magic pref-controlled number determines when this threshold has been crossed. 25955
ZoomUI.sys.mjs Gets the global browser.content.full-zoom content preference. @returns Promise<prefValue> Resolves to the preference value (float) when done. 7001