tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit cae4ed8cbf8ce6dc29928ad18bfaa3bb28d1679a
parent 97d317e8f6fe5b38341acc6274135396e20feb8c
Author: Mark Striemer <mstriemer@mozilla.com>
Date:   Fri, 19 Dec 2025 04:14:17 +0000

Bug 2005797 - Part 2: Sidebar chatbot provider selection in prefs r=yjamora,fluent-reviewers,desktop-theme-reviewers,akulyk,bolsson,hjones

Differential Revision: https://phabricator.services.mozilla.com/D276733

Diffstat:
Abrowser/components/preferences/config/aiFeatures.mjs | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbrowser/components/preferences/jar.mn | 1+
Mbrowser/components/preferences/preferences.js | 5+++++
Mbrowser/components/preferences/preferences.xhtml | 11+++++++++++
Mbrowser/components/preferences/tests/browser.toml | 2++
Abrowser/components/preferences/tests/browser_aiFeatures.js | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbrowser/components/preferences/widgets/setting-pane/setting-pane.mjs | 6+++++-
Abrowser/locales-preview/aiFeatures.ftl | 21+++++++++++++++++++++
Mbrowser/locales/jar.mn | 1+
Mbrowser/modules/BrowserUsageTelemetry.sys.mjs | 1+
Mbrowser/themes/shared/preferences/preferences.css | 8++++++++
Mtools/@types/generated/lib.gecko.modules.d.ts | 27++++++++++++++++++++++++---
Mtools/@types/generated/tspaths.json | 21+++++++++++++++++++++
13 files changed, 248 insertions(+), 4 deletions(-)

diff --git a/browser/components/preferences/config/aiFeatures.mjs b/browser/components/preferences/config/aiFeatures.mjs @@ -0,0 +1,77 @@ +/* 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/. */ + +import { Preferences } from "chrome://global/content/preferences/Preferences.mjs"; +import { SettingGroupManager } from "chrome://browser/content/preferences/config/SettingGroupManager.mjs"; + +const XPCOMUtils = ChromeUtils.importESModule( + "resource://gre/modules/XPCOMUtils.sys.mjs" +).XPCOMUtils; +const lazy = XPCOMUtils.declareLazy({ + GenAI: "resource:///modules/GenAI.sys.mjs", +}); + +Preferences.addAll([{ id: "browser.ml.chat.provider", type: "string" }]); + +Preferences.addSetting({ id: "chatbotProviderItem" }); +Preferences.addSetting({ + id: "chatbotProvider", + pref: "browser.ml.chat.provider", + setup() { + lazy.GenAI.init(); + }, + getControlConfig(config, _, setting) { + let providerUrl = setting.value; + let isKnownProvider = providerUrl == ""; + let options = [config.options[0]]; + lazy.GenAI.chatProviders.forEach((provider, url) => { + let isSelected = url == providerUrl; + // @ts-expect-error provider.hidden isn't in the typing + if (!isSelected && provider.hidden) { + return; + } + isKnownProvider = isKnownProvider || isSelected; + options.push({ + value: url, + controlAttrs: { label: provider.name }, + }); + }); + if (!isKnownProvider) { + options.push({ + value: providerUrl, + controlAttrs: { label: providerUrl }, + }); + } + return { + ...config, + options, + }; + }, +}); + +SettingGroupManager.registerGroups({ + aiFeatures: { + l10nId: "try-ai-features-group", + items: [ + { + id: "chatbotProviderItem", + control: "moz-box-item", + items: [ + { + id: "chatbotProvider", + l10nId: "try-ai-features-chatbot-provider", + control: "moz-select", + supportPage: "ai-chatbot", + options: [ + { + l10nId: "try-ai-features-chatbot-choose-label", + value: "", + }, + ], + }, + ], + }, + ], + }, +}); diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn @@ -25,6 +25,7 @@ browser.jar: content/browser/preferences/web-appearance-light.svg content/browser/preferences/etp-toggle-promo.svg content/browser/preferences/etp-advanced-banner.svg + content/browser/preferences/config/aiFeatures.mjs (config/aiFeatures.mjs) content/browser/preferences/config/SettingGroupManager.mjs (config/SettingGroupManager.mjs) content/browser/preferences/widgets/dialog-button.mjs (widgets/dialog-button/dialog-button.mjs) content/browser/preferences/widgets/placeholder-message.mjs (widgets/placeholder-message/placeholder-message.mjs) diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js @@ -281,6 +281,11 @@ const CONFIG_PANES = Object.freeze({ ], iconSrc: "chrome://browser/skin/translations.svg", }, + aiFeatures: { + l10nId: "preferences-ai-features-header", + groupIds: ["aiFeatures"], + module: "chrome://browser/content/preferences/config/aiFeatures.mjs", + }, }); var gLastCategory = { category: undefined, subcategory: undefined }; diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml @@ -55,6 +55,7 @@ <link rel="localization" href="preview/smartTabGroups.ftl"/> <link rel="localization" href="preview/privacyPreferences.ftl"/> <link rel="localization" href="preview/ipProtection.ftl"/> + <link rel="localization" href="preview/aiFeatures.ftl"/> <!-- Links below are only used for search-l10n-ids into subdialogs --> <link rel="localization" href="browser/aboutDialog.ftl"/> @@ -163,6 +164,16 @@ <label class="category-name" flex="1" data-l10n-id="pane-sync-title3"></label> </richlistitem> + <richlistitem id="category-ai-features" + class="category" + value="paneAiFeatures" + data-l10n-id="category-ai-features" + data-l10n-attrs="tooltiptext" + align="center"> + <image class="category-icon"/> + <label class="category-name" flex="1" data-l10n-id="pane-ai-features-title"></label> + </richlistitem> + <richlistitem id="category-experimental" class="category" hidden="true" diff --git a/browser/components/preferences/tests/browser.toml b/browser/components/preferences/tests/browser.toml @@ -23,6 +23,8 @@ run-if = [ "updater", ] +["browser_aiFeatures.js"] + ["browser_application_xml_handle_internally.js"] ["browser_applications_selection.js"] diff --git a/browser/components/preferences/tests/browser_aiFeatures.js b/browser/components/preferences/tests/browser_aiFeatures.js @@ -0,0 +1,71 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +describe("settings ai features", () => { + let doc, win; + + beforeEach(async function setup() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.ml.chat.provider", ""], + ["browser.settings-redesign.aiFeatures.enabled", true], + ], + }); + await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true }); + doc = gBrowser.selectedBrowser.contentDocument; + win = doc.ownerGlobal; + }); + + afterEach(() => { + BrowserTestUtils.removeTab(gBrowser.selectedTab); + gBrowser.ownerGlobal.SidebarController.hide(); + }); + + it("can change the chatbot provider value", async () => { + const categoryButton = doc.getElementById("category-ai-features"); + Assert.ok(categoryButton, "category exists"); + Assert.ok( + BrowserTestUtils.isVisible(categoryButton), + "category is visible" + ); + + const paneLoaded = waitForPaneChange("aiFeatures"); + categoryButton.scrollIntoView(); + EventUtils.synthesizeMouseAtCenter(categoryButton, {}, win); + await paneLoaded; + + const providerControl = doc.getElementById("chatbotProvider"); + Assert.ok(providerControl, "control exists"); + Assert.ok( + BrowserTestUtils.isVisible(providerControl), + "control is visible" + ); + Assert.equal( + Services.prefs.getStringPref("browser.ml.chat.provider"), + "", + "Pref is empty" + ); + + Assert.equal(providerControl.value, "", "No provider set"); + + const settingChanged = waitForSettingChange(providerControl.setting); + providerControl.focus(); + const pickerOpened = BrowserTestUtils.waitForSelectPopupShown( + win.docShell.chromeEventHandler.ownerGlobal + ); + EventUtils.sendKey("space"); + await pickerOpened; + EventUtils.sendKey("down"); + EventUtils.sendKey("return"); + await settingChanged; + + Assert.notEqual(providerControl.value, "", "Provider changed"); + Assert.notEqual( + Services.prefs.getStringPref("browser.ml.chat.provider"), + "", + "Pref is not empty" + ); + }); +}); diff --git a/browser/components/preferences/widgets/setting-pane/setting-pane.mjs b/browser/components/preferences/widgets/setting-pane/setting-pane.mjs @@ -11,6 +11,7 @@ import { MozLitElement } from "chrome://global/content/lit-utils.mjs"; * @property {string} l10nId Fluent id for the heading/description. * @property {string[]} groupIds What setting groups should be rendered. * @property {string} [iconSrc] Optional icon shown in the page header. + * @property {string} [module] Import path for module housing the config. */ export class SettingPane extends MozLitElement { @@ -82,14 +83,17 @@ export class SettingPane extends MozLitElement { if (this.isSubPane) { this.setAttribute("data-hidden-from-search", "true"); this.setAttribute("data-subpanel", "true"); + this._createCategoryButton(); } - this._createCategoryButton(); } init() { if (!this.hasUpdated) { this.performUpdate(); } + if (this.config.module) { + ChromeUtils.importESModule(this.config.module, { global: "current" }); + } for (let groupId of this.config.groupIds) { window.initSettingGroup(groupId); } diff --git a/browser/locales-preview/aiFeatures.ftl b/browser/locales-preview/aiFeatures.ftl @@ -0,0 +1,21 @@ +# 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/. + +pane-ai-features-title = AI Features +category-ai-features = + .tooltiptext = { pane-ai-features-title } + +## AI Features section + +preferences-ai-features-header = + .heading = AI features +try-ai-features-group = + .label = Try AI features + .description = All features are optional. Don’t want to see any of them? You can remove AI below. +try-ai-features-chatbot-provider = + .label = Access chatbot providers in sidebar + .description = Keep a chatbot in view as you browse. Switch anytime. +# This labels the unset option for AI Chatbot selection, the other options are brand names like "ChatGPT" and "Anthropic Claude" +try-ai-features-chatbot-choose-label = + .label = Choose provider diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn @@ -15,6 +15,7 @@ preview/genai.ftl (../components/genai/content/genai.ftl) preview/credentialChooser.ftl (../../toolkit/components/credentialmanagement/credentialChooser.ftl) browser (%browser/**/*.ftl) + preview/aiFeatures.ftl (../locales-preview/aiFeatures.ftl) preview/aiWindow.ftl (../locales-preview/aiWindow.ftl) preview/smartTabGroups.ftl (../locales-preview/smartTabGroups.ftl) preview/ipProtection.ftl (../locales-preview/ipProtection.ftl) diff --git a/browser/modules/BrowserUsageTelemetry.sys.mjs b/browser/modules/BrowserUsageTelemetry.sys.mjs @@ -149,6 +149,7 @@ const PREFERENCES_PANES = [ "paneContainers", "paneExperimental", "paneMoreFromMozilla", + "paneAiFeatures", ]; const IGNORABLE_EVENTS = new WeakMap(); diff --git a/browser/themes/shared/preferences/preferences.css b/browser/themes/shared/preferences/preferences.css @@ -235,6 +235,10 @@ radio { list-style-image: url("chrome://browser/skin/preferences/category-sync.svg"); } +#category-ai-features > .category-icon { + list-style-image: url("chrome://global/skin/icons/highlights.svg"); +} + #category-experimental > .category-icon { list-style-image: url("chrome://global/skin/icons/experiments.svg"); } @@ -1419,6 +1423,10 @@ setting-group[groupid="home"] { } /** SRD rows control for New Tab END **/ +setting-group[groupid="aiFeatures"] { + --select-max-width: fit-content; +} + #translations-manage-install-list { height: 220px; overflow: auto; diff --git a/tools/@types/generated/lib.gecko.modules.d.ts b/tools/@types/generated/lib.gecko.modules.d.ts @@ -13,6 +13,7 @@ export interface Modules { "chrome://browser/content/ipprotection/ipprotection-constants.mjs": typeof import("chrome://browser/content/ipprotection/ipprotection-constants.mjs"), "chrome://browser/content/migration/migration-wizard-constants.mjs": typeof import("chrome://browser/content/migration/migration-wizard-constants.mjs"), "chrome://browser/content/nsContextMenu.sys.mjs": typeof import("chrome://browser/content/nsContextMenu.sys.mjs"), + "chrome://browser/content/preferences/config/SettingGroupManager.mjs": typeof import("chrome://browser/content/preferences/config/SettingGroupManager.mjs"), "chrome://browser/content/screenshots/fileHelpers.mjs": typeof import("chrome://browser/content/screenshots/fileHelpers.mjs"), "chrome://browser/content/sidebar/sidebar-main.mjs": typeof import("chrome://browser/content/sidebar/sidebar-main.mjs"), "chrome://browser/content/sidebar/sidebar-panel-header.mjs": typeof import("chrome://browser/content/sidebar/sidebar-panel-header.mjs"), @@ -197,10 +198,25 @@ export interface Modules { "moz-src:///browser/components/DesktopActorRegistry.sys.mjs": typeof import("moz-src:///browser/components/DesktopActorRegistry.sys.mjs"), "moz-src:///browser/components/ProfileDataUpgrader.sys.mjs": typeof import("moz-src:///browser/components/ProfileDataUpgrader.sys.mjs"), "moz-src:///browser/components/StartupTelemetry.sys.mjs": typeof import("moz-src:///browser/components/StartupTelemetry.sys.mjs"), - "moz-src:///browser/components/aiwindow/models/ChatUtils.mjs": typeof import("moz-src:///browser/components/aiwindow/models/ChatUtils.mjs"), + "moz-src:///browser/components/aiwindow/models/Chat.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/Chat.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/ChatUtils.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/ChatUtils.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/Insights.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/Insights.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/InsightsChatSource.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/InsightsChatSource.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/InsightsConstants.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/InsightsConstants.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/InsightsDriftDetector.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/InsightsDriftDetector.sys.mjs"), "moz-src:///browser/components/aiwindow/models/InsightsHistorySource.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/InsightsHistorySource.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/InsightsManager.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/InsightsManager.sys.mjs"), "moz-src:///browser/components/aiwindow/models/IntentClassifier.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/IntentClassifier.sys.mjs"), - "moz-src:///browser/components/aiwindow/models/Utils.mjs": typeof import("moz-src:///browser/components/aiwindow/models/Utils.mjs"), + "moz-src:///browser/components/aiwindow/models/SearchBrowsingHistory.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/SearchBrowsingHistory.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/TitleGeneration.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/TitleGeneration.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/Tools.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/Tools.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/Utils.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/Utils.sys.mjs"), + "moz-src:///browser/components/aiwindow/models/prompts/InsightsPrompts.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/models/prompts/InsightsPrompts.sys.mjs"), + "moz-src:///browser/components/aiwindow/services/InsightStore.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/services/InsightStore.sys.mjs"), + "moz-src:///browser/components/aiwindow/ui/modules/AIWindow.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/ui/modules/AIWindow.sys.mjs"), + "moz-src:///browser/components/aiwindow/ui/modules/ChatMessage.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/ui/modules/ChatMessage.sys.mjs"), + "moz-src:///browser/components/aiwindow/ui/modules/ChatStore.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/ui/modules/ChatStore.sys.mjs"), + "moz-src:///browser/components/aiwindow/ui/modules/ChatUtils.sys.mjs": typeof import("moz-src:///browser/components/aiwindow/ui/modules/ChatUtils.sys.mjs"), "moz-src:///browser/components/attribution/AttributionCode.sys.mjs": typeof import("moz-src:///browser/components/attribution/AttributionCode.sys.mjs"), "moz-src:///browser/components/attribution/MacAttribution.sys.mjs": typeof import("moz-src:///browser/components/attribution/MacAttribution.sys.mjs"), "moz-src:///browser/components/contentanalysis/content/ContentAnalysis.sys.mjs": typeof import("moz-src:///browser/components/contentanalysis/content/ContentAnalysis.sys.mjs"), @@ -297,6 +313,7 @@ export interface Modules { "moz-src:///browser/components/urlbar/private/SuggestBackendRust.sys.mjs": typeof import("moz-src:///browser/components/urlbar/private/SuggestBackendRust.sys.mjs"), "moz-src:///browser/modules/CanvasPermissionPromptHelper.sys.mjs": typeof import("moz-src:///browser/modules/CanvasPermissionPromptHelper.sys.mjs"), "moz-src:///browser/modules/ContextId.sys.mjs": typeof import("moz-src:///browser/modules/ContextId.sys.mjs"), + "moz-src:///browser/modules/FaviconUtils.sys.mjs": typeof import("moz-src:///browser/modules/FaviconUtils.sys.mjs"), "moz-src:///browser/modules/PrivateBrowsingUI.sys.mjs": typeof import("moz-src:///browser/modules/PrivateBrowsingUI.sys.mjs"), "moz-src:///browser/modules/UnexpectedScriptObserver.sys.mjs": typeof import("moz-src:///browser/modules/UnexpectedScriptObserver.sys.mjs"), "moz-src:///browser/modules/WebAuthnPromptHelper.sys.mjs": typeof import("moz-src:///browser/modules/WebAuthnPromptHelper.sys.mjs"), @@ -400,7 +417,7 @@ export interface Modules { "resource:///modules/MigrationUtils.sys.mjs": typeof import("resource:///modules/MigrationUtils.sys.mjs"), "resource:///modules/MigratorBase.sys.mjs": typeof import("resource:///modules/MigratorBase.sys.mjs"), "resource:///modules/OpenTabs.sys.mjs": typeof import("resource:///modules/OpenTabs.sys.mjs"), - "resource:///modules/OpenTabsController.sys.mjs": typeof import("resource:///modules/OpenTabs.sys.mjs"), + "resource:///modules/OpenTabsController.sys.mjs": typeof import("resource:///modules/OpenTabsController.sys.mjs"), "resource:///modules/PageActions.sys.mjs": typeof import("resource:///modules/PageActions.sys.mjs"), "resource:///modules/PartnerLinkAttribution.sys.mjs": typeof import("resource:///modules/PartnerLinkAttribution.sys.mjs"), "resource:///modules/PermissionUI.sys.mjs": typeof import("resource:///modules/PermissionUI.sys.mjs"), @@ -427,6 +444,7 @@ export interface Modules { "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs": typeof import("resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs"), "resource:///modules/aboutwelcome/AboutWelcomeDefaults.sys.mjs": typeof import("resource:///modules/aboutwelcome/AboutWelcomeDefaults.sys.mjs"), "resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs": typeof import("resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs"), + "resource:///modules/aiwindow/ui/modules/ChatStore.sys.mjs": typeof import("resource:///modules/aiwindow/ui/modules/ChatStore.sys.mjs"), "resource:///modules/asrouter/ASRouter.sys.mjs": typeof import("resource:///modules/asrouter/ASRouter.sys.mjs"), "resource:///modules/asrouter/ASRouterDefaultConfig.sys.mjs": typeof import("resource:///modules/asrouter/ASRouterDefaultConfig.sys.mjs"), "resource:///modules/asrouter/ASRouterNewTabHook.sys.mjs": typeof import("resource:///modules/asrouter/ASRouterNewTabHook.sys.mjs"), @@ -476,6 +494,7 @@ export interface Modules { "resource:///modules/ipprotection/IPPExceptionsManager.sys.mjs": typeof import("resource:///modules/ipprotection/IPPExceptionsManager.sys.mjs"), "resource:///modules/ipprotection/IPPNetworkErrorObserver.sys.mjs": typeof import("resource:///modules/ipprotection/IPPNetworkErrorObserver.sys.mjs"), "resource:///modules/ipprotection/IPPNimbusHelper.sys.mjs": typeof import("resource:///modules/ipprotection/IPPNimbusHelper.sys.mjs"), + "resource:///modules/ipprotection/IPPOnboardingMessageHelper.sys.mjs": typeof import("resource:///modules/ipprotection/IPPOnboardingMessageHelper.sys.mjs"), "resource:///modules/ipprotection/IPPOptOutHelper.sys.mjs": typeof import("resource:///modules/ipprotection/IPPOptOutHelper.sys.mjs"), "resource:///modules/ipprotection/IPPProxyManager.sys.mjs": typeof import("resource:///modules/ipprotection/IPPProxyManager.sys.mjs"), "resource:///modules/ipprotection/IPPSignInWatcher.sys.mjs": typeof import("resource:///modules/ipprotection/IPPSignInWatcher.sys.mjs"), @@ -590,6 +609,7 @@ export interface Modules { "resource://devtools/shared/loader/Loader.sys.mjs": typeof import("resource://devtools/shared/loader/Loader.sys.mjs"), "resource://devtools/shared/loader/browser-loader.sys.mjs": typeof import("resource://devtools/shared/loader/browser-loader.sys.mjs"), "resource://devtools/shared/loader/worker-loader.sys.mjs": typeof import("resource://devtools/shared/loader/worker-loader.sys.mjs"), + "resource://devtools/shared/mdn.mjs": typeof import("resource://devtools/shared/mdn.mjs"), "resource://devtools/shared/network-observer/ChannelMap.sys.mjs": typeof import("resource://devtools/shared/network-observer/ChannelMap.sys.mjs"), "resource://devtools/shared/network-observer/NetworkAuthListener.sys.mjs": typeof import("resource://devtools/shared/network-observer/NetworkAuthListener.sys.mjs"), "resource://devtools/shared/network-observer/NetworkHelper.sys.mjs": typeof import("resource://devtools/shared/network-observer/NetworkHelper.sys.mjs"), @@ -613,6 +633,7 @@ export interface Modules { "resource://gre/actors/AutoCompleteParent.sys.mjs": typeof import("resource://gre/actors/AutoCompleteParent.sys.mjs"), "resource://gre/actors/FormHandlerChild.sys.mjs": typeof import("resource://gre/actors/FormHandlerChild.sys.mjs"), "resource://gre/actors/MLEngineParent.sys.mjs": typeof import("resource://gre/actors/MLEngineParent.sys.mjs"), + "resource://gre/actors/PageExtractorParent.sys.mjs": typeof import("resource://gre/actors/PageExtractorParent.sys.mjs"), "resource://gre/actors/PictureInPictureChild.sys.mjs": typeof import("resource://gre/actors/PictureInPictureChild.sys.mjs"), "resource://gre/actors/PopupAndRedirectBlockingParent.sys.mjs": typeof import("resource://gre/actors/PopupAndRedirectBlockingParent.sys.mjs"), "resource://gre/actors/SelectChild.sys.mjs": typeof import("resource://gre/actors/SelectChild.sys.mjs"), diff --git a/tools/@types/generated/tspaths.json b/tools/@types/generated/tspaths.json @@ -17,6 +17,9 @@ "chrome://browser/content/aboutlogins/components/login-message-popup.mjs": [ "browser/components/aboutlogins/content/components/login-message-popup.mjs" ], + "chrome://browser/content/aiwindow/components/input-cta.mjs": [ + "browser/components/aiwindow/ui/components/input-cta/input-cta.mjs" + ], "chrome://browser/content/asrouter/components/menu-message.mjs": [ "browser/components/asrouter/content/components/menu-message/menu-message.mjs" ], @@ -104,6 +107,9 @@ "chrome://browser/content/nsContextMenu.sys.mjs": [ "browser/base/content/nsContextMenu.sys.mjs" ], + "chrome://browser/content/preferences/config/SettingGroupManager.mjs": [ + "browser/components/preferences/config/SettingGroupManager.mjs" + ], "chrome://browser/content/preferences/widgets/dialog-button.mjs": [ "browser/components/preferences/widgets/dialog-button/dialog-button.mjs" ], @@ -128,6 +134,9 @@ "chrome://browser/content/preferences/widgets/sync-device-name.mjs": [ "browser/components/preferences/widgets/sync-device-name/sync-device-name.mjs" ], + "chrome://browser/content/preferences/widgets/sync-engines-list.mjs": [ + "browser/components/preferences/widgets/sync-engine-list/sync-engines-list.mjs" + ], "chrome://browser/content/profiles/avatar.mjs": [ "browser/components/profiles/content/avatar.mjs" ], @@ -1139,6 +1148,9 @@ "resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs": [ "browser/components/aboutwelcome/modules/AboutWelcomeTelemetry.sys.mjs" ], + "resource:///modules/aiwindow/ui/modules/ChatStore.sys.mjs": [ + "browser/components/aiwindow/ui/modules/ChatStore.sys.mjs" + ], "resource:///modules/asrouter/ASRouter.sys.mjs": [ "browser/components/asrouter/modules/ASRouter.sys.mjs" ], @@ -1298,6 +1310,9 @@ "resource:///modules/ipprotection/IPPNimbusHelper.sys.mjs": [ "browser/components/ipprotection/IPPNimbusHelper.sys.mjs" ], + "resource:///modules/ipprotection/IPPOnboardingMessageHelper.sys.mjs": [ + "browser/components/ipprotection/IPPOnboardingMessageHelper.sys.mjs" + ], "resource:///modules/ipprotection/IPPOptOutHelper.sys.mjs": [ "browser/components/ipprotection/IPPOptOutHelper.sys.mjs" ], @@ -4850,6 +4865,9 @@ "resource://devtools/shared/loader/worker-loader.sys.mjs": [ "devtools/shared/loader/worker-loader.sys.mjs" ], + "resource://devtools/shared/mdn.mjs": [ + "devtools/shared/mdn.mjs" + ], "resource://devtools/shared/natural-sort.js": [ "devtools/shared/natural-sort.js" ], @@ -5216,6 +5234,9 @@ "resource://gre/actors/NetErrorParent.sys.mjs": [ "toolkit/actors/NetErrorParent.sys.mjs" ], + "resource://gre/actors/PageExtractorParent.sys.mjs": [ + "toolkit/components/pageextractor/PageExtractorParent.sys.mjs" + ], "resource://gre/actors/PictureInPictureChild.sys.mjs": [ "toolkit/actors/PictureInPictureChild.sys.mjs" ],