AIChat build flag and gn var (#31988)

* Add AI Chat build flag to components/ai_chat

* Add AI Chat build flag to browser/ui

* Add AI Chat build flag to browser/resources

* Add AI Chat build flag to chromium overrides

* Add AI Chat build flag to other components

* Add AI Chat build flag to core browser files

* Add AI Chat build flag to app and renderer

* Add AI Chat build flag to remaining files

* Set enable_ai_chat to !is_brave_origin_branded

* Review comments

Including gn_check errors in chromium_src

* Exclude ai_chat Jest tests when not enabled
This commit is contained in:
Brian R. Bondy
2025-11-11 11:20:34 -05:00
committed by GitHub
parent dc6114e3ab
commit 72cadbd0c6
158 changed files with 1406 additions and 282 deletions
+5 -1
View File
@@ -3,6 +3,7 @@
# 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("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
@@ -14,7 +15,6 @@ group("storybook") {
# are disabled in a regular brave build due to build flags,
# they will be generated before storybook is compiled.
deps = [
"//brave/components/ai_chat/core/common/mojom:mojom_js",
"//brave/components/brave_new_tab_ui:mojom_js",
"//brave/components/brave_news/common:mojom_js",
"//brave/components/brave_rewards/core/mojom:mojom_js",
@@ -25,6 +25,10 @@ group("storybook") {
"//mojo/public/js:resources",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common/mojom:mojom_js" ]
}
if (enable_speedreader) {
deps += [ "//brave/components/speedreader/common:mojom_js" ]
}
+1
View File
@@ -56,6 +56,7 @@ source_set("command_ids") {
brave_grit("brave_generated_resources_grit") {
defines = [
"enable_ai_chat=$enable_ai_chat",
"enable_brave_vpn=$enable_brave_vpn",
"enable_containers=$enable_containers",
"enable_pin_shortcut=$enable_pin_shortcut",
+9 -1
View File
@@ -11,7 +11,7 @@
#include "brave/browser/ui/brave_ui_features.h"
#include "brave/browser/ui/tabs/features.h"
#include "brave/browser/updater/buildflags.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_rewriter/common/buildflags/buildflags.h"
#include "brave/components/brave_ads/browser/ad_units/notification_ad/custom_notification_ad_feature.h"
#include "brave/components/brave_ads/core/public/ad_units/notification_ad/notification_ad_feature.h"
@@ -50,6 +50,10 @@
#include "net/base/features.h"
#include "third_party/blink/public/common/features.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/features.h"
#endif
#if BUILDFLAG(ENABLE_AI_REWRITER)
#include "brave/components/ai_rewriter/common/features.h"
#endif
@@ -532,6 +536,7 @@ constexpr flags_ui::FeatureEntry::Choice kVerticalTabCollapseDelayChoices[] = {
#define BRAVE_MIDDLE_CLICK_AUTOSCROLL_FEATURE_ENTRY
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
#define BRAVE_AI_CHAT_FEATURE_ENTRIES \
EXPAND_FEATURE_ENTRIES( \
{ \
@@ -608,6 +613,9 @@ constexpr flags_ui::FeatureEntry::Choice kVerticalTabCollapseDelayChoices[] = {
kOsWin | kOsMac | kOsLinux | kOsAndroid, \
FEATURE_VALUE_TYPE(ai_chat::features::kPageContextEnabledInitially), \
})
#else
#define BRAVE_AI_CHAT_FEATURE_ENTRIES
#endif
#if BUILDFLAG(ENABLE_AI_REWRITER)
#define BRAVE_AI_REWRITER \
+2
View File
@@ -7,6 +7,8 @@ import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//build/buildflag_header.gni")
import("//printing/buildflags/buildflags.gni")
assert(enable_ai_chat)
static_library("ai_chat") {
sources = [
"ai_chat_service_factory.cc",
+7 -1
View File
@@ -3,13 +3,19 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
source_set("unit_tests") {
testonly = true
sources = [ "chrome_autocomplete_provider_client_unittest.cc" ]
deps = [
"//base/test:test_support",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//components/omnibox/browser",
"//testing/gtest",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
}
@@ -3,6 +3,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "base/test/scoped_feature_list.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "components/omnibox/browser/autocomplete_controller.h"
@@ -79,3 +82,5 @@ TEST_F(AutocompleteControllerLeoTest, MaybeShowLeoMatchOrdering) {
<< "When AIChatFirst is on, Leo match is NOT forced down.";
}
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
+4 -1
View File
@@ -26,7 +26,6 @@
#include "brave/browser/themes/brave_dark_mode_utils.h"
#include "brave/common/brave_channel_info.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/brave_ads/browser/component_updater/resource_component.h"
#include "brave/components/brave_component_updater/browser/brave_component_updater_delegate.h"
#include "brave/components/brave_component_updater/browser/local_data_files_service.h"
@@ -64,6 +63,10 @@
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/features.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_AI_CHAT_AGENT_PROFILE)
#include "brave/browser/ai_chat/ai_chat_agent_profile_manager.h"
#endif
+31 -18
View File
@@ -18,7 +18,6 @@
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/system/sys_info.h"
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/brave_account/brave_account_navigation_throttle.h"
#include "brave/browser/brave_ads/ads_service_factory.h"
#include "brave/browser/brave_browser_features.h"
@@ -44,24 +43,11 @@
#include "brave/browser/skus/skus_service_factory.h"
#include "brave/browser/ui/brave_ui_features.h"
#include "brave/browser/ui/webui/ads_internals/ads_internals_ui.h"
#include "brave/browser/ui/webui/ai_chat/ai_chat_ui.h"
#include "brave/browser/ui/webui/ai_chat/ai_chat_untrusted_conversation_ui.h"
#include "brave/browser/ui/webui/brave_rewards/rewards_page_ui.h"
#include "brave/browser/ui/webui/skus_internals_ui.h"
#include "brave/browser/updater/buildflags.h"
#include "brave/browser/url_sanitizer/url_sanitizer_service_factory.h"
#include "brave/components/ai_chat/content/browser/ai_chat_brave_search_throttle.h"
#include "brave/components/ai_chat/content/browser/ai_chat_throttle.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/mojom/ai_chat.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/bookmarks.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/common.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/customization_settings.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/history.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/settings_helper.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/tab_tracker.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/untrusted_frame.mojom.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_rewriter/common/buildflags/buildflags.h"
#include "brave/components/body_sniffer/body_sniffer_throttle.h"
#include "brave/components/brave_account/features.h"
@@ -193,16 +179,37 @@ using content::WebContents;
using extensions::ChromeContentBrowserClientExtensionsPart;
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ui/webui/ai_chat/ai_chat_ui.h"
#include "brave/browser/ui/webui/ai_chat/ai_chat_untrusted_conversation_ui.h"
#include "brave/components/ai_chat/content/browser/ai_chat_brave_search_throttle.h"
#include "brave/components/ai_chat/content/browser/ai_chat_throttle.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/mojom/ai_chat.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/bookmarks.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/common.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/customization_settings.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/history.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/settings_helper.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/tab_tracker.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/untrusted_frame.mojom.h"
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "brave/browser/ui/ai_chat/utils.h"
#include "brave/browser/ui/webui/brave_account/brave_account_ui_desktop.h"
#include "brave/ui/webui/brave_color_change_listener/brave_color_change_handler.h"
#include "ui/webui/resources/cr_components/color_change_listener/color_change_listener.mojom.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ui/ai_chat/utils.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#else
#include "brave/browser/ui/webui/brave_account/brave_account_ui_android.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/android/ai_chat_iap_subscription_android.h"
#endif
#endif
#if BUILDFLAG(ENABLE_AI_REWRITER)
#include "brave/browser/ui/webui/ai_rewriter/ai_rewriter_ui.h"
@@ -428,7 +435,7 @@ void BindBraveSearchDefaultHost(
}
}
#if BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_AI_CHAT)
void BindIAPSubscription(
content::RenderFrameHost* const frame_host,
mojo::PendingReceiver<ai_chat::mojom::IAPSubscription> receiver) {
@@ -629,6 +636,7 @@ void BraveContentBrowserClient::RegisterWebUIInterfaceBrokers(
}
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat::features::IsAIChatEnabled()) {
registry.ForWebUI<AIChatUI>()
.Add<ai_chat::mojom::AIChatUIHandler>()
@@ -639,6 +647,7 @@ void BraveContentBrowserClient::RegisterWebUIInterfaceBrokers(
registry.ForWebUI<AIChatUntrustedConversationUI>()
.Add<ai_chat::mojom::UntrustedUIHandler>();
}
#endif
#if BUILDFLAG(ENABLE_AI_REWRITER)
if (ai_rewriter::features::IsAIRewriterEnabled()) {
@@ -914,6 +923,7 @@ void BraveContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
base::BindRepeating(&MaybeBindColorChangeHandler));
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
auto* prefs =
user_prefs::UserPrefs::Get(render_frame_host->GetBrowserContext());
if (ai_chat::IsAIChatEnabled(prefs) &&
@@ -935,6 +945,7 @@ void BraveContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
base::BindRepeating(&BindIAPSubscription));
}
#endif
#endif
#if BUILDFLAG(ENABLE_SPEEDREADER) && !BUILDFLAG(IS_ANDROID)
content::RegisterWebUIControllerInterfaceBinder<
@@ -1298,6 +1309,7 @@ void BraveContentBrowserClient::CreateThrottlesForNavigation(
g_browser_process->GetApplicationLocale());
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
if (Profile::FromBrowserContext(context)->IsRegularProfile()) {
ai_chat::AIChatThrottle::MaybeCreateAndAdd(registry);
}
@@ -1307,6 +1319,7 @@ void BraveContentBrowserClient::CreateThrottlesForNavigation(
base::BindOnce(&ai_chat::OpenAIChatForTab), registry,
ai_chat::AIChatServiceFactory::GetForBrowserContext(context),
user_prefs::UserPrefs::Get(context));
#endif
#endif
brave_search::BackupResultsNavigationThrottle::MaybeCreateAndAdd(registry);
+10 -2
View File
@@ -18,8 +18,7 @@
#include "brave/browser/search_engines/search_engine_tracker.h"
#include "brave/browser/themes/brave_dark_mode_utils.h"
#include "brave/browser/updater/buildflags.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_ads/core/public/prefs/obsolete_pref_util.h"
#include "brave/components/brave_ads/core/public/prefs/pref_registry.h"
#include "brave/components/brave_origin/brave_origin_prefs.h"
@@ -52,6 +51,11 @@
#include "components/webui/chrome_urls/pref_names.h"
#include "third_party/widevine/cdm/buildflags.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID)
#include "brave/browser/day_zero_browser_ui_expt/day_zero_browser_ui_expt_manager.h"
#endif
@@ -181,7 +185,9 @@ void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
brave_vpn::RegisterLocalStatePrefs(registry);
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::prefs::RegisterLocalStatePrefs(registry);
#endif
skus::RegisterLocalStatePrefs(registry);
@@ -195,7 +201,9 @@ void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
misc_metrics::ProcessMiscMetrics::RegisterPrefs(registry);
misc_metrics::PageMetrics::RegisterPrefs(registry);
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::AIChatMetrics::RegisterPrefs(registry);
#endif
brave_ads::BraveStatsHelper::RegisterLocalStatePrefs(registry);
brave_ads::RegisterLocalStatePrefs(registry);
misc_metrics::GeneralBrowserUsage::RegisterPrefs(registry);
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni")
import("//brave/components/ipfs/buildflags/buildflags.gni")
@@ -19,7 +20,7 @@ source_set("brave_origin") {
deps = [
"//base",
"//brave/browser/policy:brave_simple_policy_map",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_news/common",
"//brave/components/brave_origin",
"//brave/components/brave_policy",
@@ -39,6 +40,10 @@ source_set("brave_origin") {
"//components/policy/core/common",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
if (enable_brave_vpn) {
deps += [ "//brave/components/brave_vpn/common" ]
}
@@ -12,6 +12,7 @@
#include "base/containers/map_util.h"
#include "base/no_destructor.h"
#include "brave/browser/policy/brave_simple_policy_map.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_origin/brave_origin_policy_manager.h"
#include "brave/components/brave_origin/brave_origin_service.h"
#include "brave/components/brave_origin/profile_id.h"
@@ -38,6 +39,10 @@
#include "brave/components/brave_vpn/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
namespace policy {
class PolicyService;
}
@@ -115,11 +120,14 @@ constexpr auto kBraveOriginProfileMetadata =
BraveOriginServiceFactory::BraveOriginPrefMetadata(
true,
/*user_settable=*/false)},
#if BUILDFLAG(ENABLE_AI_CHAT)
// AI Chat preferences
{ai_chat::prefs::kEnabledByPolicy,
BraveOriginServiceFactory::BraveOriginPrefMetadata(
false,
/*user_settable=*/false)},
#endif
#if BUILDFLAG(ENABLE_SPEEDREADER)
// Speedreader preferences
+11 -3
View File
@@ -16,9 +16,7 @@
#include "brave/browser/ui/bookmark/brave_bookmark_prefs.h"
#include "brave/browser/ui/omnibox/brave_omnibox_client_impl.h"
#include "brave/common/pref_names.h"
#include "brave/components/ai_chat/core/browser/model_service.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_account/prefs.h"
#include "brave/components/brave_adaptive_captcha/brave_adaptive_captcha_service.h"
#include "brave/components/brave_ads/core/public/prefs/obsolete_pref_util.h"
@@ -85,6 +83,12 @@
#include "extensions/buildflags/buildflags.h"
#include "third_party/widevine/cdm/buildflags.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/model_service.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_WAYBACK_MACHINE)
#include "brave/components/brave_wayback_machine/pref_names.h"
#endif
@@ -323,7 +327,9 @@ void RegisterProfilePrefsForMigration(
brave_ads::RegisterProfilePrefsForMigration(registry);
// Added 2024-04
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::prefs::RegisterProfilePrefsForMigration(registry);
#endif
brave_shields::RegisterShieldsP3AProfilePrefsForMigration(registry);
@@ -509,8 +515,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
welcome_ui::prefs::RegisterProfilePrefs(registry);
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::prefs::RegisterProfilePrefs(registry);
ai_chat::ModelService::RegisterProfilePrefs(registry);
#endif
brave_account::prefs::RegisterPrefs(registry);
brave_origin::prefs::RegisterProfilePrefs(registry);
+13 -3
View File
@@ -12,8 +12,6 @@
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/brave_ads/creatives/search_result_ad/creative_search_result_ad_tab_helper.h"
#include "brave/browser/brave_ads/tabs/ads_tab_helper.h"
#include "brave/browser/brave_browser_process.h"
@@ -26,7 +24,7 @@
#include "brave/browser/misc_metrics/process_misc_metrics.h"
#include "brave/browser/playlist/playlist_service_factory.h"
#include "brave/browser/ui/brave_ui_features.h"
#include "brave/components/ai_chat/content/browser/ai_chat_tab_helper.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_perf_predictor/browser/perf_predictor_tab_helper.h"
#include "brave/components/brave_wayback_machine/buildflags/buildflags.h"
#include "brave/components/playlist/content/browser/playlist_tab_helper.h"
@@ -48,6 +46,12 @@
#include "printing/buildflags/buildflags.h"
#include "third_party/widevine/cdm/buildflags.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/components/ai_chat/content/browser/ai_chat_tab_helper.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#include "brave/browser/android/youtube_script_injector/youtube_script_injector_tab_helper.h"
#endif
@@ -63,8 +67,12 @@
#endif
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/print_preview_extractor.h"
#include "brave/browser/ai_chat/print_preview_extractor_internal.h"
#endif
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
@@ -123,6 +131,7 @@ void AttachTabHelpers(content::WebContents* web_contents) {
brave_rewards::RewardsTabHelper::CreateForWebContents(web_contents);
#if BUILDFLAG(ENABLE_AI_CHAT)
content::BrowserContext* context = web_contents->GetBrowserContext();
if (ai_chat::IsAllowedForContext(context)) {
ai_chat::AIChatTabHelper::CreateForWebContents(
@@ -158,6 +167,7 @@ void AttachTabHelpers(content::WebContents* web_contents) {
#endif
);
}
#endif
#if BUILDFLAG(ENABLE_WIDEVINE)
BraveDrmTabHelper::CreateForWebContents(web_contents);
@@ -6,9 +6,6 @@
#include "brave/browser/browser_context_keyed_service_factories.h"
#include "base/feature_list.h"
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ai_chat/ollama/ollama_service_factory.h"
#include "brave/browser/ai_chat/tab_tracker_service_factory.h"
#include "brave/browser/brave_account/brave_account_service_factory.h"
#include "brave/browser/brave_adaptive_captcha/brave_adaptive_captcha_service_factory.h"
#include "brave/browser/brave_ads/ads_service_factory.h"
@@ -40,8 +37,7 @@
#include "brave/browser/sync/brave_sync_alerts_service_factory.h"
#include "brave/browser/url_sanitizer/url_sanitizer_service_factory.h"
#include "brave/browser/webcompat_reporter/webcompat_reporter_service_factory.h"
#include "brave/components/ai_chat/content/browser/model_service_factory.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_account/features.h"
#include "brave/components/brave_perf_predictor/browser/named_third_party_registry_factory.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
@@ -54,6 +50,14 @@
#include "brave/components/tor/buildflags/buildflags.h"
#include "brave/components/web_discovery/buildflags/buildflags.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ai_chat/ollama/ollama_service_factory.h"
#include "brave/browser/ai_chat/tab_tracker_service_factory.h"
#include "brave/components/ai_chat/content/browser/model_service_factory.h"
#include "brave/components/ai_chat/core/common/features.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/brave_vpn_service_factory.h"
#endif
@@ -186,12 +190,14 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
speedreader::SpeedreaderServiceFactory::GetInstance();
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat::features::IsAIChatEnabled()) {
ai_chat::AIChatServiceFactory::GetInstance();
ai_chat::ModelServiceFactory::GetInstance();
ai_chat::OllamaServiceFactory::GetInstance();
ai_chat::TabTrackerServiceFactory::GetInstance();
}
#endif
brave_search::BackupResultsServiceFactory::GetInstance();
@@ -11,9 +11,8 @@
#include "base/containers/flat_map.h"
#include "base/no_destructor.h"
#include "base/notreached.h"
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/brave_news/brave_news_controller_factory.h"
#include "brave/components/ai_chat/core/browser/ai_chat_service.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_news/browser/brave_news_controller.h"
#include "brave/components/content_settings/core/browser/brave_content_settings_pref_provider.h"
#include "brave/components/content_settings/core/browser/brave_content_settings_utils.h"
@@ -26,6 +25,11 @@
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "content/public/browser/browsing_data_remover.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/components/ai_chat/core/browser/ai_chat_service.h"
#endif
namespace {
// TODO(boocmp): Remove this in
@@ -141,6 +145,7 @@ void BraveBrowsingDataRemoverDelegate::RemoveEmbedderData(
profile_)) {
brave_news_controller->ClearHistory();
}
#if BUILDFLAG(ENABLE_AI_CHAT)
// AI Chat history but only associated content, not neccessary if we
// are also deleting entire AI Chat history.
if (!(remove_mask &
@@ -151,8 +156,10 @@ void BraveBrowsingDataRemoverDelegate::RemoveEmbedderData(
ai_chat_service->DeleteAssociatedWebContent(delete_begin, delete_end);
}
}
#endif
}
#if BUILDFLAG(ENABLE_AI_CHAT)
// That code executes on desktop only. Android part is done inside
// BraveClearBrowsingDataFragment::onClearBrowsingData(). It's done
// that way to avoid extensive patching in java files by adding extra
@@ -165,6 +172,7 @@ void BraveBrowsingDataRemoverDelegate::RemoveEmbedderData(
ai_chat_service->DeleteConversations(delete_begin, delete_end);
}
}
#endif
if ((remove_mask & content::BrowsingDataRemover::DATA_TYPE_COOKIES) ||
(remove_mask & chrome_browsing_data_remover::DATA_TYPE_HISTORY)) {
@@ -13,6 +13,7 @@
#include "base/scoped_multi_source_observation.h"
#include "base/trace_event/trace_event.h"
#include "base/values.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h"
#include "chrome/browser/lifetime/browser_shutdown.h"
@@ -106,9 +107,11 @@ bool GetClearBrowsingDataOnExitSettings(const Profile* profile,
*remove_mask |= chrome_browsing_data_remover::DATA_TYPE_CONTENT_SETTINGS;
}
#if BUILDFLAG(ENABLE_AI_CHAT)
if (prefs->GetBoolean(browsing_data::prefs::kDeleteBraveLeoHistoryOnExit)) {
*remove_mask |= chrome_browsing_data_remover::DATA_TYPE_BRAVE_LEO_HISTORY;
}
#endif
return (*remove_mask != 0);
}
@@ -17,6 +17,7 @@
#include "base/run_loop.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/scoped_feature_list.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h"
#include "chrome/browser/profiles/profile.h"
@@ -113,8 +114,10 @@ class BraveClearDataOnExitTest
true);
prefService->SetBoolean(browsing_data::prefs::kDeleteSiteSettingsOnExit,
true);
#if BUILDFLAG(ENABLE_AI_CHAT)
prefService->SetBoolean(browsing_data::prefs::kDeleteBraveLeoHistoryOnExit,
true);
#endif
}
uint64_t GetRemoveMaskAll() {
@@ -124,7 +127,9 @@ class BraveClearDataOnExitTest
chrome_browsing_data_remover::DATA_TYPE_SITE_DATA |
chrome_browsing_data_remover::DATA_TYPE_PASSWORDS |
chrome_browsing_data_remover::DATA_TYPE_FORM_DATA |
#if BUILDFLAG(ENABLE_AI_CHAT)
chrome_browsing_data_remover::DATA_TYPE_BRAVE_LEO_HISTORY |
#endif
chrome_browsing_data_remover::DATA_TYPE_CONTENT_SETTINGS;
}
+9 -2
View File
@@ -3,6 +3,7 @@
# 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("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
brave_browser_browsing_data_sources = [
@@ -14,8 +15,7 @@ brave_browser_browsing_data_sources = [
brave_browser_browsing_data_deps = [
"//base",
"//brave/browser/ai_chat",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/content_settings/core/common",
"//chrome/browser:browser_process",
"//chrome/browser/browsing_data:constants",
@@ -28,6 +28,13 @@ brave_browser_browsing_data_deps = [
"//content/public/browser",
]
if (enable_ai_chat) {
brave_browser_browsing_data_deps += [
"//brave/browser/ai_chat",
"//brave/components/ai_chat/core/browser",
]
}
if (enable_extensions) {
brave_browser_browsing_data_deps += [
"//brave/common/extensions/api",
+7 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
@@ -104,7 +105,7 @@ source_set("extensions") {
"//brave/browser/ui:brave_tab_prefs",
"//brave/common",
"//brave/common/extensions/api",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_adaptive_captcha",
"//brave/components/brave_ads/browser",
"//brave/components/brave_ads/core/public:headers",
@@ -128,6 +129,7 @@ source_set("extensions") {
"//brave/components/playlist/core/common",
"//brave/components/request_otr/common",
"//brave/components/sidebar/browser",
"//brave/components/speedreader/common/buildflags",
"//brave/components/tor/buildflags",
"//brave/components/web_discovery/buildflags",
"//brave/components/webcompat_reporter/common",
@@ -166,6 +168,10 @@ source_set("extensions") {
deps += [ "//brave/components/speedreader" ]
}
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
if (enable_brave_vpn) {
deps += [ "//brave/components/brave_vpn/common" ]
}
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
source_set("misc_metrics") {
@@ -13,6 +14,7 @@ source_set("misc_metrics") {
]
deps = [
"//brave/components/ai_chat/core/common/buildflags",
"//components/keyed_service/content",
"//components/keyed_service/core",
"//components/prefs",
@@ -39,7 +41,6 @@ static_library("misc_metrics_impl") {
"//brave/browser:browser_process",
"//brave/browser/misc_metrics",
"//brave/browser/profiles:util",
"//brave/components/ai_chat/core/browser",
"//brave/components/misc_metrics",
"//brave/components/p3a_utils",
"//brave/components/time_period_storage",
@@ -56,6 +57,10 @@ static_library("misc_metrics_impl") {
"//content/public/browser",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/browser" ]
}
if (enable_extensions) {
sources += [
"//brave/browser/misc_metrics/extension_metrics.cc",
@@ -9,7 +9,7 @@
#include "brave/browser/brave_stats/first_run_util.h"
#include "brave/browser/misc_metrics/profile_new_tab_metrics.h"
#include "brave/browser/misc_metrics/theme_metrics.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/misc_metrics/autofill_metrics.h"
#include "brave/components/misc_metrics/language_metrics.h"
#include "brave/components/misc_metrics/page_metrics.h"
@@ -27,6 +27,10 @@
#include "components/user_prefs/user_prefs.h"
#include "content/public/browser/browser_context.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(IS_ANDROID)
#include "brave/browser/brave_browser_process.h"
#include "brave/browser/misc_metrics/misc_android_metrics.h"
@@ -49,10 +53,12 @@ ProfileMiscMetricsService::ProfileMiscMetricsService(
ntp_background_images::prefs::kNewTabPageSponsoredImagesSurveyPanelist,
base::BindRepeating(&ProfileMiscMetricsService::ReportSimpleMetrics,
base::Unretained(this)));
#if BUILDFLAG(ENABLE_AI_CHAT)
if (local_state) {
ai_chat_metrics_ =
std::make_unique<ai_chat::AIChatMetrics>(local_state, profile_prefs_);
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
}
auto* profile = Profile::FromBrowserContext(context);
auto* history_service = HistoryServiceFactory::GetForProfile(
@@ -137,8 +143,10 @@ void ProfileMiscMetricsService::ReportSimpleMetrics() {
}
}
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::AIChatMetrics* ProfileMiscMetricsService::GetAIChatMetrics() {
return ai_chat_metrics_.get();
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
} // namespace misc_metrics
@@ -8,6 +8,7 @@
#include <memory>
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "build/build_config.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_change_registrar.h"
@@ -18,9 +19,11 @@ namespace content {
class BrowserContext;
} // namespace content
#if BUILDFLAG(ENABLE_AI_CHAT)
namespace ai_chat {
class AIChatMetrics;
} // namespace ai_chat
#endif // BUILDFLAG(ENABLE_AI_CHAT)
namespace misc_metrics {
@@ -52,7 +55,9 @@ class ProfileMiscMetricsService : public KeyedService {
void Shutdown() override;
PageMetrics* GetPageMetrics();
#if BUILDFLAG(ENABLE_AI_CHAT)
ai_chat::AIChatMetrics* GetAIChatMetrics();
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(IS_ANDROID)
MiscAndroidMetrics* GetMiscAndroidMetrics();
#endif
@@ -66,7 +71,9 @@ class ProfileMiscMetricsService : public KeyedService {
std::unique_ptr<AutofillMetrics> autofill_metrics_ = nullptr;
std::unique_ptr<LanguageMetrics> language_metrics_ = nullptr;
std::unique_ptr<PageMetrics> page_metrics_ = nullptr;
#if BUILDFLAG(ENABLE_AI_CHAT)
std::unique_ptr<ai_chat::AIChatMetrics> ai_chat_metrics_ = nullptr;
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(IS_ANDROID)
std::unique_ptr<MiscAndroidMetrics> misc_android_metrics_ = nullptr;
#else
+8 -1
View File
@@ -3,6 +3,8 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
# These files needs access to some files in chrome/browser target.
brave_browser_misc_metrics_sources = [
"//brave/browser/misc_metrics/profile_misc_metrics_service.cc",
@@ -13,7 +15,7 @@ brave_browser_misc_metrics_sources = [
brave_browser_misc_metrics_deps = [
"//brave/browser:browser_process",
"//brave/browser/profiles:util",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/misc_metrics",
"//brave/components/ntp_background_images/browser",
"//brave/components/ntp_background_images/common",
@@ -24,6 +26,11 @@ brave_browser_misc_metrics_deps = [
"//content/public/browser",
]
if (enable_ai_chat) {
brave_browser_misc_metrics_deps +=
[ "//brave/components/ai_chat/core/browser" ]
}
if (!is_android) {
brave_browser_misc_metrics_sources += [
"//brave/browser/misc_metrics/default_browser_monitor.cc",
@@ -10,7 +10,7 @@
#include "brave/browser/brave_browser_process.h"
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/perf/brave_perf_switches.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_ads/core/public/prefs/pref_names.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/content/rewards_service.h"
@@ -21,6 +21,10 @@
#include "chrome/common/chrome_switches.h"
#include "components/prefs/pref_service.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_SPEEDREADER)
#include "brave/components/speedreader/speedreader_pref_names.h"
#endif
@@ -76,10 +80,12 @@ void MaybeEnableBraveFeaturesPrefsForPerfTesting(Profile* profile) {
speedreader::kSpeedreaderAllowedForAllReadableSites, true);
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
profile->GetPrefs()->SetTime(ai_chat::prefs::kLastAcceptedDisclaimer,
base::Time::Now());
profile->GetPrefs()->SetBoolean(
ai_chat::prefs::kBraveChatAutocompleteProviderEnabled, true);
#endif
}
void MaybeEnableBraveFeaturesServicesAndComponentsForPerfTesting(
@@ -6,7 +6,7 @@
#include "base/scoped_observation.h"
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/perf/brave_perf_switches.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_ads/core/public/prefs/pref_names.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/content/rewards_service.h"
@@ -19,6 +19,10 @@
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#endif
#if BUILDFLAG(ENABLE_SPEEDREADER)
#include "brave/browser/speedreader/speedreader_service_factory.h"
#include "brave/components/speedreader/speedreader_service.h"
@@ -95,7 +99,9 @@ IN_PROC_BROWSER_TEST_F(BraveSpeedFeatureProcessorBrowserTest, Default) {
EXPECT_TRUE(BraveNewsAreEnabled());
WaitForRewardsServiceInitialized();
#if BUILDFLAG(ENABLE_AI_CHAT)
auto* prefs = browser()->profile()->GetPrefs();
EXPECT_TRUE(ai_chat::IsAIChatEnabled(prefs));
EXPECT_TRUE(ai_chat::HasUserOptedIn(prefs));
#endif
}
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni")
import("//brave/components/ipfs/buildflags/buildflags.gni")
@@ -15,7 +16,7 @@ source_set("brave_simple_policy_map") {
deps = [
"//base",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_news/common",
"//brave/components/brave_rewards/core",
"//brave/components/brave_shields/core/common",
@@ -38,6 +39,10 @@ source_set("brave_simple_policy_map") {
"//components/policy/core/common:common_constants",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
if (enable_tor) {
deps += [ "//brave/components/tor:pref_names" ]
}
+7 -1
View File
@@ -6,7 +6,7 @@
#ifndef BRAVE_BROWSER_POLICY_BRAVE_SIMPLE_POLICY_MAP_H_
#define BRAVE_BROWSER_POLICY_BRAVE_SIMPLE_POLICY_MAP_H_
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
#include "brave/components/brave_shields/core/common/pref_names.h"
@@ -28,6 +28,10 @@
#include "components/policy/core/browser/configuration_policy_handler.h"
#include "components/policy/policy_constants.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_TOR)
#include "brave/components/tor/pref_names.h"
#endif
@@ -69,8 +73,10 @@ inline constexpr PolicyToPreferenceMapEntry kBraveSimplePolicyMap[] = {
{policy::key::kBraveVPNDisabled, brave_vpn::prefs::kManagedBraveVPNDisabled,
base::Value::Type::BOOLEAN},
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
{policy::key::kBraveAIChatEnabled, ai_chat::prefs::kEnabledByPolicy,
base::Value::Type::BOOLEAN},
#endif
{policy::key::kBraveP3AEnabled, p3a::kP3AEnabled,
base::Value::Type::BOOLEAN},
{policy::key::kBraveStatsPingEnabled, kStatsReportingEnabled,
+6 -1
View File
@@ -3,6 +3,8 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
source_set("unit_tests") {
testonly = true
assert(is_win || is_linux || is_mac)
@@ -10,7 +12,6 @@ source_set("unit_tests") {
deps = [
"//base",
"//brave/app:command_ids",
"//brave/components/ai_chat/core/common",
"//chrome/browser",
"//chrome/browser/search_engines",
"//chrome/test:test_support",
@@ -22,4 +23,8 @@ source_set("unit_tests") {
"//testing/gtest",
"//third_party/abseil-cpp:absl",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
}
@@ -9,7 +9,7 @@
#include "base/check.h"
#include "brave/app/brave_command_ids.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
@@ -28,6 +28,10 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/clipboard/clipboard.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
namespace {
content::ContextMenuParams CreateSelectedTextParams(
@@ -180,6 +184,7 @@ TEST_F(BraveRenderViewContextMenuTest, MenuForLink) {
EXPECT_TRUE(context_menu->IsCommandIdEnabled(IDC_COPY_CLEAN_LINK));
}
#if BUILDFLAG(ENABLE_AI_CHAT)
TEST_F(BraveRenderViewContextMenuTest, MenuForAIChat) {
content::ContextMenuParams params = CreateSelectedTextParams(u"hello");
@@ -208,3 +213,4 @@ TEST_F(BraveRenderViewContextMenuTest, MenuForAIChat_PWA) {
IDC_AI_CHAT_CONTEXT_LEO_TOOLS);
EXPECT_FALSE(ai_chat_index.has_value());
}
#endif
@@ -5,10 +5,13 @@
# based on //chrome/browser/resources/whats_new/BUILD.gn
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//ui/webui/resources/tools/build_webui.gni")
build_webui("build") {
grd_prefix = "brave_education"
preprocessor_defines = [ "enable_ai_chat=$enable_ai_chat" ]
static_files = [ "brave_education.html" ]
ts_files = [
"brave_education_app.html.ts",
@@ -113,7 +113,9 @@ export class BraveEducationAppElement extends CrLitElement {
'open-rewards-onboarding': Command.kOpenRewardsOnboarding,
'open-wallet-onboarding': Command.kOpenWalletOnboarding,
'open-vpn-onboarding': Command.kOpenVPNOnboarding,
// <if expr="enable_ai_chat">
'open-ai-chat': Command.kOpenAIChat,
// </if>
}),
)
+2
View File
@@ -5,6 +5,7 @@
import("//brave/browser/shell_integrations/buildflags/buildflags.gni")
import("//brave/build/config.gni")
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni")
import("//brave/components/containers/buildflags/buildflags.gni")
@@ -82,6 +83,7 @@ generate_grd("build_grd") {
# compile (etc.) from that directory.
preprocess_if_expr("preprocess") {
defines = [
"enable_ai_chat=$enable_ai_chat",
"enable_tor=$enable_tor",
"enable_brave_wayback_machine=$enable_brave_wayback_machine",
"enable_brave_vpn=$enable_brave_vpn",
@@ -25,9 +25,12 @@ import '../brave_web3_domains_page/brave_web3_domains_page.js'
import '../default_brave_shields_page/default_brave_shields_page.js'
import '../getting_started_page/getting_started.js'
import '../social_blocking_page/social_blocking_page.js'
// <if expr="enable_ai_chat">
import '../brave_leo_assistant_page/brave_leo_assistant_page.js'
import '../brave_leo_assistant_page/model_list_section.js'
import '../brave_leo_assistant_page/personalization.js'
// </if>
// <if expr="enable_containers">
import '../brave_content_page/containers.js'
@@ -122,6 +122,7 @@ RegisterPolymerTemplateModifications({
}
// Append Leo reset checkbox
// <if expr="enable_ai_chat">
const isLeoAssistantAndHistoryAllowed =
loadTimeData.getBoolean('isLeoAssistantAllowed')
&& loadTimeData.getBoolean('isLeoAssistantHistoryAllowed')
@@ -151,5 +152,6 @@ RegisterPolymerTemplateModifications({
console.error('[Settings] missing Leo reset link')
}
}
// </if>
}
})
@@ -92,9 +92,11 @@ function getPageVisibility () {
// custom properties
braveSync: !loadTimeData.getBoolean('isSyncDisabled'),
braveWallet: loadTimeData.getBoolean('isBraveWalletAllowed'),
// <if expr="enable_ai_chat">
leoAssistant: loadTimeData.getBoolean('isLeoAssistantAllowed'),
leoPersonalization: loadTimeData.getBoolean('isLeoAssistantAllowed'),
leoModels: loadTimeData.getBoolean('isLeoAssistantAllowed'),
// </if>
surveyPanelist: loadTimeData.getBoolean('isSurveyPanelistAllowed'),
// <if expr="enable_containers">
containers: loadTimeData.getBoolean('isContainersEnabled'),
@@ -139,6 +139,7 @@ RegisterPolymerTemplateModifications({
</site-settings-localhost-page>`)
}
// <if expr="enable_ai_chat">
if (loadTimeData.getBoolean('isOpenAIChatFromBraveSearchEnabled')) {
viewManager.appendChild(html`
<site-settings-brave-ai-page
@@ -180,6 +181,7 @@ RegisterPolymerTemplateModifications({
</site-settings-cardano-page>`)
}
}
// </if>
// Move the safety hub to the end of the page
const safetyHubTemplate = templateContent.querySelector(
@@ -15,11 +15,14 @@ import '../getting_started_page/getting_started_page_index.js'
import '../brave_origin_page/brave_origin_page.js'
import '../default_brave_shields_page/shields_page_index.js'
import '../brave_wallet_page/wallet_page_index.js'
import '../brave_leo_assistant_page/brave_leo_assistant_page_index.js'
import '../brave_default_extensions_page/brave_extensions_page_index.js'
import '../brave_sync_page/brave_sync_page_index.js'
import '../brave_system_page/brave_system_page_index.js'
// <if expr="enable_ai_chat">
import '../brave_leo_assistant_page/brave_leo_assistant_page_index.js'
// </if>
RegisterPolymerTemplateModifications({
'settings-main': (templateContent) => {
// Always show settings-basic-page
@@ -297,6 +297,7 @@ RegisterPolymerTemplateModifications({
}
// Add leo item
// <if expr="enable_ai_chat">
const leoAssistantEl = createMenuElement(
loadTimeData.getString('leoAssistant'),
'/leo-ai',
@@ -308,6 +309,7 @@ RegisterPolymerTemplateModifications({
} else if (privacyEl) {
privacyEl.insertAdjacentElement('afterend', leoAssistantEl)
}
// </if>
// Add Sync item
const syncEl = createMenuElement(
@@ -316,7 +318,16 @@ RegisterPolymerTemplateModifications({
'product-sync',
'braveSync',
)
// <if expr="enable_ai_chat">
leoAssistantEl.insertAdjacentElement('afterend', syncEl)
// </if>
// <if expr="not enable_ai_chat">
if (web3El) {
web3El.insertAdjacentElement('afterend', syncEl)
} else if (privacyEl) {
privacyEl.insertAdjacentElement('afterend', syncEl)
}
// </if>
// Add search item
const searchEl = getMenuElement(templateContent, '/search')
@@ -99,6 +99,7 @@ RegisterPolymerTemplateModifications({
}
curChild++
}
// <if expr="enable_ai_chat">
// AI Chat feature
const isOpenAIChatFromBraveSearchEnabled =
loadTimeData.getBoolean('isOpenAIChatFromBraveSearchEnabled')
@@ -117,6 +118,7 @@ RegisterPolymerTemplateModifications({
}
curChild++
}
// </if>
const isNativeBraveWalletEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
@@ -141,6 +141,7 @@ RegisterPolymerComponentReplacement(
lists.permissionsAdvanced.splice(currentIndex, 0,
localhostAccessItem)
}
// <if expr="enable_ai_chat">
const isOpenAIChatFromBraveSearchEnabled =
loadTimeData.getBoolean('isOpenAIChatFromBraveSearchEnabled')
if (isOpenAIChatFromBraveSearchEnabled) {
@@ -156,6 +157,7 @@ RegisterPolymerComponentReplacement(
lists.permissionsAdvanced.splice(currentIndex, 0,
AIChatItem)
}
// </if>
const isNativeBraveWalletEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
@@ -87,12 +87,14 @@
label="$i18n{appearanceSettingsUseCommanderSuggestions}">
</settings-checkbox>
</template>
<if expr="enable_ai_chat">
<template is="dom-if" if="[[showLeoAssistant_()]]">
<settings-checkbox class="cr-row list-item"
pref="{{prefs.brave.ai_chat.autocomplete_provider_enabled}}"
label="$i18n{appearanceSettingsUseLeoSuggestions}">
</settings-checkbox>
</template>
</if>
</div>
</template>
<settings-toggle-button
@@ -98,9 +98,11 @@ class SettingsBraveAppearanceToolbarElement extends SettingsBraveAppearanceToolb
return loadTimeData.getBoolean('isBraveVPNEnabled')
}
// <if expr="enable_ai_chat">
private showLeoAssistant_() {
return loadTimeData.getBoolean('isLeoAssistantAllowed')
}
// </if>
private showCommandsInOmnibox_() {
return loadTimeData.getBoolean('showCommandsInOmnibox')
@@ -28,6 +28,7 @@
sub-label="[[counters.cookies]]"
no-set-pref>
</settings-checkbox>
<if expr="enable_ai_chat">
<settings-checkbox id="leoResetOnExitCheckbox"
pref="{{prefs.browser.clear_data.brave_leo_on_exit}}"
label="$i18n{aiChatClearHistoryData}"
@@ -35,6 +36,7 @@
hidden="[[!isLeoAssistantAndHistoryAllowed_]]"
no-set-pref>
</settings-checkbox>
</if>
<settings-checkbox id="cacheCheckboxOnExit"
class="cache-checkbox"
pref="{{prefs.browser.clear_data.cache_on_exit}}"
@@ -58,6 +58,7 @@ extends SettingsBraveClearBrowsingDataOnExitPageElementBase {
},
},
// <if expr="enable_ai_chat">
isAIChatAndHistoryAllowed_: {
type: Boolean,
value() {
@@ -65,6 +66,7 @@ extends SettingsBraveClearBrowsingDataOnExitPageElementBase {
&& loadTimeData.getBoolean('isLeoAssistantHistoryAllowed')
},
}
// </if>
}
}
@@ -72,7 +74,9 @@ extends SettingsBraveClearBrowsingDataOnExitPageElementBase {
private counters: {[k: string]: string} = {}
private isChildAccount_: boolean
// <if expr="enable_ai_chat">
private isAIChatAndHistoryAllowed_: boolean
// </if>
override ready() {
super.ready()
@@ -97,12 +97,14 @@ export default function addBraveRoutes(r: Partial<SettingsRoutes>) {
r.SITE_SETTINGS_LOCALHOST_ACCESS = r.SITE_SETTINGS
.createChild('localhostAccess')
}
// <if expr="enable_ai_chat">
const isOpenAIChatFromBraveSearchEnabled =
loadTimeData.getBoolean('isOpenAIChatFromBraveSearchEnabled')
if (isOpenAIChatFromBraveSearchEnabled) {
r.SITE_SETTINGS_BRAVE_OPEN_AI_CHAT =
r.SITE_SETTINGS.createChild('braveOpenAIChat')
}
// </if>
const isNativeBraveWalletFeatureEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
+32 -19
View File
@@ -4,6 +4,7 @@
# you can obtain one at http://mozilla.org/MPL/2.0/.
import("//brave/browser/shell_integrations/buildflags/buildflags.gni")
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/containers/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
@@ -45,13 +46,6 @@ brave_settings_web_component_files = [
"brave_sync_page/brave_sync_setup.ts",
"brave_sync_page/brave_sync_subpage.ts",
"brave_system_page/brave_system_page_index.ts",
"brave_leo_assistant_page/brave_leo_assistant_page.ts",
"brave_leo_assistant_page/brave_leo_assistant_page_index.ts",
"brave_leo_assistant_page/customization_subpage.ts",
"brave_leo_assistant_page/memory_section.ts",
"brave_leo_assistant_page/model_list_section.ts",
"brave_leo_assistant_page/model_config_ui.ts",
"brave_leo_assistant_page/personalization.ts",
"brave_survey_panelist_page/brave_survey_panelist_page.ts",
"brave_wallet_page/add_wallet_network_dialog.ts",
"brave_wallet_page/brave_wallet_page.ts",
@@ -138,7 +132,6 @@ brave_settings_ts_files = [
"brave_data_collection_page/brave_data_collection_browser_proxy.ts",
"brave_default_extensions_page/brave_default_extensions_browser_proxy.ts",
"brave_new_tab_page/brave_new_tab_browser_proxy.ts",
"brave_leo_assistant_page/brave_leo_assistant_browser_proxy.ts",
"brave_privacy_page/brave_privacy_page_browser_proxy.ts",
"brave_reset_page/brave_reset_profile_dialog_behavior.ts",
"brave_routes.ts",
@@ -180,6 +173,20 @@ if (enable_tor) {
brave_settings_ts_files += [ "brave_tor_page/brave_tor_browser_proxy.ts" ]
}
if (enable_ai_chat) {
brave_settings_web_component_files += [
"brave_leo_assistant_page/brave_leo_assistant_page.ts",
"brave_leo_assistant_page/brave_leo_assistant_page_index.ts",
"brave_leo_assistant_page/customization_subpage.ts",
"brave_leo_assistant_page/memory_section.ts",
"brave_leo_assistant_page/model_list_section.ts",
"brave_leo_assistant_page/model_config_ui.ts",
"brave_leo_assistant_page/personalization.ts",
]
brave_settings_ts_files +=
[ "brave_leo_assistant_page/brave_leo_assistant_browser_proxy.ts" ]
}
brave_settings_ts_definitions =
[ "//brave/components/definitions/chrome_brave_theme.d.ts" ]
@@ -187,16 +194,6 @@ brave_settings_ts_extra_deps =
[ "//brave/browser/resources/settings:preprocess" ]
brave_settings_mojo_files = [
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/settings_helper.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/ai_chat.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/bookmarks.mojom-webui.ts",
# ai_chat.mojom depends on these mojom files, even though they aren't used directly on settings
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/common.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/customization_settings.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/tab_tracker.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/untrusted_frame.mojom-webui.ts",
"$root_gen_dir/brave/components/brave_account/mojom/brave_account_settings_handler.mojom-webui.ts",
"$root_gen_dir/brave/components/brave_origin/common/mojom/brave_origin_settings.mojom-webui.ts",
@@ -207,7 +204,6 @@ brave_settings_mojo_files = [
]
brave_settings_mojo_files_deps = [
"//brave/components/ai_chat/core/common/mojom:mojom_ts__generator",
"//brave/components/brave_account/mojom:mojom_ts__generator",
"//brave/components/brave_origin/common/mojom:mojom_ts__generator",
@@ -216,6 +212,23 @@ brave_settings_mojo_files_deps = [
"//brave/components/resources:strings",
]
if (enable_ai_chat) {
brave_settings_mojo_files += [
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/settings_helper.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/ai_chat.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/bookmarks.mojom-webui.ts",
# ai_chat.mojom depends on these mojom files, even though they aren't used directly on settings
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/common.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/customization_settings.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/tab_tracker.mojom-webui.ts",
"$root_gen_dir/brave/components/ai_chat/core/common/mojom/untrusted_frame.mojom-webui.ts",
]
brave_settings_mojo_files_deps +=
[ "//brave/components/ai_chat/core/common/mojom:mojom_ts__generator" ]
}
brave_settings_ts_deps = [
"//third_party/lit/v3_0:build_ts",
"//ui/webui/resources/mojo:build_ts",
+24 -12
View File
@@ -117,8 +117,6 @@ brave_chrome_browser_deps = [
"//brave/app:brave_generated_resources_grit",
"//brave/browser:browser_process",
"//brave/browser:sparkle_buildflags",
"//brave/browser/ai_chat",
"//brave/browser/ai_chat/ollama",
"//brave/browser/brave_account",
"//brave/browser/brave_adaptive_captcha",
"//brave/browser/brave_adaptive_captcha:impl",
@@ -145,15 +143,11 @@ brave_chrome_browser_deps = [
"//brave/browser/themes",
"//brave/browser/ui",
"//brave/browser/ui/webui/ads_internals",
"//brave/browser/ui/webui/ai_chat",
"//brave/browser/ui/webui/brave_account",
"//brave/browser/updater:buildflags",
"//brave/common",
"//brave/common:mojo_bindings",
"//brave/components/ai_chat/content/browser",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/mojom",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/ai_rewriter/common/buildflags",
"//brave/components/body_sniffer",
"//brave/components/brave_account",
@@ -316,7 +310,6 @@ if (!is_android) {
]
brave_chrome_browser_deps += [
"//brave/browser/ui/ai_chat",
"//brave/browser/ui/tabs:impl",
"//brave/browser/ui/webui/brave_new_tab_page_refresh",
"//brave/browser/ui/webui/brave_new_tab_page_refresh:mojom",
@@ -336,7 +329,23 @@ if (enable_brave_education) {
brave_chrome_browser_deps += [ "//brave/browser/ui/webui/brave_education" ]
}
if (is_android) {
if (enable_ai_chat) {
brave_chrome_browser_deps += [
"//brave/browser/ai_chat",
"//brave/browser/ai_chat/ollama",
"//brave/browser/ui/webui/ai_chat",
"//brave/components/ai_chat/content/browser",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/mojom",
]
if (!is_android) {
brave_chrome_browser_deps += [ "//brave/browser/ui/ai_chat" ]
}
}
if (enable_ai_chat && is_android) {
brave_chrome_browser_sources += brave_browser_ai_chat_android_sources
brave_chrome_browser_deps += brave_browser_ai_chat_android_deps
}
@@ -649,11 +658,14 @@ brave_chrome_browser_allow_circular_includes_from = [
"//brave/browser/brave_ads/creatives/search_result_ad",
"//brave/browser/brave_stats",
"//brave/browser/ntp_background",
]
if (enable_ai_chat) {
# TODO(https://github.com/brave/brave-browser/issues/50507):
# Remove this once webui/ai_chat does not depend on chrome/browser.
"//brave/browser/ui/webui/ai_chat",
]
brave_chrome_browser_allow_circular_includes_from +=
[ "//brave/browser/ui/webui/ai_chat" ]
}
if (enable_brave_ai_chat_agent_profile) {
brave_chrome_browser_deps +=
@@ -684,7 +696,7 @@ if (enable_extensions) {
[ "//brave/browser/extensions:brave_prefs_util_impl" ]
}
if (enable_print_preview) {
if (enable_ai_chat && enable_print_preview) {
brave_chrome_browser_deps += [
"//brave/browser/ai_chat:print_preview_extractor",
"//brave/browser/ai_chat:print_preview_extractor_internal",
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
import("//build/config/ui.gni")
@@ -49,7 +50,7 @@ if (!is_android) {
"//brave/browser/speedreader",
"//brave/browser/ui/speedreader",
"//brave/browser/ui/views/frame/split_view",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_wallet/browser:utils",
"//chrome/browser/ui",
"//chrome/browser/ui:ui_features",
@@ -60,5 +61,9 @@ if (!is_android) {
"//content/test:test_support",
"//net:test_support",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
}
}
+13 -3
View File
@@ -27,7 +27,7 @@
#include "brave/browser/ui/views/frame/split_view/brave_multi_contents_view.h"
#include "brave/browser/ui/webui/speedreader/speedreader_toolbar_data_handler_impl.h"
#include "brave/common/pref_names.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
#include "brave/components/constants/brave_paths.h"
#include "brave/components/speedreader/common/features.h"
@@ -66,6 +66,10 @@
#include "services/network/public/cpp/network_switches.h"
#include "ui/events/base_event_utils.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/features.h"
#endif
constexpr char kTestHost[] = "a.test";
constexpr char kTestPageSimple[] = "/simple.html";
constexpr char kTestPageReadable[] = "/speedreader/article/guardian.html";
@@ -95,8 +99,12 @@ class SpeedReaderBrowserTest : public InProcessBrowserTest {
: https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {
feature_list_.InitWithFeaturesAndParameters(
{{speedreader::features::kSpeedreaderFeature,
{{speedreader::features::kSpeedreaderTTS.name, "true"}}},
{ai_chat::features::kAIChat, {{}}}},
{{speedreader::features::kSpeedreaderTTS.name, "true"}}}
#if BUILDFLAG(ENABLE_AI_CHAT)
,
{ai_chat::features::kAIChat, {{}}}
#endif
},
{});
}
@@ -835,6 +843,7 @@ IN_PROC_BROWSER_TEST_F(SpeedReaderBrowserTest, Toolbar) {
auto* toolbar = toolbar_view->GetWebContentsForTesting();
WaitElement(toolbar, "appearance");
#if BUILDFLAG(ENABLE_AI_CHAT)
Click(toolbar, "ai");
auto* side_panel = browser()->GetFeatures().side_panel_ui();
while (side_panel->GetCurrentEntryId() != SidePanelEntryId::kChatUI) {
@@ -846,6 +855,7 @@ IN_PROC_BROWSER_TEST_F(SpeedReaderBrowserTest, Toolbar) {
NonBlockingDelay(base::Milliseconds(10));
}
EXPECT_FALSE(side_panel->GetCurrentEntryId().has_value());
#endif
Click(toolbar, "appearance");
{ // change theme
+23 -8
View File
@@ -57,7 +57,6 @@ source_set("ui") {
deps = [
"//brave/brave_domains",
"//brave/browser/ai_chat",
"//brave/browser/brave_adaptive_captcha",
"//brave/browser/brave_ads",
"//brave/browser/brave_origin",
@@ -65,6 +64,7 @@ source_set("ui") {
"//brave/browser/skus",
"//brave/browser/ui/page_info",
"//brave/browser/ui/webui/brave_account",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_origin",
"//brave/components/brave_private_cdn",
"//brave/components/brave_shields/core/browser",
@@ -117,6 +117,21 @@ source_set("ui") {
"webui/untrusted_sanitized_image_source.h",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
if (!is_android) {
sources += [
"webui/settings/brave_settings_leo_assistant_handler.cc",
"webui/settings/brave_settings_leo_assistant_handler.h",
]
deps += [
"//brave/browser/ai_chat",
"//brave/components/ai_chat/core/browser",
]
}
}
# It doesn't make sense to view the webcompat webui on iOS & Android.
if (!is_android && !is_ios) {
sources += [
@@ -277,8 +292,6 @@ source_set("ui") {
"webui/settings/brave_privacy_handler.h",
"webui/settings/brave_search_engines_handler.cc",
"webui/settings/brave_search_engines_handler.h",
"webui/settings/brave_settings_leo_assistant_handler.cc",
"webui/settings/brave_settings_leo_assistant_handler.h",
"webui/settings/brave_settings_localized_strings_provider.cc",
"webui/settings/brave_settings_localized_strings_provider.h",
"webui/settings/brave_site_settings_handler.cc",
@@ -596,8 +609,6 @@ source_set("ui") {
"views/tabs/switches.h",
"views/tabs/vertical_tab_utils.cc",
"views/tabs/vertical_tab_utils.h",
"views/toolbar/ai_chat_button.cc",
"views/toolbar/ai_chat_button.h",
"views/toolbar/bookmark_button.cc",
"views/toolbar/bookmark_button.h",
"views/toolbar/brave_app_menu.cc",
@@ -721,6 +732,13 @@ source_set("ui") {
if (enable_tor) {
deps += [ "//brave/browser/tor" ]
}
if (enable_ai_chat) {
sources += [
"views/toolbar/ai_chat_button.cc",
"views/toolbar/ai_chat_button.h",
]
}
}
if (is_win || is_mac || is_linux) {
@@ -780,9 +798,6 @@ source_set("ui") {
# to pull in dependencies needed for the overwrite codes in chromium_src.
"//brave/chromium_src/chrome/browser/ui",
"//brave/common",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/ai_rewriter/common/buildflags",
"//brave/components/brave_adaptive_captcha",
"//brave/components/brave_adblock_ui:generated_resources",
+3
View File
@@ -3,8 +3,11 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//pdf/features.gni")
assert(enable_ai_chat)
if (!is_android) {
source_set("ai_chat") {
sources = [
+7 -1
View File
@@ -6,7 +6,7 @@
#include "brave/browser/ui/brave_browser_actions.h"
#include "base/types/to_address.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/playlist/core/common/features.h"
#include "brave/components/vector_icons/vector_icons.h"
#include "chrome/browser/profiles/profile.h"
@@ -19,6 +19,10 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/vector_icon_types.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#endif
namespace {
actions::ActionItem::ActionItemBuilder SidePanelAction(
@@ -58,6 +62,7 @@ void BraveBrowserActions::InitializeBrowserActions() {
.Build());
}
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat::IsAIChatEnabled(profile_->GetPrefs())) {
root_action_item_->AddChild(
SidePanelAction(SidePanelEntryId::kChatUI, IDS_CHAT_UI_TITLE,
@@ -65,4 +70,5 @@ void BraveBrowserActions::InitializeBrowserActions() {
kActionSidePanelShowChatUI, bwi, true)
.Build());
}
#endif
}
+14 -4
View File
@@ -15,15 +15,12 @@
#include "base/notreached.h"
#include "base/types/to_address.h"
#include "brave/app/brave_command_ids.h"
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/profiles/profile_util.h"
#include "brave/browser/ui/brave_pages.h"
#include "brave/browser/ui/browser_commands.h"
#include "brave/browser/ui/sidebar/sidebar_utils.h"
#include "brave/browser/ui/tabs/features.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/rewards_util.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
@@ -51,6 +48,13 @@
#include "components/sync/base/command_line_switches.h"
#include "content/public/browser/web_contents.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/brave_vpn_service_factory.h"
#include "brave/browser/brave_vpn/vpn_utils.h"
@@ -233,6 +237,7 @@ void BraveBrowserCommandController::InitBraveCommandState() {
UpdateCommandForWaybackMachine();
pref_change_registrar_.Init(browser_->profile()->GetPrefs());
#if BUILDFLAG(ENABLE_AI_CHAT)
UpdateCommandForAIChat();
if (ai_chat::IsAllowedForContext(browser_->profile(), false)) {
pref_change_registrar_.Add(
@@ -241,6 +246,7 @@ void BraveBrowserCommandController::InitBraveCommandState() {
&BraveBrowserCommandController::UpdateCommandForAIChat,
base::Unretained(this)));
}
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
if (brave_vpn::IsAllowedForContext(browser_->profile())) {
@@ -352,6 +358,7 @@ void BraveBrowserCommandController::UpdateCommandForSidebar() {
}
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BraveBrowserCommandController::UpdateCommandForAIChat() {
// AI Chat command implementation needs sidebar
bool allowed_for_context = ai_chat::IsAllowedForContext(browser_->profile());
@@ -361,6 +368,7 @@ void BraveBrowserCommandController::UpdateCommandForAIChat() {
IDC_OPEN_FULL_PAGE_CHAT,
ai_chat::features::IsAIChatHistoryEnabled() && allowed_for_context);
}
#endif
void BraveBrowserCommandController::UpdateCommandForBraveVPN() {
#if BUILDFLAG(ENABLE_BRAVE_VPN)
@@ -537,12 +545,14 @@ bool BraveBrowserCommandController::ExecuteBraveCommandWithDisposition(
case IDC_SHOW_BRAVE_WALLET:
brave::ShowBraveWallet(&*browser_);
break;
#if BUILDFLAG(ENABLE_AI_CHAT)
case IDC_TOGGLE_AI_CHAT:
brave::ToggleAIChat(&*browser_);
break;
case IDC_OPEN_FULL_PAGE_CHAT:
brave::ShowFullpageChat(&*browser_);
break;
#endif
case IDC_SPEEDREADER_ICON_ONCLICK:
brave::MaybeDistillAndShowSpeedreaderBubble(&*browser_);
break;
@@ -15,7 +15,7 @@
#include "brave/app/brave_command_ids.h"
#include "brave/browser/ui/browser_commands.h"
#include "brave/browser/ui/views/tabs/vertical_tab_utils.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/skus/common/features.h"
#include "brave/components/tor/buildflags/buildflags.h"
@@ -41,6 +41,10 @@
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#endif
#if BUILDFLAG(ENABLE_TOR)
#include "brave/browser/tor/tor_profile_service_factory.h"
#endif
@@ -79,6 +83,7 @@ class BraveBrowserCommandControllerTest : public InProcessBrowserTest {
policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BlockAIChatByPolicy(bool value) {
policy::PolicyMap policies;
policies.Set(policy::key::kBraveAIChatEnabled,
@@ -88,6 +93,7 @@ class BraveBrowserCommandControllerTest : public InProcessBrowserTest {
EXPECT_EQ(ai_chat::IsAIChatEnabled(browser()->profile()->GetPrefs()),
!value);
}
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
void BlockVPNByPolicy(bool value) {
@@ -264,7 +270,9 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
EXPECT_TRUE(command_controller->IsCommandEnabled(IDC_OPEN_GUEST_PROFILE));
EXPECT_TRUE(
command_controller->IsCommandEnabled(IDC_SHOW_BRAVE_WEBCOMPAT_REPORTER));
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_FALSE(command_controller->IsCommandEnabled(IDC_TOGGLE_AI_CHAT));
#endif
}
// Create guest browser and test its brave commands status.
@@ -293,7 +301,9 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
EXPECT_FALSE(command_controller->IsCommandEnabled(IDC_OPEN_GUEST_PROFILE));
EXPECT_TRUE(
command_controller->IsCommandEnabled(IDC_SHOW_BRAVE_WEBCOMPAT_REPORTER));
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_FALSE(command_controller->IsCommandEnabled(IDC_TOGGLE_AI_CHAT));
#endif
}
// Launch tor window and check its command status.
@@ -324,7 +334,9 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
EXPECT_TRUE(command_controller->IsCommandEnabled(IDC_OPEN_GUEST_PROFILE));
EXPECT_TRUE(
command_controller->IsCommandEnabled(IDC_SHOW_BRAVE_WEBCOMPAT_REPORTER));
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_FALSE(command_controller->IsCommandEnabled(IDC_TOGGLE_AI_CHAT));
#endif
// Check tor commands when tor is disabled.
TorProfileServiceFactory::SetTorDisabled(true);
@@ -336,6 +348,7 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
}
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
ToggleAIChat_ControlledByPolicy) {
auto* command_controller = browser()->command_controller();
@@ -349,6 +362,7 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
BlockAIChatByPolicy(false);
EXPECT_TRUE(command_controller->IsCommandEnabled(IDC_TOGGLE_AI_CHAT));
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
BraveCommandsCloseTabsToLeft) {
@@ -444,7 +458,7 @@ IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
}
}
#if defined(TOOLKIT_VIEWS)
#if defined(TOOLKIT_VIEWS) && BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(BraveBrowserCommandControllerTest,
BraveCommandsToggleAIChat) {
SidePanelEntryKey ai_chat_key =
@@ -18,18 +18,23 @@
#include "brave/browser/misc_metrics/profile_misc_metrics_service_factory.h"
#include "brave/browser/ui/commander/command_source.h"
#include "brave/browser/ui/commander/fuzzy_finder.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/accelerator_utils.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "ui/base/accelerators/accelerator.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
namespace commander {
namespace {
void MaybeReportCommandExecution(Browser* browser, int command_id) {
#if BUILDFLAG(ENABLE_AI_CHAT)
if (command_id == IDC_TOGGLE_AI_CHAT) {
auto* profile_metrics =
misc_metrics::ProfileMiscMetricsServiceFactory::GetServiceForContext(
@@ -44,6 +49,7 @@ void MaybeReportCommandExecution(Browser* browser, int command_id) {
ai_chat_metrics->HandleOpenViaEntryPoint(
ai_chat::EntryPoint::kOmniboxCommand);
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
}
} // namespace
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
@@ -16,7 +17,7 @@ source_set("unit_tests") {
deps = [
"//base",
"//brave/app:generate_command_metadata",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_news/common",
"//brave/components/brave_rewards/core",
"//brave/components/brave_vpn/common/buildflags",
@@ -34,6 +35,10 @@ source_set("unit_tests") {
"//testing/gtest",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
if (enable_brave_vpn) {
deps += [ "//brave/components/brave_vpn/common" ]
}
+7 -1
View File
@@ -17,7 +17,7 @@
#include "base/containers/map_util.h"
#include "brave/app/brave_command_ids.h"
#include "brave/app/command_utils.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
@@ -37,6 +37,10 @@
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "ui/base/accelerators/accelerator.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_TOR)
#include "brave/components/tor/pref_names.h"
#endif
@@ -417,9 +421,11 @@ bool AcceleratorService::IsCommandDisabledByPolicy(int command_id) const {
case IDC_SHOW_BRAVE_REWARDS:
case IDC_OFFERS_AND_REWARDS_FOR_PAGE:
return pref_service_->GetBoolean(brave_rewards::prefs::kDisabledByPolicy);
#if BUILDFLAG(ENABLE_AI_CHAT)
case IDC_TOGGLE_AI_CHAT:
case IDC_OPEN_FULL_PAGE_CHAT:
return !pref_service_->GetBoolean(ai_chat::prefs::kEnabledByPolicy);
#endif
case IDC_NEW_OFFTHERECORD_WINDOW_TOR:
case IDC_NEW_TOR_CONNECTION_FOR_SITE:
#if BUILDFLAG(ENABLE_TOR)
@@ -7,6 +7,7 @@
#include "base/test/scoped_feature_list.h"
#include "brave/app/brave_command_ids.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
@@ -344,6 +345,7 @@ TEST_F(AcceleratorServiceUnitTest, PolicyFiltering) {
false);
EXPECT_FALSE(service.IsCommandDisabledByPolicy(IDC_SHOW_BRAVE_REWARDS));
#if BUILDFLAG(ENABLE_AI_CHAT)
// Test AI Chat (reverse logic - disabled when pref is false)
const std::vector<int> ai_chat_commands = {IDC_TOGGLE_AI_CHAT,
IDC_OPEN_FULL_PAGE_CHAT};
@@ -361,6 +363,7 @@ TEST_F(AcceleratorServiceUnitTest, PolicyFiltering) {
for (int command : ai_chat_commands) {
EXPECT_TRUE(service.IsCommandDisabledByPolicy(command));
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_SPEEDREADER)
// Test Speedreader
@@ -392,7 +395,9 @@ TEST_F(AcceleratorServiceUnitTest, PolicyFiltering) {
{IDC_NEW_TAB, {commands::FromCodesString("Control+KeyT")}},
{IDC_CONFIGURE_BRAVE_NEWS, {commands::FromCodesString("Control+KeyN")}},
{IDC_SHOW_BRAVE_WALLET, {commands::FromCodesString("Control+KeyW")}},
#if BUILDFLAG(ENABLE_AI_CHAT)
{IDC_TOGGLE_AI_CHAT, {commands::FromCodesString("Control+KeyC")}},
#endif
};
// Disable some features and test filtering
@@ -400,31 +405,48 @@ TEST_F(AcceleratorServiceUnitTest, PolicyFiltering) {
brave_news::prefs::kBraveNewsDisabledByPolicy, true);
profile().GetPrefs()->SetBoolean(brave_wallet::prefs::kDisabledByPolicy,
true);
#if BUILDFLAG(ENABLE_AI_CHAT)
profile().GetPrefs()->SetBoolean(ai_chat::prefs::kEnabledByPolicy,
false); // Disable AI Chat
#endif
auto filtered = service.FilterCommandsByPolicy(test_accelerators);
#if BUILDFLAG(ENABLE_AI_CHAT)
// Only IDC_NEW_TAB should remain (not policy-controlled)
EXPECT_EQ(1u, filtered.size());
#else
// IDC_NEW_TAB should remain (AI Chat not included)
EXPECT_EQ(1u, filtered.size());
#endif
EXPECT_TRUE(filtered.contains(IDC_NEW_TAB));
EXPECT_FALSE(filtered.contains(IDC_CONFIGURE_BRAVE_NEWS));
EXPECT_FALSE(filtered.contains(IDC_SHOW_BRAVE_WALLET));
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_FALSE(filtered.contains(IDC_TOGGLE_AI_CHAT));
#endif
// Re-enable commands and test again
profile().GetPrefs()->SetBoolean(
brave_news::prefs::kBraveNewsDisabledByPolicy, false);
profile().GetPrefs()->SetBoolean(brave_wallet::prefs::kDisabledByPolicy,
false);
#if BUILDFLAG(ENABLE_AI_CHAT)
profile().GetPrefs()->SetBoolean(ai_chat::prefs::kEnabledByPolicy, true);
#endif
filtered = service.FilterCommandsByPolicy(test_accelerators);
// All commands should be present now
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_EQ(4u, filtered.size());
#else
EXPECT_EQ(3u, filtered.size());
#endif
EXPECT_TRUE(filtered.contains(IDC_NEW_TAB));
EXPECT_TRUE(filtered.contains(IDC_CONFIGURE_BRAVE_NEWS));
EXPECT_TRUE(filtered.contains(IDC_SHOW_BRAVE_WALLET));
#if BUILDFLAG(ENABLE_AI_CHAT)
EXPECT_TRUE(filtered.contains(IDC_TOGGLE_AI_CHAT));
#endif
}
class AcceleratorServiceUnitTestWithLocalState : public testing::Test {
+12 -5
View File
@@ -3,14 +3,17 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/containers/buildflags/buildflags.gni")
import("//brave/components/speedreader/common/buildflags/buildflags.gni")
import("//build/config/ui.gni")
brave_ui_allow_circular_includes_from = [
"//brave/browser/ui/webui/ads_internals",
"//brave/browser/ui/webui/ai_chat",
]
brave_ui_allow_circular_includes_from =
[ "//brave/browser/ui/webui/ads_internals" ]
if (enable_ai_chat) {
brave_ui_allow_circular_includes_from +=
[ "//brave/browser/ui/webui/ai_chat" ]
}
if (!is_android) {
brave_ui_allow_circular_includes_from += [
"//brave/browser/ui/browser_window/internal",
@@ -32,10 +35,14 @@ if (toolkit_views) {
"//brave/browser/ui/views/frame/split_view",
"//brave/browser/ui/views/frame/vertical_tabs",
"//brave/browser/ui/views/page_info",
"//brave/browser/ui/views/side_panel/ai_chat",
"//brave/browser/ui/sidebar",
]
if (enable_ai_chat) {
brave_ui_allow_circular_includes_from +=
[ "//brave/browser/ui/views/side_panel/ai_chat" ]
}
if (enable_containers) {
brave_ui_allow_circular_includes_from += [ "//brave/browser/ui/containers" ]
}
@@ -13,7 +13,7 @@
#include "brave/browser/misc_metrics/profile_misc_metrics_service.h"
#include "brave/browser/misc_metrics/profile_misc_metrics_service_factory.h"
#include "brave/browser/search_engines/search_engine_tracker.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_rewards/core/pref_names.h"
#include "brave/components/brave_search_conversion/p3a.h"
#include "brave/components/brave_search_conversion/utils.h"
@@ -29,6 +29,10 @@
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#endif
namespace {
using brave_search_conversion::ConversionType;
@@ -78,6 +82,7 @@ BraveOmniboxClientImpl::BraveOmniboxClientImpl(LocationBar* location_bar,
// Record initial search count p3a value.
RecordSearchEventP3A();
#if BUILDFLAG(ENABLE_AI_CHAT)
auto* profile_metrics =
misc_metrics::ProfileMiscMetricsServiceFactory::GetServiceForContext(
profile);
@@ -85,6 +90,7 @@ BraveOmniboxClientImpl::BraveOmniboxClientImpl(LocationBar* location_bar,
ai_chat_metrics_ = profile_metrics->GetAIChatMetrics();
CHECK(ai_chat_metrics_);
}
#endif
pref_change_registrar_.Init(profile_->GetPrefs());
pref_change_registrar_.Add(
@@ -139,9 +145,11 @@ void BraveOmniboxClientImpl::OnAutocompleteAccept(
if (search_engine_tracker_ != nullptr) {
search_engine_tracker_->RecordLocationBarQuery();
}
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat_metrics_) {
ai_chat_metrics_->RecordOmniboxSearchQuery();
}
#endif
}
ChromeOmniboxClient::OnAutocompleteAccept(
destination_url, post_content, disposition, transition, match_type,
+6 -1
View File
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//build/config/ui.gni")
import("//extensions/buildflags/buildflags.gni")
@@ -64,7 +65,7 @@ source_set("browser_tests") {
"//base",
"//brave/app:command_ids",
"//brave/browser/ui/views/frame/split_view",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/playlist/core/common",
"//brave/components/sidebar/browser",
"//brave/components/sidebar/common",
@@ -84,6 +85,10 @@ source_set("browser_tests") {
"//ui/events:test_support",
"//ui/gfx",
]
if (enable_ai_chat) {
deps += [ "//brave/components/ai_chat/core/common" ]
}
}
source_set("unit_tests") {
+20 -3
View File
@@ -37,7 +37,7 @@
#include "brave/browser/ui/views/toolbar/brave_toolbar_view.h"
#include "brave/browser/ui/views/toolbar/side_panel_button.h"
#include "brave/common/pref_names.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/constants/brave_switches.h"
#include "brave/components/playlist/core/common/features.h"
#include "brave/components/sidebar/browser/constants.h"
@@ -75,6 +75,10 @@
#include "ui/gfx/animation/animation_test_api.h"
#include "ui/gfx/geometry/point.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/features.h"
#endif
using ::testing::Eq;
using ::testing::Ne;
using ::testing::Optional;
@@ -269,9 +273,11 @@ class SidebarBrowserTest : public InProcessBrowserTest {
item_count -= 1;
}
#if BUILDFLAG(ENABLE_AI_CHAT)
if (!ai_chat::features::IsAIChatEnabled()) {
item_count -= 1;
}
#endif
return item_count;
}
@@ -367,6 +373,10 @@ IN_PROC_BROWSER_TEST_F(SidebarBrowserTest, BasicTest) {
EXPECT_EQ(expected_count, model()->GetAllSidebarItems().size());
EXPECT_THAT(model()->active_index(), Optional(active_item_index));
// Navigate to a non-NTP page first to ensure we can add it to sidebar
ASSERT_TRUE(
ui_test_utils::NavigateToURL(browser(), GURL("brave://settings/")));
// If current active tab is not NTP, we can add current url to sidebar.
EXPECT_TRUE(CanAddCurrentActiveTabToSidebar(browser()));
@@ -1160,7 +1170,8 @@ IN_PROC_BROWSER_TEST_F(SidebarBrowserTest, TabSpecificAndGlobalPanelsTest) {
tab_model()->ActivateTabAt(0);
ASSERT_TRUE(
ui_test_utils::NavigateToURL(browser(), GURL("chrome://new-tab-page/")));
panel_ui->Show(SidePanelEntryId::kChatUI);
panel_ui->Show(SidePanelEntryId::kCustomizeChrome);
WaitUntil(base::BindLambdaForTesting(
[&]() { return GetSidePanel()->GetVisible(); }));
@@ -1177,7 +1188,7 @@ IN_PROC_BROWSER_TEST_F(SidebarBrowserTest, TabSpecificAndGlobalPanelsTest) {
// Contextual panel should be set when activate tab at 0.
tab_model()->ActivateTabAt(0);
WaitUntil(base::BindLambdaForTesting([&]() {
return panel_ui->GetCurrentEntryId() == SidePanelEntryId::kChatUI;
return panel_ui->GetCurrentEntryId() == SidePanelEntryId::kCustomizeChrome;
}));
// Global panel should be set when activate tab at 1.
@@ -1240,6 +1251,7 @@ class MockSidebarModelObserver : public SidebarModel::Observer {
(override));
};
#if BUILDFLAG(ENABLE_AI_CHAT)
class SidebarBrowserTestWithkSidebarShowAlwaysOnStable
: public testing::WithParamInterface<bool>,
public SidebarBrowserTest {
@@ -1341,6 +1353,7 @@ INSTANTIATE_TEST_SUITE_P(
/* no prefix */,
SidebarBrowserTestWithkSidebarShowAlwaysOnStable,
::testing::Bool());
#endif // BUILDFLAG(ENABLE_AI_CHAT)
class SidebarBrowserTestWithPlaylist : public SidebarBrowserTest {
public:
@@ -1380,6 +1393,8 @@ IN_PROC_BROWSER_TEST_F(SidebarBrowserTestWithPlaylist, Incognito) {
sidebar_service->RemoveItemAt(0);
}
#if BUILDFLAG(ENABLE_AI_CHAT)
class SidebarBrowserTestWithAIChat : public SidebarBrowserTest {
public:
SidebarBrowserTestWithAIChat() {
@@ -1558,6 +1573,8 @@ IN_PROC_BROWSER_TEST_F(SidebarBrowserTestWithAIChat,
EXPECT_EQ(model()->active_index(), new_global_item_index);
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(SidebarBrowserTest, SidebarRightSideTest) {
// Sidebar is on right by default
EXPECT_FALSE(IsSidebarUIOnLeft());
+3
View File
@@ -15,6 +15,7 @@
#include "brave/browser/ui/sidebar/sidebar_service_factory.h"
#include "brave/browser/ui/sidebar/sidebar_utils.h"
#include "brave/browser/ui/sidebar/sidebar_web_panel_controller.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/sidebar/browser/pref_names.h"
#include "brave/components/sidebar/browser/sidebar_service.h"
#include "brave/components/sidebar/common/features.h"
@@ -118,11 +119,13 @@ void SidebarController::ActivateItemAt(std::optional<size_t> index,
if (!item.is_web_type() && item.open_in_panel) {
sidebar_model_->SetActiveIndex(index);
#if BUILDFLAG(ENABLE_AI_CHAT)
if (sidebar::features::kOpenOneShotLeoPanel.Get() &&
item.built_in_item_type == SidebarItem::BuiltInItemType::kChatUI) {
// Prevent one-time Leo panel open.
profile_->GetPrefs()->SetBoolean(kLeoPanelOneShotOpen, true);
}
#endif
return;
}
@@ -9,6 +9,7 @@
#include <memory>
#include <vector>
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/sidebar/browser/sidebar_item.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
#include "components/keyed_service/core/keyed_service.h"
@@ -35,7 +36,9 @@ class SidebarServiceFactory : public BrowserContextKeyedServiceFactory {
// This is the default display order
static constexpr SidebarItem::BuiltInItemType kDefaultBuiltInItemTypes[] = {
#if BUILDFLAG(ENABLE_AI_CHAT)
SidebarItem::BuiltInItemType::kChatUI,
#endif
SidebarItem::BuiltInItemType::kBraveTalk,
SidebarItem::BuiltInItemType::kWallet,
SidebarItem::BuiltInItemType::kBookmarks,
+9 -1
View File
@@ -13,6 +13,7 @@
#include "brave/browser/ui/sidebar/sidebar_model.h"
#include "brave/browser/ui/sidebar/sidebar_service_factory.h"
#include "brave/browser/ui/sidebar/sidebar_utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/constants/webui_url_constants.h"
#include "brave/components/sidebar/browser/constants.h"
#include "brave/components/sidebar/browser/sidebar_service.h"
@@ -208,11 +209,18 @@ TEST_F(SidebarModelTest, ActiveIndexChangedAfterItemAdded) {
EXPECT_THAT(model()->active_index(), Optional(2u));
}
// Check Leo item is top-most item.
// Check that the expected item is top-most.
TEST_F(SidebarModelTest, TopItemTest) {
const auto first_item = service()->items()[0];
#if BUILDFLAG(ENABLE_AI_CHAT)
// Leo should be the top item when AI Chat is enabled.
EXPECT_EQ(first_item.built_in_item_type,
SidebarItem::BuiltInItemType::kChatUI);
#else
// Brave Talk should be the top item when AI Chat is disabled.
EXPECT_EQ(first_item.built_in_item_type,
SidebarItem::BuiltInItemType::kBraveTalk);
#endif
}
TEST(SidebarUtilTest, SidebarShowOptionsDefaultTest) {
+11
View File
@@ -14,6 +14,7 @@
#include "brave/browser/ui/sidebar/sidebar_controller.h"
#include "brave/browser/ui/sidebar/sidebar_model.h"
#include "brave/browser/ui/sidebar/sidebar_service_factory.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/constants/brave_switches.h"
#include "brave/components/constants/webui_url_constants.h"
#include "brave/components/sidebar/browser/constants.h"
@@ -140,8 +141,10 @@ SidePanelEntryId SidePanelIdFromSideBarItemType(BuiltInItemType type) {
return SidePanelEntryId::kBookmarks;
case BuiltInItemType::kPlaylist:
return SidePanelEntryId::kPlaylist;
#if BUILDFLAG(ENABLE_AI_CHAT)
case BuiltInItemType::kChatUI:
return SidePanelEntryId::kChatUI;
#endif
case BuiltInItemType::kWallet:
[[fallthrough]];
case BuiltInItemType::kBraveTalk:
@@ -165,8 +168,10 @@ std::optional<BuiltInItemType> BuiltInItemTypeFromSidePanelId(
return BuiltInItemType::kBookmarks;
case SidePanelEntryId::kPlaylist:
return BuiltInItemType::kPlaylist;
#if BUILDFLAG(ENABLE_AI_CHAT)
case SidePanelEntryId::kChatUI:
return BuiltInItemType::kChatUI;
#endif
default:
break;
}
@@ -212,9 +217,11 @@ void SetLastUsedSidePanel(PrefService* prefs,
case SidePanelEntryId::kPlaylist:
type = BuiltInItemType::kPlaylist;
break;
#if BUILDFLAG(ENABLE_AI_CHAT)
case SidePanelEntryId::kChatUI:
type = BuiltInItemType::kChatUI;
break;
#endif
default:
break;
}
@@ -236,7 +243,9 @@ std::optional<SidePanelEntryId> GetLastUsedSidePanel(Browser* browser) {
bool IsDisabledItemForPrivate(SidebarItem::BuiltInItemType type) {
switch (type) {
#if BUILDFLAG(ENABLE_AI_CHAT)
case SidebarItem::BuiltInItemType::kChatUI:
#endif
case SidebarItem::BuiltInItemType::kPlaylist:
return true;
default:
@@ -249,7 +258,9 @@ bool IsDisabledItemForGuest(SidebarItem::BuiltInItemType type) {
switch (type) {
case SidebarItem::BuiltInItemType::kBookmarks:
case SidebarItem::BuiltInItemType::kReadingList:
#if BUILDFLAG(ENABLE_AI_CHAT)
case SidebarItem::BuiltInItemType::kChatUI:
#endif
case SidebarItem::BuiltInItemType::kPlaylist:
return true;
default:
+7 -1
View File
@@ -3,6 +3,8 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
assert(is_win || is_mac || is_linux || is_chromeos || is_android)
# Note: Target names in this file should match those upstream where possible.
@@ -11,6 +13,7 @@ source_set("tabs_public") {
sources = [ "public/brave_tab_features.h" ]
public_deps = [
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/psst/buildflags",
"//chrome/browser/ui/tabs:tabs_public",
]
@@ -28,13 +31,16 @@ if (!is_android) {
deps = [
":tabs_public",
"//brave/browser/ai_chat",
"//brave/browser/psst",
"//brave/browser/ui/side_panel",
"//brave/components/psst/browser/content",
"//chrome/browser/profiles",
"//chrome/browser/ui/tabs:impl",
]
if (enable_ai_chat) {
deps += [ "//brave/browser/ai_chat" ]
}
}
# This source set is counterpart to the upstream `tab_strip` source set.
+8 -2
View File
@@ -11,14 +11,18 @@
#include "base/check.h"
#include "base/memory/ptr_util.h"
#include "base/no_destructor.h"
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/ai_chat/tab_data_web_contents_observer.h"
#include "brave/browser/ui/side_panel/brave_side_panel_utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tabs/public/tab_features.h"
#include "chrome/common/chrome_isolated_world_ids.h"
#include "components/tabs/public/tab_interface.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/ai_chat/tab_data_web_contents_observer.h"
#endif
#if BUILDFLAG(ENABLE_PSST)
#include "brave/browser/psst/psst_ui_delegate_impl.h"
#include "brave/components/psst/browser/content/psst_tab_web_contents_observer.h"
@@ -41,10 +45,12 @@ void BraveTabFeatures::Init(TabInterface& tab, Profile* profile) {
CHECK(side_panel_registry());
brave::RegisterContextualSidePanel(side_panel_registry(), tab.GetContents());
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat::IsAllowedForContext(profile)) {
tab_data_observer_ = std::make_unique<ai_chat::TabDataWebContentsObserver>(
tab.GetHandle().raw_value(), tab.GetContents());
}
#endif
#if BUILDFLAG(ENABLE_PSST)
psst_web_contents_observer_ =
@@ -8,14 +8,17 @@
#include <memory>
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/psst/buildflags/buildflags.h"
#include "chrome/browser/ui/tabs/public/tab_features.h"
class Profile;
#if BUILDFLAG(ENABLE_AI_CHAT)
namespace ai_chat {
class TabDataWebContentsObserver;
}
#endif
#if BUILDFLAG(ENABLE_PSST)
namespace psst {
@@ -42,7 +45,9 @@ class BraveTabFeatures : public TabFeatures {
#endif
private:
#if BUILDFLAG(ENABLE_AI_CHAT)
std::unique_ptr<ai_chat::TabDataWebContentsObserver> tab_data_observer_;
#endif
#if BUILDFLAG(ENABLE_PSST)
std::unique_ptr<psst::PsstTabWebContentsObserver> psst_web_contents_observer_;
#endif
+3
View File
@@ -9,6 +9,7 @@
#include "base/containers/map_util.h"
#include "base/no_destructor.h"
#include "brave/app/brave_command_ids.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/vector_icons/vector_icons.h"
#include "chrome/app/chrome_command_ids.h"
#include "ui/base/models/image_model.h"
@@ -31,7 +32,9 @@ constexpr auto kCommandIcons =
{IDC_NEW_OFFTHERECORD_WINDOW_TOR, &kLeoWindowTabTorIcon},
{IDC_SHOW_BRAVE_REWARDS, &kLeoProductBatOutlineIcon},
{IDC_SHOW_BRAVE_WALLET, &kLeoProductBraveWalletIcon},
#if BUILDFLAG(ENABLE_AI_CHAT)
{IDC_TOGGLE_AI_CHAT, &kLeoProductBraveLeoIcon},
#endif
{IDC_BRAVE_VPN_MENU, &kLeoProductVpnIcon},
{IDC_PASSWORDS_AND_AUTOFILL_MENU, &kLeoKeyIcon},
{IDC_RECENT_TABS_MENU, &kLeoHistoryIcon},
@@ -15,6 +15,7 @@
#include "base/notreached.h"
#include "brave/app/brave_command_ids.h"
#include "brave/browser/ui/toolbar/app_menu_icons.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/commander/common/buildflags/buildflags.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/profiles/profile.h"
@@ -145,11 +146,13 @@ void BraveAppMenuModel::BuildBraveProductsSection() {
// Needs to add separator as this section is brave specific section.
bool need_separator = false;
#if BUILDFLAG(ENABLE_AI_CHAT)
if (IsCommandIdEnabled(IDC_TOGGLE_AI_CHAT)) {
InsertItemWithStringIdAt(GetNextIndexOfBraveProductsSection(),
IDC_TOGGLE_AI_CHAT, IDS_TOGGLE_AI_CHAT);
need_separator = true;
}
#endif
if (IsCommandIdEnabled(IDC_SHOW_BRAVE_WALLET)) {
InsertItemWithStringIdAt(GetNextIndexOfBraveProductsSection(),
@@ -16,6 +16,7 @@
#include "brave/app/brave_command_ids.h"
#include "brave/browser/ui/brave_browser_command_controller.h"
#include "brave/browser/ui/browser_commands.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/skus/common/features.h"
#include "brave/components/tor/buildflags/buildflags.h"
@@ -169,7 +170,9 @@ IN_PROC_BROWSER_TEST_F(BraveAppMenuModelBrowserTest, MenuOrderTest) {
#if BUILDFLAG(ENABLE_TOR)
IDC_NEW_OFFTHERECORD_WINDOW_TOR,
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
IDC_TOGGLE_AI_CHAT,
#endif
IDC_SHOW_BRAVE_WALLET,
#if BUILDFLAG(ENABLE_BRAVE_VPN)
IDC_SHOW_BRAVE_VPN_PANEL,
@@ -8,10 +8,10 @@
#include "base/check.h"
#include "base/functional/bind.h"
#include "brave/browser/ui/views/location_bar/brave_search_conversion/promotion_button_view.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_search_conversion/features.h"
#include "brave/components/brave_search_conversion/pref_names.h"
#include "brave/components/brave_search_conversion/utils.h"
#include "brave/components/omnibox/browser/leo_provider.h"
#include "brave/components/omnibox/browser/promotion_utils.h"
#include "brave/components/search_engines/brave_prepopulated_engines.h"
#include "chrome/browser/image_fetcher/image_fetcher_service_factory.h"
@@ -32,6 +32,10 @@
#include "components/search_engines/template_url_service.h"
#include "ui/base/page_transition_types.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/omnibox/browser/leo_provider.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
namespace {
constexpr char kImageFetcherUmaClientName[] = "SearchPromotionButtonFavicon";
@@ -141,7 +145,9 @@ bool PromotionButtonController::ShouldShowSearchPromotionButton() {
const AutocompleteMatch match = omnibox_view_->model()->CurrentMatch(nullptr);
return !IsBraveSearchPromotionMatch(match) &&
#if BUILDFLAG(ENABLE_AI_CHAT)
!LeoProvider::IsMatchFromLeoProvider(match) &&
#endif // BUILDFLAG(ENABLE_AI_CHAT)
AutocompleteMatch::IsSearchType(match.type);
}
@@ -12,7 +12,7 @@
#include "brave/browser/ui/color/brave_color_id.h"
#include "brave/browser/ui/views/omnibox/brave_omnibox_popup_view_views.h"
#include "brave/browser/ui/views/omnibox/brave_search_conversion_promotion_view.h"
#include "brave/components/omnibox/browser/leo_provider.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/omnibox/browser/promotion_utils.h"
#include "brave/grit/brave_theme_resources.h"
#include "chrome/browser/browser_process.h"
@@ -40,6 +40,10 @@
#include "ui/views/layout/flex_layout_types.h"
#include "ui/views/view_class_properties.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/omnibox/browser/leo_provider.h"
#endif
BraveOmniboxResultView::~BraveOmniboxResultView() = default;
void BraveOmniboxResultView::ResetChildren() {
@@ -67,7 +71,9 @@ void BraveOmniboxResultView::SetMatch(const AutocompleteMatch& match) {
OmniboxResultView::SetMatch(match);
UpdateForBraveSearchConversion();
#if BUILDFLAG(ENABLE_AI_CHAT)
UpdateForLeoMatch();
#endif
}
void BraveOmniboxResultView::OnSelectionStateChanged() {
@@ -77,18 +83,22 @@ void BraveOmniboxResultView::OnSelectionStateChanged() {
}
gfx::Image BraveOmniboxResultView::GetIcon() const {
#if BUILDFLAG(ENABLE_AI_CHAT)
if (LeoProvider::IsMatchFromLeoProvider(match_)) {
// As Leo icon has gradient color, we can't use vector icon because it lacks
// of gradient color.
return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
IDR_LEO_FAVICON);
}
#endif
return OmniboxResultView::GetIcon();
}
void BraveOmniboxResultView::OnThemeChanged() {
OmniboxResultView::OnThemeChanged();
#if BUILDFLAG(ENABLE_AI_CHAT)
UpdateForLeoMatch();
#endif
}
void BraveOmniboxResultView::OpenMatch() {
@@ -144,6 +154,7 @@ void BraveOmniboxResultView::UpdateForBraveSearchConversion() {
HandleSelectionStateChangedForPromotionView();
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BraveOmniboxResultView::UpdateForLeoMatch() {
if (LeoProvider::IsMatchFromLeoProvider(match_)) {
constexpr int kLeoMatchPadding = 4;
@@ -182,13 +193,16 @@ void BraveOmniboxResultView::UpdateForLeoMatch() {
SetBorder(nullptr);
}
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
void BraveOmniboxResultView::OnPaintBackground(gfx::Canvas* canvas) {
gfx::ScopedCanvas scoped_canvas(canvas);
#if BUILDFLAG(ENABLE_AI_CHAT)
if (LeoProvider::IsMatchFromLeoProvider(match_)) {
// Clip upper padding
canvas->ClipRect(GetContentsBounds());
}
#endif
OmniboxResultView::OnPaintBackground(canvas);
}
@@ -7,6 +7,7 @@
#define BRAVE_BROWSER_UI_VIEWS_OMNIBOX_BRAVE_OMNIBOX_RESULT_VIEW_H_
#include "base/memory/raw_ptr.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/ui/views/omnibox/omnibox_result_view.h"
#include "ui/base/metadata/metadata_header_macros.h"
@@ -42,7 +43,9 @@ class BraveOmniboxResultView : public OmniboxResultView {
void ResetChildren();
void UpdateForBraveSearchConversion();
void HandleSelectionStateChangedForPromotionView();
#if BUILDFLAG(ENABLE_AI_CHAT)
void UpdateForLeoMatch();
#endif
// Brave search conversion promotion
raw_ptr<BraveSearchConversionPromotionView> brave_search_promotion_view_ =
@@ -3,6 +3,10 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
assert(enable_ai_chat)
source_set("ai_chat") {
sources = [
"ai_chat_side_panel_utils_views.cc",
@@ -3,11 +3,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/views/side_panel/side_panel_registry.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/ui/side_panel/ai_chat/ai_chat_side_panel_utils.h"
#include "brave/browser/ui/views/side_panel/ai_chat/ai_chat_side_panel_web_view.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/views/side_panel/side_panel_registry.h"
#endif
namespace brave {
@@ -16,6 +20,7 @@ namespace brave {
// registering it.
void RegisterContextualSidePanel(SidePanelRegistry* registry,
content::WebContents* web_contents) {
#if BUILDFLAG(ENABLE_AI_CHAT)
content::BrowserContext* context = web_contents->GetBrowserContext();
// Disable tab-scoped panel for content agent profiles.
// TODO(https://github.com/brave/brave-browser/issues/48526): Remove
@@ -30,6 +35,7 @@ void RegisterContextualSidePanel(SidePanelRegistry* registry,
/*is_tab_associated=*/true),
/*default_content_width_callback=*/base::NullCallback()));
}
#endif
}
} // namespace brave
@@ -29,8 +29,7 @@
#include "brave/browser/ui/views/sidebar/sidebar_edit_item_bubble_delegate_view.h"
#include "brave/browser/ui/views/sidebar/sidebar_item_added_feedback_bubble.h"
#include "brave/browser/ui/views/sidebar/sidebar_item_view.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/playlist/core/common/features.h"
#include "brave/components/sidebar/browser/pref_names.h"
#include "brave/components/sidebar/browser/sidebar_item.h"
@@ -60,6 +59,11 @@
#include "ui/views/controls/separator.h"
#include "ui/views/layout/box_layout.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/features.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
namespace {
constexpr gfx::Size kIconSize(SidebarButtonView::kExternalIconSize,
@@ -526,6 +530,7 @@ void SidebarItemsContentsView::OnItemPressed(const views::View* item,
}
if (!item_model.is_web_type() && item_model.open_in_panel) {
#if BUILDFLAG(ENABLE_AI_CHAT)
if (item_model.built_in_item_type ==
sidebar::SidebarItem::BuiltInItemType::kChatUI) {
auto* profile_metrics =
@@ -539,6 +544,7 @@ void SidebarItemsContentsView::OnItemPressed(const views::View* item,
}
}
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
controller->ActivatePanelItem(item_model.built_in_item_type);
return;
}
@@ -579,8 +585,10 @@ ui::ImageModel SidebarItemsContentsView::GetImageForBuiltInItems(
return get_image_model(kLeoHistoryIcon, state);
case sidebar::SidebarItem::BuiltInItemType::kPlaylist:
return get_image_model(kLeoProductPlaylistIcon, state);
#if BUILDFLAG(ENABLE_AI_CHAT)
case sidebar::SidebarItem::BuiltInItemType::kChatUI:
return get_image_model(kLeoProductBraveLeoIcon, state);
#endif
default:
break;
}
+7 -1
View File
@@ -22,7 +22,7 @@
#include "brave/browser/ui/color/brave_color_id.h"
#include "brave/browser/ui/sidebar/sidebar_service_factory.h"
#include "brave/browser/ui/toolbar/brave_app_menu_model.h"
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/misc_metrics/menu_metrics.h"
#include "brave/components/sidebar/browser/sidebar_service.h"
@@ -45,6 +45,10 @@
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/ai_chat_metrics.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/ui/views/toolbar/brave_vpn_status_label.h"
#include "brave/browser/ui/views/toolbar/brave_vpn_toggle_button.h"
@@ -234,6 +238,7 @@ void BraveAppMenu::OnMenuClosed(views::MenuItemView* menu) {
void BraveAppMenu::RecordMenuUsage(int command_id) {
misc_metrics::MenuGroup group;
#if BUILDFLAG(ENABLE_AI_CHAT)
if (command_id == IDC_TOGGLE_AI_CHAT) {
auto* profile_metrics =
misc_metrics::ProfileMiscMetricsServiceFactory::GetServiceForContext(
@@ -244,6 +249,7 @@ void BraveAppMenu::RecordMenuUsage(int command_id) {
ai_chat_metrics->HandleOpenViaEntryPoint(ai_chat::EntryPoint::kMenuItem);
}
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
switch (command_id) {
case IDC_NEW_WINDOW:
+11 -3
View File
@@ -13,16 +13,14 @@
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "brave/app/brave_command_ids.h"
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/brave_wallet/brave_wallet_context_utils.h"
#include "brave/browser/ui/tabs/brave_tab_prefs.h"
#include "brave/browser/ui/views/location_bar/brave_location_bar_view.h"
#include "brave/browser/ui/views/tabs/vertical_tab_utils.h"
#include "brave/browser/ui/views/toolbar/ai_chat_button.h"
#include "brave/browser/ui/views/toolbar/bookmark_button.h"
#include "brave/browser/ui/views/toolbar/side_panel_button.h"
#include "brave/browser/ui/views/toolbar/wallet_button.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/brave_wallet/browser/pref_names.h"
#include "brave/components/brave_wallet/common/common_utils.h"
@@ -47,6 +45,12 @@
#include "ui/events/event.h"
#include "ui/views/window/hit_test_utils.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_utils.h"
#include "brave/browser/ui/views/toolbar/ai_chat_button.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/brave_vpn_service_factory.h"
#include "brave/browser/ui/views/toolbar/brave_vpn_button.h"
@@ -266,6 +270,7 @@ void BraveToolbarView::Init() {
UpdateWalletButtonVisibility();
#if BUILDFLAG(ENABLE_AI_CHAT)
// Don't check policy status since we're going to
// setup a watcher for policy pref.
if (ai_chat::IsAllowedForContext(browser_->profile(), false)) {
@@ -283,6 +288,7 @@ void BraveToolbarView::Init() {
base::Unretained(this)));
UpdateAIChatButtonVisibility();
}
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
if (brave_vpn::BraveVpnServiceFactory::GetForProfile(profile)) {
@@ -518,11 +524,13 @@ void BraveToolbarView::ResetBookmarkButtonBounds() {
}
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BraveToolbarView::UpdateAIChatButtonVisibility() {
bool should_show = ai_chat::IsAllowedForContext(browser()->profile()) &&
show_ai_chat_button_.GetValue();
ai_chat_button_->SetVisible(should_show);
}
#endif
void BraveToolbarView::UpdateWalletButtonVisibility() {
Profile* profile = browser()->profile();
@@ -9,13 +9,16 @@
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "chrome/browser/profiles/profile_attributes_storage.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
#include "components/prefs/pref_member.h"
#include "ui/base/metadata/metadata_header_macros.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
class AIChatButton;
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
class BraveVPNButton;
@@ -37,7 +40,9 @@ class BraveToolbarView : public ToolbarView,
BraveBookmarkButton* bookmark_button() const { return bookmark_; }
WalletButton* wallet_button() const { return wallet_; }
SidePanelButton* side_panel_button() const { return side_panel_; }
#if BUILDFLAG(ENABLE_AI_CHAT)
AIChatButton* ai_chat_button() const { return ai_chat_button_; }
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
BraveVPNButton* brave_vpn_button() const { return brave_vpn_; }
@@ -72,7 +77,9 @@ class BraveToolbarView : public ToolbarView,
void OnProfileWasRemoved(const base::FilePath& profile_path,
const std::u16string& profile_name) override;
#if BUILDFLAG(ENABLE_AI_CHAT)
void UpdateAIChatButtonVisibility();
#endif
void UpdateWalletButtonVisibility();
views::View* toolbar_divider_for_testing() { return toolbar_divider_; }
@@ -92,9 +99,11 @@ class BraveToolbarView : public ToolbarView,
BooleanPrefMember show_bookmarks_button_;
#if BUILDFLAG(ENABLE_AI_CHAT)
raw_ptr<AIChatButton> ai_chat_button_ = nullptr;
BooleanPrefMember show_ai_chat_button_;
BooleanPrefMember hide_ai_chat_button_by_policy_;
#endif
BooleanPrefMember show_wallet_button_;
BooleanPrefMember wallet_disabled_by_policy_;
@@ -11,12 +11,9 @@
#include "base/test/scoped_feature_list.h"
#include "brave/browser/ui/tabs/brave_split_tab_menu_model.h"
#include "brave/browser/ui/views/frame/brave_browser_view.h"
#include "brave/browser/ui/views/toolbar/ai_chat_button.h"
#include "brave/browser/ui/views/toolbar/bookmark_button.h"
#include "brave/browser/ui/views/toolbar/wallet_button.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_wallet/browser/pref_names.h"
#include "brave/components/constants/pref_names.h"
#include "brave/components/constants/webui_url_constants.h"
@@ -62,6 +59,13 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/view.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ui/views/toolbar/ai_chat_button.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_TOR)
#include "brave/browser/tor/tor_profile_manager.h"
#endif
@@ -104,6 +108,7 @@ class BraveToolbarViewTest : public InProcessBrowserTest {
}
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
void BlockAIChatByPolicy(bool value) {
policy::PolicyMap policies;
policies.Set(policy::key::kBraveAIChatEnabled,
@@ -113,6 +118,7 @@ class BraveToolbarViewTest : public InProcessBrowserTest {
EXPECT_EQ(ai_chat::IsAIChatEnabled(browser()->profile()->GetPrefs()),
!value);
}
#endif
void Init(Browser* browser) {
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
@@ -145,6 +151,7 @@ class BraveToolbarViewTest : public InProcessBrowserTest {
return wallet_button->GetVisible();
}
#if BUILDFLAG(ENABLE_AI_CHAT)
bool is_ai_chat_button_shown(Browser* browser) {
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
toolbar_view_ = static_cast<BraveToolbarView*>(browser_view->toolbar());
@@ -154,6 +161,7 @@ class BraveToolbarViewTest : public InProcessBrowserTest {
}
return button->GetVisible();
}
#endif
AvatarToolbarButton* GetAvatarToolbarButton(Browser* browser) {
return BrowserView::GetBrowserViewForBrowser(browser)
@@ -184,6 +192,7 @@ class BraveToolbarViewTest_VPNEnabled : public BraveToolbarViewTest {
};
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
class BraveToolbarViewTest_AIChatEnabled : public BraveToolbarViewTest {
public:
BraveToolbarViewTest_AIChatEnabled() {
@@ -203,6 +212,7 @@ class BraveToolbarViewTest_AIChatDisabled : public BraveToolbarViewTest {
protected:
base::test::ScopedFeatureList scoped_feature_list_;
};
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
IN_PROC_BROWSER_TEST_F(BraveToolbarViewTest_VPNEnabled, VPNButtonVisibility) {
@@ -234,6 +244,7 @@ IN_PROC_BROWSER_TEST_F(BraveToolbarViewTest_VPNEnabled, VPNButtonVisibility) {
}
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(BraveToolbarViewTest_AIChatEnabled,
AIChatButtonOpenTargetTest) {
auto* prefs = browser()->profile()->GetPrefs();
@@ -331,6 +342,7 @@ IN_PROC_BROWSER_TEST_F(BraveToolbarViewTest_AIChatDisabled,
// Button is always hidden when feature flag is disabled
EXPECT_FALSE(is_ai_chat_button_shown(browser()));
}
#endif
IN_PROC_BROWSER_TEST_F(BraveToolbarViewTest, ToolbarDividerNotShownTest) {
// As we don't use divider in toolbar, it should be null always.
+3 -1
View File
@@ -5,6 +5,8 @@
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
assert(enable_ai_chat)
source_set("ai_chat") {
sources = [
"ai_chat_ui.cc",
@@ -53,8 +55,8 @@ source_set("ai_chat") {
"ai_chat_agent_new_tab_page_ui.cc",
"ai_chat_agent_new_tab_page_ui.h",
]
public_deps = [ "//brave/browser/ai_chat:ai_chat_agent_profile" ]
deps += [
"//brave/browser/ai_chat:ai_chat_agent_profile",
"//brave/browser/resources/ai_chat_agent_new_tab_page:pack_js_resources",
"//brave/browser/resources/ai_chat_agent_new_tab_page:pack_static_resources",
]
@@ -4,6 +4,7 @@
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/build/config.gni")
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
import("//build/config/features.gni")
import("//chrome/common/features.gni")
@@ -16,9 +17,9 @@ source_set("brave_browser_command") {
deps = [
"//base",
"//brave/browser/ai_chat",
"//brave/browser/brave_rewards",
"//brave/browser/brave_wallet",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_education",
"//brave/components/brave_vpn/common/buildflags",
"//brave/components/constants",
@@ -29,6 +30,10 @@ source_set("brave_browser_command") {
"//url",
]
if (enable_ai_chat) {
deps += [ "//brave/browser/ai_chat" ]
}
if (enable_brave_vpn) {
deps += [ "//brave/browser/brave_vpn" ]
}
@@ -8,14 +8,18 @@
#include "brave/browser/ui/webui/brave_browser_command/brave_browser_command_handler.h"
#include "base/containers/contains.h"
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_education/education_urls.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/constants/webui_url_constants.h"
#include "chrome/browser/profiles/profile.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_service_factory.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/vpn_utils.h"
#endif
@@ -40,10 +44,12 @@ bool CanShowVPNBubble(Profile* profile) {
#endif
}
#if BUILDFLAG(ENABLE_AI_CHAT)
bool CanShowAIChat(Profile* profile) {
return ai_chat::AIChatServiceFactory::GetForBrowserContext(profile) !=
nullptr;
}
#endif
} // namespace
@@ -80,9 +86,11 @@ void BraveBrowserCommandHandler::CanExecuteCommand(
case brave_browser_command::mojom::Command::kOpenVPNOnboarding:
can_execute = CanShowVPNBubble(profile_);
break;
#if BUILDFLAG(ENABLE_AI_CHAT)
case brave_browser_command::mojom::Command::kOpenAIChat:
can_execute = CanShowAIChat(profile_);
break;
#endif
}
std::move(callback).Run(can_execute);
}
@@ -111,9 +119,11 @@ void BraveBrowserCommandHandler::ExecuteCommand(
std::move(callback).Run(false);
return;
#endif
#if BUILDFLAG(ENABLE_AI_CHAT)
case brave_browser_command::mojom::Command::kOpenAIChat:
delegate_->OpenAIChat();
break;
#endif
}
std::move(callback).Run(true);
@@ -13,6 +13,7 @@
#include <utility>
#include <vector>
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/ui/webui/resources/js/brave_browser_command/brave_browser_command.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
@@ -32,7 +33,9 @@ class BraveBrowserCommandHandler
WindowOpenDisposition disposition) = 0;
virtual void OpenRewardsPanel() = 0;
virtual void OpenVPNPanel() = 0;
#if BUILDFLAG(ENABLE_AI_CHAT)
virtual void OpenAIChat() = 0;
#endif
};
BraveBrowserCommandHandler(
@@ -8,11 +8,15 @@
#include "base/check.h"
#include "brave/browser/ui/brave_rewards/rewards_panel_coordinator.h"
#include "brave/browser/ui/brave_vpn/brave_vpn_controller.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "chrome/browser/ui/views/side_panel/side_panel_entry.h"
#include "chrome/browser/ui/views/side_panel/side_panel_ui.h"
#endif
namespace brave_education {
@@ -44,9 +48,11 @@ void BraveEducationPageDelegateDesktop::OpenVPNPanel() {
#endif
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BraveEducationPageDelegateDesktop::OpenAIChat() {
window_interface_->GetFeatures().side_panel_ui()->Show(
SidePanelEntry::Key(SidePanelEntryId::kChatUI));
}
#endif
} // namespace brave_education
@@ -8,6 +8,7 @@
#include "base/memory/raw_ref.h"
#include "brave/browser/ui/webui/brave_browser_command/brave_browser_command_handler.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "ui/base/window_open_disposition.h"
#include "url/gurl.h"
@@ -26,7 +27,9 @@ class BraveEducationPageDelegateDesktop
void OpenURL(const GURL& url, WindowOpenDisposition disposition) override;
void OpenRewardsPanel() override;
void OpenVPNPanel() override;
#if BUILDFLAG(ENABLE_AI_CHAT)
void OpenAIChat() override;
#endif
private:
// The browser window interface for tab w/ brave_education's WebUI.
@@ -10,6 +10,7 @@
#include "base/test/bind.h"
#include "base/test/test_future.h"
#include "brave/browser/ui/webui/brave_browser_command/brave_browser_command_handler.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_education/education_urls.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "chrome/test/base/testing_browser_process.h"
@@ -35,7 +36,9 @@ class TestDelegate : public BraveBrowserCommandHandler::Delegate {
void OpenRewardsPanel() override { add_action_.Run("open-rewards-panel"); }
void OpenVPNPanel() override { add_action_.Run("open-vpn-panel"); }
#if BUILDFLAG(ENABLE_AI_CHAT)
void OpenAIChat() override { add_action_.Run("open-ai-chat"); }
#endif
private:
AddActionCallback add_action_;
@@ -63,7 +66,10 @@ class BraveEducationPageHandlerTest : public testing::Test {
{brave_browser_command::mojom::Command::kOpenRewardsOnboarding,
brave_browser_command::mojom::Command::kOpenWalletOnboarding,
brave_browser_command::mojom::Command::kOpenVPNOnboarding,
brave_browser_command::mojom::Command::kOpenAIChat});
#if BUILDFLAG(ENABLE_AI_CHAT)
brave_browser_command::mojom::Command::kOpenAIChat
#endif
});
page_handler_ = std::make_unique<BraveBrowserCommandHandler>(
remote_.BindNewPipeAndPassReceiver(), profile, supported_commands,
@@ -119,6 +125,7 @@ TEST_F(BraveEducationPageHandlerTest, VPNCommandsExecuted) {
#endif
}
#if BUILDFLAG(ENABLE_AI_CHAT)
TEST_F(BraveEducationPageHandlerTest, ChatCommandsExecuted) {
auto& handler = CreateHandler();
base::test::TestFuture<bool> future;
@@ -129,6 +136,7 @@ TEST_F(BraveEducationPageHandlerTest, ChatCommandsExecuted) {
ASSERT_TRUE(future.Get());
EXPECT_EQ(actions()[0], "open-ai-chat");
}
#endif
TEST_F(BraveEducationPageHandlerTest, OffTheRecordProfile) {
auto* otr_profile = profile().GetOffTheRecordProfile(
@@ -158,9 +166,11 @@ TEST_F(BraveEducationPageHandlerTest, OffTheRecordProfile) {
future.GetCallback());
ASSERT_FALSE(future.Get());
#if BUILDFLAG(ENABLE_AI_CHAT)
handler->CanExecuteCommand(brave_browser_command::mojom::Command::kOpenAIChat,
future.GetCallback());
ASSERT_FALSE(future.Get());
#endif
EXPECT_TRUE(actions().empty());
}
@@ -16,6 +16,7 @@
#include "brave/browser/ui/webui/brave_education/brave_education_handler.h"
#include "brave/browser/ui/webui/brave_education/brave_education_page_delegate_desktop.h"
#include "brave/browser/ui/webui/brave_webui_source.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_education/education_urls.h"
#include "brave/components/constants/webui_url_constants.h"
#include "brave/grit/brave_education_resources.h"
@@ -102,10 +103,14 @@ void BraveEducationPageUI::CreateBrowserCommandHandler(
supported_commands.insert(
supported_commands.end(),
{brave_browser_command::mojom::Command::kOpenRewardsOnboarding,
brave_browser_command::mojom::Command::kOpenWalletOnboarding,
brave_browser_command::mojom::Command::kOpenVPNOnboarding,
brave_browser_command::mojom::Command::kOpenAIChat});
{
brave_browser_command::mojom::Command::kOpenRewardsOnboarding,
brave_browser_command::mojom::Command::kOpenWalletOnboarding,
brave_browser_command::mojom::Command::kOpenVPNOnboarding,
#if BUILDFLAG(ENABLE_AI_CHAT)
brave_browser_command::mojom::Command::kOpenAIChat,
#endif
});
auto* web_contents = web_ui()->GetWebContents();
auto* tab = tabs::TabInterface::GetFromContents(web_contents);
@@ -8,6 +8,7 @@
#include <utility>
#include "base/memory/weak_ptr.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_education/education_urls.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/constants/webui_url_constants.h"
@@ -132,6 +133,7 @@ IN_PROC_BROWSER_TEST_F(BraveEducationPageUIBrowserTest, OpenVPNOnboarding) {
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
#if BUILDFLAG(ENABLE_AI_CHAT)
IN_PROC_BROWSER_TEST_F(BraveEducationPageUIBrowserTest, OpenAPIChat) {
NavigateToEducationPage(EducationPageType::kGettingStarted);
@@ -145,5 +147,6 @@ IN_PROC_BROWSER_TEST_F(BraveEducationPageUIBrowserTest, OpenAPIChat) {
EXPECT_TRUE(
new_web_contents->GetVisibleURL().spec().starts_with(kAIChatUIURL));
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
} // namespace brave_education
+15 -5
View File
@@ -11,7 +11,6 @@
#include "base/compiler_specific.h"
#include "base/feature_list.h"
#include "brave/browser/ai_chat/ai_chat_settings_helper.h"
#include "brave/browser/brave_origin/brave_origin_service_factory.h"
#include "brave/browser/brave_rewards/rewards_util.h"
#include "brave/browser/brave_wallet/brave_wallet_context_utils.h"
@@ -27,13 +26,10 @@
#include "brave/browser/ui/webui/settings/brave_appearance_handler.h"
#include "brave/browser/ui/webui/settings/brave_default_extensions_handler.h"
#include "brave/browser/ui/webui/settings/brave_privacy_handler.h"
#include "brave/browser/ui/webui/settings/brave_settings_leo_assistant_handler.h"
#include "brave/browser/ui/webui/settings/brave_sync_handler.h"
#include "brave/browser/ui/webui/settings/brave_wallet_handler.h"
#include "brave/browser/ui/webui/settings/default_brave_shields_handler.h"
#include "brave/components/ai_chat/core/browser/customization_settings_handler.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_account/features.h"
#include "brave/components/brave_origin/brave_origin_handler.h"
#include "brave/components/brave_origin/brave_origin_utils.h"
@@ -69,6 +65,14 @@
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "net/base/features.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/browser/ai_chat/ai_chat_settings_helper.h"
#include "brave/browser/ui/webui/settings/brave_settings_leo_assistant_handler.h"
#include "brave/components/ai_chat/core/browser/customization_settings_handler.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#endif
#if BUILDFLAG(ENABLE_PIN_SHORTCUT)
#include "brave/browser/ui/webui/settings/pin_shortcut_handler.h"
#endif
@@ -130,8 +134,10 @@ BraveSettingsUI::BraveSettingsUI(content::WebUI* web_ui) : SettingsUI(web_ui) {
web_ui->AddMessageHandler(std::make_unique<BraveSyncHandler>());
web_ui->AddMessageHandler(std::make_unique<BraveWalletHandler>());
web_ui->AddMessageHandler(std::make_unique<BraveAdBlockHandler>());
#if BUILDFLAG(ENABLE_AI_CHAT)
web_ui->AddMessageHandler(
std::make_unique<settings::BraveLeoAssistantHandler>());
#endif
#if BUILDFLAG(ENABLE_TOR)
web_ui->AddMessageHandler(std::make_unique<BraveTorHandler>());
@@ -216,10 +222,12 @@ void BraveSettingsUI::AddResources(content::WebUIDataSource* html_source,
base::FeatureList::IsEnabled(
extensions_mv2::features::kExtensionsManifestV2));
#if BUILDFLAG(ENABLE_AI_CHAT)
html_source->AddBoolean("isLeoAssistantAllowed",
ai_chat::IsAIChatEnabled(profile->GetPrefs()));
html_source->AddBoolean("isLeoAssistantHistoryAllowed",
ai_chat::features::IsAIChatHistoryEnabled());
#endif
html_source->AddBoolean("isSurveyPanelistAllowed",
base::FeatureList::IsEnabled(
@@ -272,6 +280,7 @@ void BraveSettingsUI::BindInterface(
->BindInterface(std::move(pending_receiver));
}
#if BUILDFLAG(ENABLE_AI_CHAT)
void BraveSettingsUI::BindInterface(
mojo::PendingReceiver<ai_chat::mojom::AIChatSettingsHelper>
pending_receiver) {
@@ -288,6 +297,7 @@ void BraveSettingsUI::BindInterface(
web_ui()->GetWebContents()->GetBrowserContext()));
mojo::MakeSelfOwnedReceiver(std::move(handler), std::move(pending_receiver));
}
#endif
void BraveSettingsUI::BindInterface(
mojo::PendingReceiver<brave_account::mojom::BraveAccountSettingsHandler>
+10 -2
View File
@@ -8,8 +8,7 @@
#include <memory>
#include "brave/components/ai_chat/core/common/mojom/customization_settings.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/settings_helper.mojom.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_account/mojom/brave_account_settings_handler.mojom.h"
#include "brave/components/brave_origin/common/mojom/brave_origin_settings.mojom.h"
#include "brave/components/commands/common/commands.mojom.h"
@@ -19,6 +18,11 @@
#include "chrome/browser/ui/webui/settings/settings_ui.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/common/mojom/customization_settings.mojom.h"
#include "brave/components/ai_chat/core/common/mojom/settings_helper.mojom.h"
#endif
#if BUILDFLAG(ENABLE_CONTAINERS)
#include "brave/components/containers/core/mojom/containers.mojom.h"
#endif
@@ -56,11 +60,15 @@ class BraveSettingsUI : public settings::SettingsUI {
void BindInterface(
mojo::PendingReceiver<commands::mojom::CommandsService> pending_receiver);
#if BUILDFLAG(ENABLE_AI_CHAT)
void BindInterface(mojo::PendingReceiver<ai_chat::mojom::AIChatSettingsHelper>
pending_receiver);
void BindInterface(
mojo::PendingReceiver<ai_chat::mojom::CustomizationSettingsHandler>
pending_receiver);
#endif
void BindInterface(
mojo::PendingReceiver<brave_account::mojom::BraveAccountSettingsHandler>
pending_receiver);
@@ -23,7 +23,6 @@
#include "brave/browser/ui/webui/brave_rewards_internals_ui.h"
#include "brave/browser/ui/webui/skus_internals_ui.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_rewriter/common/buildflags/buildflags.h"
#include "brave/components/constants/pref_names.h"
#include "brave/components/constants/webui_url_constants.h"
@@ -80,6 +79,7 @@
#if BUILDFLAG(ENABLE_BRAVE_AI_CHAT_AGENT_PROFILE)
#include "brave/browser/ui/webui/ai_chat/ai_chat_agent_new_tab_page_ui.h"
#include "brave/components/ai_chat/core/common/features.h"
#endif
using content::WebUI;
@@ -9,8 +9,7 @@
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/values.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_shields/core/common/features.h"
#include "brave/components/constants/pref_names.h"
#include "brave/components/de_amp/common/features.h"
@@ -26,6 +25,11 @@
#include "content/public/browser/web_ui_data_source.h"
#include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/features.h"
#endif
#if BUILDFLAG(ENABLE_REQUEST_OTR)
#include "brave/components/request_otr/common/features.h"
#endif
@@ -127,10 +131,12 @@ void BravePrivacyHandler::AddLoadTimeData(content::WebUIDataSource* data_source,
"isLocalhostAccessFeatureEnabled",
base::FeatureList::IsEnabled(
brave_shields::features::kBraveLocalhostAccessPermission));
#if BUILDFLAG(ENABLE_AI_CHAT)
data_source->AddBoolean(
"isOpenAIChatFromBraveSearchEnabled",
ai_chat::IsAIChatEnabled(profile->GetPrefs()) &&
ai_chat::features::IsOpenAIChatFromBraveSearchEnabled());
#endif
auto* local_state = g_browser_process->local_state();
data_source->AddBoolean(
"isStatsReportingEnabledManaged",
@@ -11,7 +11,7 @@
#include "brave/browser/shell_integrations/buildflags/buildflags.h"
#include "brave/browser/ui/webui/brave_settings_ui.h"
#include "brave/browser/ui/webui/settings/brave_privacy_handler.h"
#include "brave/components/ai_chat/core/browser/model_validator.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_account/features.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
@@ -52,6 +52,10 @@
#include "net/base/features.h"
#include "ui/base/l10n/l10n_util.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/model_validator.h"
#endif
#if BUILDFLAG(ENABLE_TOR)
#include "brave/browser/tor/tor_profile_service_factory.h"
#endif
@@ -92,6 +96,8 @@ constexpr char16_t kEnableNftDiscoveryLearnMoreUrl[] =
constexpr char16_t kBlockAllCookiesLearnMoreUrl[] =
u"https://github.com/brave/brave-browser/wiki/"
u"Block-all-cookies-global-Shields-setting";
#if BUILDFLAG(ENABLE_AI_CHAT)
constexpr char16_t kLeoCustomModelsLearnMoreURL[] =
u"https://support.brave.app/hc/en-us/articles/"
u"34070140231821-How-do-I-use-the-Bring-Your-Own-Model-BYOM-with-Brave-Leo";
@@ -105,6 +111,7 @@ constexpr char16_t kLeoMemoryLearnMoreURL[] =
constexpr char16_t kLeoPrivacyPolicyURL[] =
u"https://brave.com/privacy/browser/#brave-leo";
#endif
constexpr char16_t kAdBlockOnlyModeLearnMoreURL[] =
u"https://support.brave.app/hc/en-us/articles/38076796692109";
@@ -532,6 +539,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
{"braveShowFullscreenReminder",
IDS_SETTINGS_SHOW_FULLSCREEN_REMINDER_OPTION_LABEL},
#if BUILDFLAG(ENABLE_AI_CHAT)
// Leo Assistant Page
{"leoAssistant", IDS_SETTINGS_LEO_ASSISTANT},
{"braveLeoAssistantShowIconOnToolbarLabel",
@@ -707,6 +715,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
{"braveLeoAssistantClearSearch", IDS_SETTINGS_LEO_ASSISTANT_CLEAR_SEARCH},
{"braveLeoAssistantSearchMemoriesPlaceholder",
IDS_SETTINGS_LEO_ASSISTANT_SEARCH_MEMORIES_PLACEHOLDER},
#endif // BUILDFLAG(ENABLE_AI_CHAT)
// Survey Panelist Page
{"surveyPanelist", IDS_SETTINGS_SURVEY_PANELIST},
@@ -1016,12 +1025,14 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
html_source->AddString("debounceLearnMoreURL", kDebounceLearnMoreUrl);
html_source->AddString("enableNftDiscoveryLearnMoreURL",
kEnableNftDiscoveryLearnMoreUrl);
#if BUILDFLAG(ENABLE_AI_CHAT)
html_source->AddString(
"braveLeoAssistantModelSystemPromptPlaceholder",
base::ReplaceStringPlaceholders(
l10n_util::GetStringUTF8(
IDS_AI_CHAT_DEFAULT_CUSTOM_MODEL_SYSTEM_PROMPT),
{"%datetime%"}, nullptr));
#endif // BUILDFLAG(ENABLE_AI_CHAT)
auto confirmation_phrase =
l10n_util::GetStringUTF16(IDS_SETTINGS_WALLET_RESET_CONFIRMATION_PHRASE);
html_source->AddString("walletResetConfirmationPhrase", confirmation_phrase);
@@ -1038,6 +1049,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
l10n_util::GetStringFUTF16(
IDS_SETTINGS_WALLET_RESET_ZCASH_SYNC_STATE_CONFIRMATION,
confirmation_phrase));
#if BUILDFLAG(ENABLE_AI_CHAT)
html_source->AddString(
"braveLeoAssistantInputDefaultContextSize",
base::NumberToString16(ai_chat::kDefaultCustomModelContextSize));
@@ -1049,6 +1061,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
html_source->AddString("braveLeoAssistantTabOrganizationLearnMoreURL",
kTabOrganizationLearnMoreURL);
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
html_source->AddString("webDiscoveryLearnMoreURL", kWebDiscoveryLearnMoreUrl);
@@ -1095,6 +1108,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
l10n_util::GetStringFUTF16(IDS_SETTINGS_AD_BLOCK_ONLY_MODE_DESC,
kAdBlockOnlyModeLearnMoreURL));
#if BUILDFLAG(ENABLE_AI_CHAT)
html_source->AddString(
"braveLeoAssistantYourModelsDesc2",
l10n_util::GetStringFUTF16(IDS_SETTINGS_LEO_ASSISTANT_YOUR_MODELS_DESC_2,
@@ -1115,6 +1129,7 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
"braveLeoAssistantYourMemoriesDesc",
l10n_util::GetStringFUTF16(IDS_SETTINGS_LEO_ASSISTANT_YOUR_MEMORIES_DESC,
kLeoMemoryLearnMoreURL));
#endif
html_source->AddString("braveSurveyPanelistLearnMoreURL",
kSurveyPanelistLearnMoreURL);
@@ -3,6 +3,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import("//brave/components/ai_chat/core/common/buildflags/buildflags.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
source_set("customize_chrome") {
@@ -15,8 +16,7 @@ source_set("customize_chrome") {
deps = [
"//base",
"//brave/browser/brave_rewards:util",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_news/common",
"//brave/components/brave_rewards/core",
"//brave/components/brave_vpn/common/buildflags",
@@ -33,6 +33,13 @@ source_set("customize_chrome") {
"//content/public/browser",
]
if (enable_ai_chat) {
deps += [
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
]
}
if (enable_brave_vpn_panel) {
deps += [
"//brave/browser/brave_vpn",
@@ -66,8 +73,7 @@ source_set("unit_tests") {
":customize_chrome",
"//base",
"//brave/browser/brave_rewards:util",
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
"//brave/components/ai_chat/core/common/buildflags",
"//brave/components/brave_news/common",
"//brave/components/brave_rewards/core",
"//brave/components/brave_vpn/common/buildflags",
@@ -86,6 +92,13 @@ source_set("unit_tests") {
"//ui/base",
]
if (enable_ai_chat) {
deps += [
"//brave/components/ai_chat/core/browser",
"//brave/components/ai_chat/core/common",
]
}
if (enable_brave_vpn_panel) {
deps += [
"//brave/browser/brave_vpn",
@@ -7,6 +7,7 @@
#define BRAVE_BROWSER_UI_WEBUI_SIDE_PANEL_CUSTOMIZE_CHROME_CUSTOMIZE_TOOLBAR_BRAVE_ACTION_H_
#include "base/containers/fixed_flat_map.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
@@ -62,6 +63,7 @@ inline constexpr BraveAction kShowWalletAction = {
.pref_name = kShowWalletIconOnToolbar,
.icon = kLeoProductBraveWalletIcon};
#if BUILDFLAG(ENABLE_AI_CHAT)
inline constexpr BraveAction kShowAIChatAction = {
.id = side_panel::customize_chrome::mojom::ActionId::kShowAIChat,
.display_name_resource_id = IDS_CUSTOMIZE_TOOLBAR_TOGGLE_AI_CHAT,
@@ -69,6 +71,7 @@ inline constexpr BraveAction kShowAIChatAction = {
.category = side_panel::customize_chrome::mojom::CategoryId::kNavigation,
.pref_name = ai_chat::prefs::kBraveAIChatShowToolbarButton,
.icon = kLeoProductBraveLeoIcon};
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_BRAVE_VPN)
inline constexpr BraveAction kShowVPNAction = {
@@ -104,7 +107,9 @@ inline constexpr auto kBraveActions =
{kShowAddBookmarkButton.id, &kShowAddBookmarkButton},
{kShowSidePanelAction.id, &kShowSidePanelAction},
{kShowWalletAction.id, &kShowWalletAction},
#if BUILDFLAG(ENABLE_AI_CHAT)
{kShowAIChatAction.id, &kShowAIChatAction},
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_BRAVE_VPN)
{kShowVPNAction.id, &kShowVPNAction},
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
@@ -14,7 +14,7 @@
#include "base/strings/utf_string_conversions.h"
#include "brave/browser/brave_rewards/rewards_util.h"
#include "brave/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/brave_action.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/brave_wallet/common/common_utils.h"
#include "chrome/browser/profiles/profile.h"
@@ -29,6 +29,10 @@
#include "ui/display/screen.h"
#include "ui/gfx/image/image_skia.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/vpn_utils.h"
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
@@ -179,9 +183,11 @@ std::vector<ActionPtr> ApplyBraveSpecificModifications(
}
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
#if BUILDFLAG(ENABLE_AI_CHAT)
if (ai_chat::IsAIChatEnabled(prefs)) {
brave_actions.push_back(kShowAIChatAction);
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
if (brave_wallet::IsNativeWalletEnabled()) {
brave_actions.push_back(kShowWalletAction);
@@ -10,8 +10,7 @@
#include "base/containers/contains.h"
#include "base/containers/fixed_flat_set.h"
#include "brave/browser/brave_rewards/rewards_util.h"
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
#include "brave/components/brave_news/common/pref_names.h"
#include "brave/components/brave_rewards/core/pref_names.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
@@ -34,6 +33,11 @@
#include "ui/color/color_provider.h"
#include "ui/gfx/image/image_skia.h"
#if BUILDFLAG(ENABLE_AI_CHAT)
#include "brave/components/ai_chat/core/browser/utils.h"
#include "brave/components/ai_chat/core/common/pref_names.h"
#endif
#if BUILDFLAG(ENABLE_BRAVE_VPN)
#include "brave/browser/brave_vpn/vpn_utils.h"
#include "brave/components/brave_vpn/common/pref_names.h"
@@ -264,6 +268,8 @@ TEST_F(ListActionModifiersUnitTest,
}
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
#if BUILDFLAG(ENABLE_AI_CHAT)
TEST_F(ListActionModifiersUnitTest,
ApplyBraveSpecificModifications_AIChatShouldNotBeAddedWhenDisabled) {
// AI Chat should be added by default(AI Chat enabled by default)
@@ -289,6 +295,8 @@ TEST_F(ListActionModifiersUnitTest,
EXPECT_EQ(ai_chat_action_it, modified_actions.end());
}
#endif // BUILDFLAG(ENABLE_AI_CHAT)
TEST_F(ListActionModifiersUnitTest,
ApplyBraveSpecificModifications_WalletShouldNotBeAddedWhenDisabled) {
// Wallet should be added by default(Wallet enabled by default)
@@ -347,7 +355,9 @@ TEST_F(ListActionModifiersUnitTest,
#if BUILDFLAG(ENABLE_BRAVE_VPN)
ASSERT_TRUE(brave_vpn::IsBraveVPNEnabled(web_contents_->GetBrowserContext()));
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)
#if BUILDFLAG(ENABLE_AI_CHAT)
ASSERT_TRUE(ai_chat::IsAIChatEnabled(prefs()));
#endif // BUILDFLAG(ENABLE_AI_CHAT)
ASSERT_TRUE(brave_wallet::IsNativeWalletEnabled());
ASSERT_TRUE(brave_rewards::IsSupportedForProfile(
Profile::FromBrowserContext(web_contents_->GetBrowserContext())));
@@ -362,7 +372,9 @@ TEST_F(ListActionModifiersUnitTest,
EqId(ActionId::kForward), EqId(ActionId::kShowAddBookmarkButton),
EqId(ActionId::kNewIncognitoWindow), EqId(ActionId::kShowSidePanel),
EqId(ActionId::kTabSearch), EqId(ActionId::kShowWallet),
#if BUILDFLAG(ENABLE_AI_CHAT)
EqId(ActionId::kShowAIChat),
#endif // BUILDFLAG(ENABLE_AI_CHAT)
#if BUILDFLAG(ENABLE_BRAVE_VPN)
EqId(ActionId::kShowVPN),
#endif // BUILDFLAG(ENABLE_BRAVE_VPN)

Some files were not shown because too many files have changed in this diff Show More