From 13b4f3028c97c77350385112e040b4e9d0845901 Mon Sep 17 00:00:00 2001 From: Simon Hong Date: Fri, 17 Jun 2022 16:15:29 +0900 Subject: [PATCH 1/2] Migrated colors that used in theme_properties to color provider pipeline https://github.com/brave/brave-browser/issues/23423 Introduced for color mixers for light/dark/private/tor window for using our theme colors from color provider. With this PR, brave's background color of new tab button/tab search button is used. --- browser/themes/BUILD.gn | 1 + .../brave_private_window_theme_supplier.cc | 23 +++ .../brave_private_window_theme_supplier.h | 31 ++++ browser/themes/brave_theme_helper.cc | 6 +- .../themes/brave_theme_service_browsertest.cc | 17 +++ browser/themes/sources.gni | 5 + browser/themes/theme_properties.cc | 22 +-- browser/ui/color/brave_color_mixer.cc | 137 ++++++++++++++++++ browser/ui/color/brave_color_mixer.h | 24 +++ browser/ui/color/color_palette.h | 28 ++++ browser/ui/color/sources.gni | 16 ++ browser/ui/views/frame/brave_browser_frame.cc | 25 +++- browser/ui/views/frame/brave_browser_frame.h | 7 + build/config/brave_build.gni | 1 + .../browser/ui/color/chrome_color_mixer.cc | 14 +- .../chrome-browser-ui-color-BUILD.gn.patch | 12 ++ test/BUILD.gn | 1 + 17 files changed, 340 insertions(+), 30 deletions(-) create mode 100644 browser/themes/brave_private_window_theme_supplier.cc create mode 100644 browser/themes/brave_private_window_theme_supplier.h create mode 100644 browser/ui/color/brave_color_mixer.cc create mode 100644 browser/ui/color/brave_color_mixer.h create mode 100644 browser/ui/color/color_palette.h create mode 100644 browser/ui/color/sources.gni create mode 100644 patches/chrome-browser-ui-color-BUILD.gn.patch diff --git a/browser/themes/BUILD.gn b/browser/themes/BUILD.gn index 982af1251cd1..db79b7552b6e 100644 --- a/browser/themes/BUILD.gn +++ b/browser/themes/BUILD.gn @@ -33,6 +33,7 @@ source_set("themes") { "//brave/components/sidebar/buildflags", "//brave/components/speedreader:buildflags", "//chrome/browser:theme_properties", + "//chrome/browser/ui/color:mixers", "//skia:skia", "//ui/gfx:color_utils", "//ui/native_theme:native_theme", diff --git a/browser/themes/brave_private_window_theme_supplier.cc b/browser/themes/brave_private_window_theme_supplier.cc new file mode 100644 index 000000000000..1f74854775a4 --- /dev/null +++ b/browser/themes/brave_private_window_theme_supplier.cc @@ -0,0 +1,23 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/browser/themes/brave_private_window_theme_supplier.h" + +#include "brave/browser/ui/color/brave_color_mixer.h" +#include "ui/color/color_provider_manager.h" + +BravePrivateWindowThemeSupplier::BravePrivateWindowThemeSupplier( + bool private_window) + : CustomThemeSupplier(ThemeType::kAutogenerated), + for_private_window_(private_window) {} + +BravePrivateWindowThemeSupplier::~BravePrivateWindowThemeSupplier() = default; + +void BravePrivateWindowThemeSupplier::AddColorMixers( + ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) const { + for_private_window_ ? AddBravePrivateThemeColorMixer(provider, key) + : AddBraveTorThemeColorMixer(provider, key); +} diff --git a/browser/themes/brave_private_window_theme_supplier.h b/browser/themes/brave_private_window_theme_supplier.h new file mode 100644 index 000000000000..43302ddad2d0 --- /dev/null +++ b/browser/themes/brave_private_window_theme_supplier.h @@ -0,0 +1,31 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_BROWSER_THEMES_BRAVE_PRIVATE_WINDOW_THEME_SUPPLIER_H_ +#define BRAVE_BROWSER_THEMES_BRAVE_PRIVATE_WINDOW_THEME_SUPPLIER_H_ + +#include "chrome/browser/themes/custom_theme_supplier.h" + +// A theme supplier for private (or tor) window. +class BravePrivateWindowThemeSupplier : public CustomThemeSupplier { + public: + explicit BravePrivateWindowThemeSupplier(bool private_window); + + BravePrivateWindowThemeSupplier(const BravePrivateWindowThemeSupplier&) = + delete; + BravePrivateWindowThemeSupplier& operator=( + const BravePrivateWindowThemeSupplier&) = delete; + + protected: + ~BravePrivateWindowThemeSupplier() override; + + void AddColorMixers(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) const override; + + // false if this is for tor window. + bool for_private_window_ = true; +}; + +#endif // BRAVE_BROWSER_THEMES_BRAVE_PRIVATE_WINDOW_THEME_SUPPLIER_H_ diff --git a/browser/themes/brave_theme_helper.cc b/browser/themes/brave_theme_helper.cc index 6f1a0e7cd6a8..75d047d5bd84 100644 --- a/browser/themes/brave_theme_helper.cc +++ b/browser/themes/brave_theme_helper.cc @@ -9,6 +9,7 @@ #include "brave/browser/themes/brave_dark_mode_utils.h" #include "brave/browser/themes/brave_theme_helper_utils.h" #include "brave/browser/themes/theme_properties.h" +#include "brave/browser/ui/color/color_palette.h" #include "brave/components/brave_vpn/buildflags/buildflags.h" #include "brave/components/sidebar/buildflags/buildflags.h" #include "build/build_config.h" @@ -23,11 +24,6 @@ namespace { -// TODO(simonhong): Get colors from brave's palette. -// Omnibox text colors -const SkColor kDarkOmniboxText = SkColorSetRGB(0xff, 0xff, 0xff); -const SkColor kLightOmniboxText = SkColorSetRGB(0x42, 0x42, 0x42); - #if BUILDFLAG(IS_LINUX) bool IsUsingSystemTheme(const CustomThemeSupplier* theme_supplier) { return theme_supplier && diff --git a/browser/themes/brave_theme_service_browsertest.cc b/browser/themes/brave_theme_service_browsertest.cc index c75e0965f9ff..f39c866da357 100644 --- a/browser/themes/brave_theme_service_browsertest.cc +++ b/browser/themes/brave_theme_service_browsertest.cc @@ -6,6 +6,7 @@ #include "brave/browser/themes/brave_dark_mode_utils.h" #include "brave/browser/themes/brave_theme_helper_utils.h" #include "brave/browser/themes/theme_properties.h" +#include "brave/browser/ui/color/color_palette.h" #include "brave/components/constants/pref_names.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" @@ -20,6 +21,7 @@ #include "content/public/test/browser_test.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest-spi.h" +#include "ui/color/color_provider.h" #include "ui/native_theme/native_theme.h" #include "ui/native_theme/native_theme_observer.h" @@ -188,6 +190,21 @@ IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, OmniboxColorTest) { tp->GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_BG)); } +// Check some colors from color provider pipeline. +IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, ColorProviderTest) { + auto* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); + auto* cp = browser_view->GetColorProvider(); + SkColor frame_active_color = cp->GetColor(ui::kColorFrameActive); + EXPECT_TRUE(frame_active_color == kLightFrame || + frame_active_color == kDarkFrame); + + auto* private_browser = CreateIncognitoBrowser(); + browser_view = BrowserView::GetBrowserViewForBrowser(private_browser); + cp = browser_view->GetColorProvider(); + frame_active_color = cp->GetColor(ui::kColorFrameActive); + EXPECT_EQ(kPrivateFrame, frame_active_color); +} + // Some tests are failing for Windows x86 CI, // See https://github.com/brave/brave-browser/issues/22767 #if BUILDFLAG(IS_WIN) && defined(ARCH_CPU_X86) diff --git a/browser/themes/sources.gni b/browser/themes/sources.gni index ce3a28f9e4a3..e788dc457176 100644 --- a/browser/themes/sources.gni +++ b/browser/themes/sources.gni @@ -10,6 +10,8 @@ brave_browser_themes_deps = [] if (!is_android) { brave_browser_themes_sources += [ "//brave/browser/themes/brave_dark_mode_utils.cc", + "//brave/browser/themes/brave_private_window_theme_supplier.cc", + "//brave/browser/themes/brave_private_window_theme_supplier.h", "//brave/browser/themes/brave_theme_helper.cc", "//brave/browser/themes/brave_theme_helper.h", "//brave/browser/themes/brave_theme_helper_utils.cc", @@ -31,9 +33,12 @@ if (!is_android) { "//brave/components/brave_vpn/buildflags", "//brave/components/constants", "//brave/components/sidebar/buildflags", + "//chrome/browser/ui", + "//chrome/browser/ui/color:color_headers", "//chrome/common", "//components/pref_registry", "//components/prefs", + "//ui/color", "//ui/gfx", "//ui/native_theme", ] diff --git a/browser/themes/theme_properties.cc b/browser/themes/theme_properties.cc index 7e74ccb8b7c7..1c6eb92dbfa4 100644 --- a/browser/themes/theme_properties.cc +++ b/browser/themes/theme_properties.cc @@ -6,15 +6,12 @@ #include "brave/browser/themes/theme_properties.h" #include "base/notreached.h" +#include "brave/browser/ui/color/color_palette.h" #include "chrome/browser/themes/theme_properties.h" #include "ui/gfx/color_palette.h" namespace { -const SkColor kLightToolbar = SkColorSetRGB(0xf3, 0xf3, 0xf3); -const SkColor kLightFrame = SkColorSetRGB(0xd5, 0xd9, 0xdc); -const SkColor kLightToolbarIcon = SkColorSetRGB(0x42, 0x42, 0x42); - absl::optional MaybeGetDefaultColorForBraveLightUi(int id) { switch (id) { // Applies when the window is active, tabs and also tab bar everywhere @@ -27,7 +24,7 @@ absl::optional MaybeGetDefaultColorForBraveLightUi(int id) { // except active tab case ThemeProperties::COLOR_FRAME_INACTIVE: case ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE: - return color_utils::HSLShift(kLightFrame, { -1, -1, 0.6 }); + return color_utils::HSLShift(kLightFrame, {-1, -1, 0.6}); // Active tab and also the URL toolbar // Parts of this color show up as you hover over innactive tabs too case ThemeProperties::COLOR_TOOLBAR: @@ -131,10 +128,6 @@ absl::optional MaybeGetDefaultColorForBraveLightUi(int id) { } } -const SkColor kDarkToolbar = SkColorSetRGB(0x30, 0x34, 0x43); -const SkColor kDarkFrame = SkColorSetRGB(0x0C, 0x0C, 0x17); -const SkColor kDarkToolbarIcon = SkColorSetRGB(0xed, 0xed, 0xed); - absl::optional MaybeGetDefaultColorForBraveDarkUi(int id) { switch (id) { // Applies when the window is active, tabs and also tab bar everywhere @@ -146,7 +139,7 @@ absl::optional MaybeGetDefaultColorForBraveDarkUi(int id) { // except active tab case ThemeProperties::COLOR_FRAME_INACTIVE: case ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE: - return color_utils::HSLShift(kDarkFrame, { -1, -1, 0.6 }); + return color_utils::HSLShift(kDarkFrame, {-1, -1, 0.6}); // Active tab and also the URL toolbar // Parts of this color show up as you hover over innactive tabs too case ThemeProperties::COLOR_TOOLBAR: @@ -253,9 +246,6 @@ absl::optional MaybeGetDefaultColorForBraveDarkUi(int id) { } } -const SkColor kPrivateFrame = SkColorSetRGB(0x19, 0x16, 0x2F); -const SkColor kPrivateToolbar = SkColorSetRGB(0x32, 0x25, 0x60); - absl::optional MaybeGetDefaultColorForPrivateUi(int id) { switch (id) { // Applies when the window is active, tabs and also tab bar everywhere @@ -267,7 +257,7 @@ absl::optional MaybeGetDefaultColorForPrivateUi(int id) { // except active tab case ThemeProperties::COLOR_FRAME_INACTIVE: case ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE: - return color_utils::HSLShift(kPrivateFrame, { -1, -1, 0.55 }); + return color_utils::HSLShift(kPrivateFrame, {-1, -1, 0.55}); // Active tab and also the URL toolbar // Parts of this color show up as you hover over innactive tabs too case ThemeProperties::COLOR_TOOLBAR: @@ -293,8 +283,6 @@ absl::optional MaybeGetDefaultColorForPrivateUi(int id) { } } -const SkColor kPrivateTorFrame = SkColorSetRGB(0x19, 0x0E, 0x2A); -const SkColor kPrivateTorToolbar = SkColorSetRGB(0x49, 0x2D, 0x58); absl::optional MaybeGetDefaultColorForPrivateTorUi(int id) { switch (id) { // Applies when the window is active, tabs and also tab bar everywhere @@ -306,7 +294,7 @@ absl::optional MaybeGetDefaultColorForPrivateTorUi(int id) { // except active tab case ThemeProperties::COLOR_FRAME_INACTIVE: case ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE: - return color_utils::HSLShift(kPrivateTorFrame, { -1, -1, 0.55 }); + return color_utils::HSLShift(kPrivateTorFrame, {-1, -1, 0.55}); // Active tab and also the URL toolbar // Parts of this color show up as you hover over innactive tabs too case ThemeProperties::COLOR_TOOLBAR: diff --git a/browser/ui/color/brave_color_mixer.cc b/browser/ui/color/brave_color_mixer.cc new file mode 100644 index 000000000000..50dc11dc544f --- /dev/null +++ b/browser/ui/color/brave_color_mixer.cc @@ -0,0 +1,137 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/browser/ui/color/brave_color_mixer.h" + +#include "brave/browser/ui/color/color_palette.h" +#include "chrome/browser/ui/color/chrome_color_id.h" +#include "ui/color/color_id.h" +#include "ui/color/color_provider.h" +#include "ui/color/color_recipe.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" + +void AddBraveLightThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) { + ui::ColorMixer& mixer = provider->AddMixer(); + + mixer[kColorDownloadShelfButtonText] = {gfx::kBraveGrey800}; + + mixer[ui::kColorFrameActive] = {kLightFrame}; + mixer[kColorTabBackgroundInactiveFrameActive] = {ui::kColorFrameActive}; + mixer[kColorNewTabButtonBackgroundFrameActive] = {ui::kColorFrameActive}; + mixer[kColorToolbarContentAreaSeparator] = {ui::kColorFrameActive}; + + mixer[ui::kColorFrameInactive] = { + color_utils::HSLShift(kLightFrame, {-1, -1, 0.6})}; + mixer[kColorTabBackgroundInactiveFrameInactive] = {ui::kColorFrameInactive}; + mixer[kColorNewTabButtonBackgroundFrameInactive] = {ui::kColorFrameInactive}; + + mixer[kColorToolbar] = {kLightToolbar}; + mixer[kColorToolbarTopSeparatorFrameActive] = {kColorToolbar}; + mixer[kColorToolbarTopSeparatorFrameInactive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameActive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameInactive] = {kColorToolbar}; + + mixer[kColorTabForegroundActiveFrameActive] = {kLightToolbarIcon}; + mixer[kColorTabForegroundInactiveFrameActive] = { + kColorTabForegroundActiveFrameActive}; + mixer[kColorBookmarkBarForeground] = {kColorTabForegroundActiveFrameActive}; + mixer[kColorToolbarButtonIcon] = {kColorTabForegroundActiveFrameActive}; + + mixer[kColorToolbarButtonIconInactive] = { + color_utils::AlphaBlend(kLightToolbarIcon, kLightToolbar, 0.3f)}; +} + +void AddBraveDarkThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) { + ui::ColorMixer& mixer = provider->AddMixer(); + + mixer[kColorDownloadShelfButtonText] = {SK_ColorWHITE}; + + mixer[ui::kColorFrameActive] = {kDarkFrame}; + mixer[kColorTabBackgroundInactiveFrameActive] = {ui::kColorFrameActive}; + mixer[kColorNewTabButtonBackgroundFrameActive] = {ui::kColorFrameActive}; + + mixer[ui::kColorFrameInactive] = { + color_utils::HSLShift(kDarkFrame, {-1, -1, 0.6})}; + mixer[kColorTabBackgroundInactiveFrameInactive] = {ui::kColorFrameInactive}; + mixer[kColorNewTabButtonBackgroundFrameInactive] = {ui::kColorFrameInactive}; + + mixer[kColorToolbar] = {kDarkToolbar}; + mixer[kColorToolbarTopSeparatorFrameActive] = {kColorToolbar}; + mixer[kColorToolbarTopSeparatorFrameInactive] = {kColorToolbar}; + mixer[kColorToolbarContentAreaSeparator] = {kColorToolbar}; + mixer[kColorTabStrokeFrameActive] = {kColorToolbar}; + mixer[kColorTabStrokeFrameInactive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameActive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameInactive] = {kColorToolbar}; + + mixer[kColorTabForegroundActiveFrameActive] = { + SkColorSetRGB(0xF3, 0xF3, 0xF3)}; + mixer[kColorBookmarkBarForeground] = {kColorTabForegroundActiveFrameActive}; + mixer[kColorTabForegroundInactiveFrameActive] = { + kColorTabForegroundActiveFrameActive}; + mixer[kColorToolbarButtonIcon] = {kDarkToolbarIcon}; + + mixer[kColorToolbarButtonIconInactive] = { + color_utils::AlphaBlend(kDarkToolbarIcon, kDarkToolbar, 0.3f)}; +} + +void AddBravePrivateThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) { + AddBraveDarkThemeColorMixer(provider, key); + + ui::ColorMixer& mixer = provider->AddMixer(); + + mixer[ui::kColorFrameActive] = {kPrivateFrame}; + mixer[kColorTabBackgroundInactiveFrameActive] = {ui::kColorFrameActive}; + mixer[kColorNewTabButtonBackgroundFrameActive] = {ui::kColorFrameActive}; + + mixer[ui::kColorFrameInactive] = { + color_utils::HSLShift(kPrivateFrame, {-1, -1, 0.55})}; + mixer[kColorTabBackgroundInactiveFrameInactive] = {ui::kColorFrameInactive}; + mixer[kColorNewTabButtonBackgroundFrameInactive] = {ui::kColorFrameInactive}; + + mixer[kColorToolbar] = {kPrivateToolbar}; + mixer[kColorToolbarContentAreaSeparator] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameActive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameInactive] = {kColorToolbar}; + + mixer[kColorTabForegroundActiveFrameActive] = { + SkColorSetRGB(0xF3, 0xF3, 0xF3)}; + + mixer[kColorBookmarkBarForeground] = {SkColorSetRGB(0xFF, 0xFF, 0xFF)}; + mixer[kColorTabForegroundInactiveFrameActive] = { + SkColorSetRGB(0xFF, 0xFF, 0xFF)}; + + mixer[kColorToolbarButtonIcon] = {kDarkToolbarIcon}; + mixer[kColorToolbarButtonIconInactive] = { + color_utils::AlphaBlend(kDarkToolbarIcon, kPrivateToolbar, 0.3f)}; +} + +void AddBraveTorThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) { + AddBravePrivateThemeColorMixer(provider, key); + + ui::ColorMixer& mixer = provider->AddMixer(); + + mixer[ui::kColorFrameActive] = {kPrivateTorFrame}; + mixer[kColorTabBackgroundInactiveFrameActive] = {ui::kColorFrameActive}; + mixer[kColorNewTabButtonBackgroundFrameActive] = {ui::kColorFrameActive}; + + mixer[ui::kColorFrameInactive] = { + color_utils::HSLShift(kPrivateTorFrame, {-1, -1, 0.55})}; + mixer[kColorTabBackgroundInactiveFrameInactive] = {ui::kColorFrameInactive}; + mixer[kColorNewTabButtonBackgroundFrameInactive] = {ui::kColorFrameInactive}; + + mixer[kColorToolbar] = {kPrivateTorToolbar}; + mixer[kColorToolbarContentAreaSeparator] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameActive] = {kColorToolbar}; + mixer[kColorTabBackgroundActiveFrameInactive] = {kColorToolbar}; + + mixer[kColorToolbarButtonIconInactive] = { + color_utils::AlphaBlend(kDarkToolbarIcon, kPrivateTorToolbar, 0.3f)}; +} diff --git a/browser/ui/color/brave_color_mixer.h b/browser/ui/color/brave_color_mixer.h new file mode 100644 index 000000000000..d63da78fad04 --- /dev/null +++ b/browser/ui/color/brave_color_mixer.h @@ -0,0 +1,24 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_BROWSER_UI_COLOR_BRAVE_COLOR_MIXER_H_ +#define BRAVE_BROWSER_UI_COLOR_BRAVE_COLOR_MIXER_H_ + +#include "ui/color/color_provider_manager.h" + +namespace ui { +class ColorProvider; +} // namespace ui + +void AddBraveLightThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key); +void AddBraveDarkThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key); +void AddBravePrivateThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key); +void AddBraveTorThemeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key); + +#endif // BRAVE_BROWSER_UI_COLOR_BRAVE_COLOR_MIXER_H_ diff --git a/browser/ui/color/color_palette.h b/browser/ui/color/color_palette.h new file mode 100644 index 000000000000..7c4da7a88d44 --- /dev/null +++ b/browser/ui/color/color_palette.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_BROWSER_UI_COLOR_COLOR_PALETTE_H_ +#define BRAVE_BROWSER_UI_COLOR_COLOR_PALETTE_H_ + +#include "third_party/skia/include/core/SkColor.h" + +// TODO(simonhong): Move all below colors to brave_color_mixer.cc. +// Originally this colors were defined in BraveThemeProperties but +// they are used from mixers also. When color fetching from theme +// provider is deprecated, only mixer will use these colors. +constexpr SkColor kLightToolbar = SkColorSetRGB(0xf3, 0xf3, 0xf3); +constexpr SkColor kLightFrame = SkColorSetRGB(0xd5, 0xd9, 0xdc); +constexpr SkColor kLightToolbarIcon = SkColorSetRGB(0x42, 0x42, 0x42); +constexpr SkColor kDarkOmniboxText = SkColorSetRGB(0xff, 0xff, 0xff); +constexpr SkColor kLightOmniboxText = SkColorSetRGB(0x42, 0x42, 0x42); +constexpr SkColor kDarkToolbar = SkColorSetRGB(0x30, 0x34, 0x43); +constexpr SkColor kDarkFrame = SkColorSetRGB(0x0C, 0x0C, 0x17); +constexpr SkColor kDarkToolbarIcon = SkColorSetRGB(0xed, 0xed, 0xed); +constexpr SkColor kPrivateFrame = SkColorSetRGB(0x19, 0x16, 0x2F); +constexpr SkColor kPrivateToolbar = SkColorSetRGB(0x32, 0x25, 0x60); +constexpr SkColor kPrivateTorFrame = SkColorSetRGB(0x19, 0x0E, 0x2A); +constexpr SkColor kPrivateTorToolbar = SkColorSetRGB(0x49, 0x2D, 0x58); + +#endif // BRAVE_BROWSER_UI_COLOR_COLOR_PALETTE_H_ diff --git a/browser/ui/color/sources.gni b/browser/ui/color/sources.gni new file mode 100644 index 000000000000..271dcf59e746 --- /dev/null +++ b/browser/ui/color/sources.gni @@ -0,0 +1,16 @@ +# Copyright (c) 2022 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +brave_browser_ui_color_mixers_sources = [ + "//brave/browser/ui/color/brave_color_mixer.cc", + "//brave/browser/ui/color/brave_color_mixer.h", + "//brave/browser/ui/color/color_palette.h", +] + +brave_browser_ui_color_mixers_deps = [ + "//skia", + "//ui/color", + "//ui/gfx", +] diff --git a/browser/ui/views/frame/brave_browser_frame.cc b/browser/ui/views/frame/brave_browser_frame.cc index 99844399c2a5..87312cb8d5f5 100644 --- a/browser/ui/views/frame/brave_browser_frame.cc +++ b/browser/ui/views/frame/brave_browser_frame.cc @@ -6,6 +6,7 @@ #include "brave/browser/ui/views/frame/brave_browser_frame.h" #include "brave/browser/profiles/profile_util.h" +#include "brave/browser/themes/brave_private_window_theme_supplier.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/themes/theme_service.h" #include "chrome/browser/themes/theme_service_factory.h" @@ -13,8 +14,16 @@ #include "chrome/browser/ui/views/frame/browser_view.h" BraveBrowserFrame::BraveBrowserFrame(BrowserView* browser_view) - : BrowserFrame(browser_view), - view_(browser_view) {} + : BrowserFrame(browser_view), view_(browser_view) { + if (view_->browser()->profile()->IsIncognitoProfile() || + view_->browser()->profile()->IsTor() || + view_->browser()->profile()->IsGuestSession()) { + theme_supplier_ = base::MakeRefCounted( + !view_->browser()->profile()->IsTor()); + } +} + +BraveBrowserFrame::~BraveBrowserFrame() = default; // Tor/Guest profile should use DarkAura. If not, their native ui is affected by // normal windows theme change. @@ -28,3 +37,15 @@ const ui::NativeTheme* BraveBrowserFrame::GetNativeTheme() const { } return views::Widget::GetNativeTheme(); } + +ui::ColorProviderManager::ThemeInitializerSupplier* +BraveBrowserFrame::GetCustomTheme() const { + // To provider private(tor) windows's theme color via color provider, + // we use |theme_supplier_| for both as upstream doesn't use separated + // mix for private window. + if (theme_supplier_) { + return theme_supplier_.get(); + } + + return BrowserFrame::GetCustomTheme(); +} diff --git a/browser/ui/views/frame/brave_browser_frame.h b/browser/ui/views/frame/brave_browser_frame.h index 24cfec4c5bdd..2461c3e93180 100644 --- a/browser/ui/views/frame/brave_browser_frame.h +++ b/browser/ui/views/frame/brave_browser_frame.h @@ -7,19 +7,26 @@ #define BRAVE_BROWSER_UI_VIEWS_FRAME_BRAVE_BROWSER_FRAME_H_ #include "base/memory/raw_ptr.h" +#include "base/memory/scoped_refptr.h" #include "chrome/browser/ui/views/frame/browser_frame.h" +class CustomThemeSupplier; + class BraveBrowserFrame : public BrowserFrame { public: explicit BraveBrowserFrame(BrowserView* browser_view); BraveBrowserFrame(const BraveBrowserFrame&) = delete; BraveBrowserFrame& operator=(const BraveBrowserFrame&) = delete; + ~BraveBrowserFrame() override; // BrowserFrame overrides: const ui::NativeTheme* GetNativeTheme() const override; + ui::ColorProviderManager::ThemeInitializerSupplier* GetCustomTheme() + const override; private: raw_ptr view_ = nullptr; + scoped_refptr theme_supplier_; }; #endif // BRAVE_BROWSER_UI_VIEWS_FRAME_BRAVE_BROWSER_FRAME_H_ diff --git a/build/config/brave_build.gni b/build/config/brave_build.gni index 464bebf30039..83f4777b8b59 100644 --- a/build/config/brave_build.gni +++ b/build/config/brave_build.gni @@ -8,6 +8,7 @@ import("//brave/browser/resources/bookmarks/sources.gni") import("//brave/browser/resources/extensions/sources.gni") import("//brave/browser/resources/history/sources.gni") import("//brave/browser/resources/settings/sources.gni") +import("//brave/browser/ui/color/sources.gni") import("//brave/build/config/compiler.gni") import("//brave/build/mac/config.gni") import("//brave/components/content_settings/core/browser/sources.gni") diff --git a/chromium_src/chrome/browser/ui/color/chrome_color_mixer.cc b/chromium_src/chrome/browser/ui/color/chrome_color_mixer.cc index ebe2af41d8ba..1a2101064486 100644 --- a/chromium_src/chrome/browser/ui/color/chrome_color_mixer.cc +++ b/chromium_src/chrome/browser/ui/color/chrome_color_mixer.cc @@ -5,6 +5,8 @@ #include "chrome/browser/ui/color/chrome_color_mixer.h" +#include "brave/browser/ui/color/brave_color_mixer.h" + #define AddChromeColorMixer AddChromeColorMixer_ChromiumImpl #include "src/chrome/browser/ui/color/chrome_color_mixer.cc" #undef AddChromeColorMixer @@ -13,13 +15,13 @@ namespace { void AddBraveColorMixer(ui::ColorProvider* provider, const ui::ColorProviderManager::Key& key) { - const bool dark_mode = - key.color_mode == ui::ColorProviderManager::ColorMode::kDark; - ui::ColorMixer& mixer = provider->AddMixer(); + // Apply brave theme when there is no custom theme. + if (key.custom_theme) + return; - // Download shelf colors. - mixer[kColorDownloadShelfButtonText] = {dark_mode ? SK_ColorWHITE - : gfx::kBraveGrey800}; + key.color_mode == ui::ColorProviderManager::ColorMode::kDark + ? AddBraveDarkThemeColorMixer(provider, key) + : AddBraveLightThemeColorMixer(provider, key); } } // namespace diff --git a/patches/chrome-browser-ui-color-BUILD.gn.patch b/patches/chrome-browser-ui-color-BUILD.gn.patch new file mode 100644 index 000000000000..5415884e0563 --- /dev/null +++ b/patches/chrome-browser-ui-color-BUILD.gn.patch @@ -0,0 +1,12 @@ +diff --git a/chrome/browser/ui/color/BUILD.gn b/chrome/browser/ui/color/BUILD.gn +index ebc0b2e5886804820c7f5f594c68e80f85c002cb..a925b384c5359cd8ed5f8907a80df3639fbc60fb 100644 +--- a/chrome/browser/ui/color/BUILD.gn ++++ b/chrome/browser/ui/color/BUILD.gn +@@ -35,6 +35,7 @@ source_set("mixers") { + "//ui/color:color", + "//ui/color:mixers", + ] ++ sources += brave_browser_ui_color_mixers_sources deps += brave_browser_ui_color_mixers_deps + + if (is_chromeos) { + sources += [ "chromeos/native_chrome_color_mixer_chromeos.cc" ] diff --git a/test/BUILD.gn b/test/BUILD.gn index 052c92c4986f..c29013aff291 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -808,6 +808,7 @@ if (!is_android) { "//brave/vendor/bat-native-ledger", "//brave/vendor/bat-native-ledger:publishers_proto", "//chrome/browser", + "//chrome/browser/ui/color:mixers", "//components/commerce/core:feature_list", "//components/gcm_driver:gcm_buildflags", "//components/history_clusters/core", From b130bba56b49d060a0f104826bff968a8e57ea73 Mon Sep 17 00:00:00 2001 From: Simon Hong Date: Mon, 20 Jun 2022 11:42:15 +0900 Subject: [PATCH 2/2] Made BravePrivateWindowThemeSupplier work on linux To use BravePrivateWindowThemeSupplier, BraveBrowserFrame should be used also on linux. --- browser/ui/BUILD.gn | 9 ++------- browser/ui/views/frame/brave_browser_frame.cc | 2 ++ browser/ui/views/frame/brave_browser_frame.h | 3 +++ .../browser/ui/views/frame/browser_window_factory.cc | 10 +--------- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn index 11d3287e2b62..2c4f1552eeef 100644 --- a/browser/ui/BUILD.gn +++ b/browser/ui/BUILD.gn @@ -172,6 +172,8 @@ source_set("ui") { "views/crash_report_permission_ask_dialog_view.h", "views/download/brave_download_item_view.cc", "views/download/brave_download_item_view.h", + "views/frame/brave_browser_frame.cc", + "views/frame/brave_browser_frame.h", "views/frame/brave_browser_view.cc", "views/frame/brave_browser_view.h", "views/frame/brave_opaque_browser_frame_view.cc", @@ -247,13 +249,6 @@ source_set("ui") { ] } - if (is_win || is_mac) { - sources += [ - "views/frame/brave_browser_frame.cc", - "views/frame/brave_browser_frame.h", - ] - } - if (is_linux) { sources += [ "views/brave_views_delegate_linux.cc", diff --git a/browser/ui/views/frame/brave_browser_frame.cc b/browser/ui/views/frame/brave_browser_frame.cc index 87312cb8d5f5..e17cbb92abfd 100644 --- a/browser/ui/views/frame/brave_browser_frame.cc +++ b/browser/ui/views/frame/brave_browser_frame.cc @@ -25,6 +25,7 @@ BraveBrowserFrame::BraveBrowserFrame(BrowserView* browser_view) BraveBrowserFrame::~BraveBrowserFrame() = default; +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) // Tor/Guest profile should use DarkAura. If not, their native ui is affected by // normal windows theme change. const ui::NativeTheme* BraveBrowserFrame::GetNativeTheme() const { @@ -37,6 +38,7 @@ const ui::NativeTheme* BraveBrowserFrame::GetNativeTheme() const { } return views::Widget::GetNativeTheme(); } +#endif ui::ColorProviderManager::ThemeInitializerSupplier* BraveBrowserFrame::GetCustomTheme() const { diff --git a/browser/ui/views/frame/brave_browser_frame.h b/browser/ui/views/frame/brave_browser_frame.h index 2461c3e93180..49af1a8bd7b8 100644 --- a/browser/ui/views/frame/brave_browser_frame.h +++ b/browser/ui/views/frame/brave_browser_frame.h @@ -8,6 +8,7 @@ #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" +#include "build/build_config.h" #include "chrome/browser/ui/views/frame/browser_frame.h" class CustomThemeSupplier; @@ -20,7 +21,9 @@ class BraveBrowserFrame : public BrowserFrame { ~BraveBrowserFrame() override; // BrowserFrame overrides: +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) const ui::NativeTheme* GetNativeTheme() const override; +#endif ui::ColorProviderManager::ThemeInitializerSupplier* GetCustomTheme() const override; diff --git a/chromium_src/chrome/browser/ui/views/frame/browser_window_factory.cc b/chromium_src/chrome/browser/ui/views/frame/browser_window_factory.cc index f0156a7e219e..e3886fb26ee3 100644 --- a/chromium_src/chrome/browser/ui/views/frame/browser_window_factory.cc +++ b/chromium_src/chrome/browser/ui/views/frame/browser_window_factory.cc @@ -3,20 +3,12 @@ * 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/. */ -#include "build/build_config.h" +#include "brave/browser/ui/views/frame/brave_browser_frame.h" #include "brave/browser/ui/views/frame/brave_browser_view.h" #include "chrome/browser/ui/views/frame/browser_view.h" -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) -#include "brave/browser/ui/views/frame/brave_browser_frame.h" - #define BrowserFrame BraveBrowserFrame -#endif - #define BrowserView BraveBrowserView #include "src/chrome/browser/ui/views/frame/browser_window_factory.cc" #undef BrowserView - -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) #undef BrowserFrame -#endif