tor-browser

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

commit b8c50e3ec1e33e9ee5729305601437a89fa9fd11
parent dc169612817b7691ae238c83e54a380f391e7307
Author: Chloe Zhou <chloezhouny@gmail.com>
Date:   Tue, 23 Dec 2025 22:56:11 +0000

Bug 2003054 - Hide 3rd Party AI chat sidebar in AI window r=ai-frontend-reviewers,jsudiaman,Gijs

This patch hides the 3rd party AI chat sidebar in AI window:
- View -> Sidebar menu item
- Sidebar launcher icon
- Customize Sidebar panel toggle
- Session restore when switching to AI window

The aichat sidebar remains available in other Windows. Added isAIWindow() helper to SidebarController. Added browser tests for AI chat sidebar behavior in AI window.

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

Diffstat:
Mbrowser/components/aiwindow/ui/test/browser/browser.toml | 2++
Abrowser/components/aiwindow/ui/test/browser/browser_sidebar_aiwindow.js | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbrowser/components/sidebar/browser-sidebar.js | 42+++++++++++++++++++++++++-----------------
3 files changed, 130 insertions(+), 17 deletions(-)

diff --git a/browser/components/aiwindow/ui/test/browser/browser.toml b/browser/components/aiwindow/ui/test/browser/browser.toml @@ -11,3 +11,5 @@ ["browser_aiwindow_integration.js"] ["browser_open_aiwindow.js"] + +["browser_sidebar_aiwindow.js"] diff --git a/browser/components/aiwindow/ui/test/browser/browser_sidebar_aiwindow.js b/browser/components/aiwindow/ui/test/browser/browser_sidebar_aiwindow.js @@ -0,0 +1,103 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Test that AI chat sidebar is hidden in AI Window. + */ +add_task(async function test_aichat_sidebar_hidden_in_aiwindow() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["sidebar.revamp", true], + ["browser.ml.chat.enabled", true], + ["browser.aiwindow.enabled", true], + ], + }); + + const aiWin = await BrowserTestUtils.openNewBrowserWindow({ aiWindow: true }); + await aiWin.SidebarController.promiseInitialized; + + const result = await aiWin.SidebarController.show("viewGenaiChatSidebar"); + Assert.equal(result, false, "AI chat sidebar should not open in AI Window"); + + await BrowserTestUtils.closeWindow(aiWin); + await SpecialPowers.popPrefEnv(); +}); + +add_task(async function test_aichat_sidebar_not_restored_in_aiwindow() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["sidebar.revamp", true], + ["browser.ml.chat.enabled", true], + ["browser.aiwindow.enabled", true], + ], + }); + + const aiWin = await BrowserTestUtils.openNewBrowserWindow({ aiWindow: true }); + await aiWin.SidebarController.promiseInitialized; + + await aiWin.SidebarController.initializeUIState({ + command: "viewGenaiChatSidebar", + panelOpen: true, + }); + + Assert.ok( + !aiWin.SidebarController.isOpen || + aiWin.SidebarController.currentID !== "viewGenaiChatSidebar", + "AI chat sidebar should not be restored in AI Window" + ); + + await BrowserTestUtils.closeWindow(aiWin); + await SpecialPowers.popPrefEnv(); +}); + +add_task(async function test_other_sidebars_work_in_aiwindow() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["sidebar.revamp", true], + ["browser.ml.chat.enabled", true], + ["browser.aiwindow.enabled", true], + ], + }); + + const aiWin = await BrowserTestUtils.openNewBrowserWindow({ aiWindow: true }); + await aiWin.SidebarController.promiseInitialized; + + const result = await aiWin.SidebarController.show("viewHistorySidebar"); + Assert.equal(result, true, "History sidebar should open in AI Window"); + Assert.equal( + aiWin.SidebarController.currentID, + "viewHistorySidebar", + "History sidebar should be the current sidebar" + ); + + aiWin.SidebarController.hide(); + await BrowserTestUtils.closeWindow(aiWin); + await SpecialPowers.popPrefEnv(); +}); + +add_task(async function test_aichat_hidden_in_vertical_tabs_aiwindow() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["sidebar.revamp", true], + ["browser.ml.chat.enabled", true], + ["browser.aiwindow.enabled", true], + ["sidebar.verticalTabs", true], + ], + }); + + const aiWin = await BrowserTestUtils.openNewBrowserWindow({ aiWindow: true }); + await aiWin.SidebarController.promiseInitialized; + + const tools = aiWin.SidebarController.getTools(); + const aiChatTool = tools.find(t => t.commandID === "viewGenaiChatSidebar"); + + Assert.ok( + !aiChatTool, + "AI chat tool should not exist in tools list in AI Window" + ); + + await BrowserTestUtils.closeWindow(aiWin); + await SpecialPowers.popPrefEnv(); +}); diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js @@ -99,6 +99,10 @@ var SidebarController = { this.promiseInitialized.then(() => updateMenus(sidebar.visible)); }, + isAIWindow() { + return this.AIWindow.isAIWindowActive(window); + }, + get sidebars() { if (this._sidebars) { return this._sidebars; @@ -169,23 +173,25 @@ var SidebarController = { ], ]); - this.registerPrefSidebar( - "browser.ml.chat.enabled", - "viewGenaiChatSidebar", - { - name: "aichat", - elementId: "sidebar-switcher-genai-chat", - url: "chrome://browser/content/genai/chat.html", - keyId: "viewGenaiChatSidebarKb", - menuId: "menu_genaiChatSidebar", - menuL10nId: "menu-view-genai-chat", - // Bug 1900915 to expose as conditional tool - revampL10nId: "sidebar-menu-genai-chat-label", - iconUrl: "chrome://global/skin/icons/highlights.svg", - gleanClickEvent: Glean.sidebar.chatbotIconClick, - toolContextMenuId: "aichat", - } - ); + if (!this.isAIWindow()) { + this.registerPrefSidebar( + "browser.ml.chat.enabled", + "viewGenaiChatSidebar", + { + name: "aichat", + elementId: "sidebar-switcher-genai-chat", + url: "chrome://browser/content/genai/chat.html", + keyId: "viewGenaiChatSidebarKb", + menuId: "menu_genaiChatSidebar", + menuL10nId: "menu-view-genai-chat", + // Bug 1900915 to expose as conditional tool + revampL10nId: "sidebar-menu-genai-chat-label", + iconUrl: "chrome://global/skin/icons/highlights.svg", + gleanClickEvent: Glean.sidebar.chatbotIconClick, + toolContextMenuId: "aichat", + } + ); + } this.registerPrefSidebar( "browser.ml.pageAssist.enabled", @@ -2397,6 +2403,8 @@ var SidebarController = { }; ChromeUtils.defineESModuleGetters(SidebarController, { + AIWindow: + "moz-src:///browser/components/aiwindow/ui/modules/AIWindow.sys.mjs", SidebarManager: "moz-src:///browser/components/sidebar/SidebarManager.sys.mjs", SidebarState: "moz-src:///browser/components/sidebar/SidebarState.sys.mjs",