mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			167 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git base/win/dark_mode_support.cc base/win/dark_mode_support.cc
 | 
						|
index 73d6ad5e9bb36..6c450e79c0f94 100644
 | 
						|
--- base/win/dark_mode_support.cc
 | 
						|
+++ base/win/dark_mode_support.cc
 | 
						|
@@ -7,6 +7,7 @@
 | 
						|
 #include <windows.h>
 | 
						|
 
 | 
						|
 #include "base/check.h"
 | 
						|
+#include "base/command_line.h"
 | 
						|
 #include "base/native_library.h"
 | 
						|
 #include "base/win/win_util.h"
 | 
						|
 #include "base/win/windows_version.h"
 | 
						|
@@ -89,11 +90,20 @@ const DarkModeSupport& GetDarkModeSupport() {
 | 
						|
   return dark_mode_support;
 | 
						|
 }
 | 
						|
 
 | 
						|
+bool IsForcedLightMode() {
 | 
						|
+  static bool kIsForcedLightMode =
 | 
						|
+      base::CommandLine::ForCurrentProcess()->HasSwitch(
 | 
						|
+          "force-light-mode");
 | 
						|
+  return kIsForcedLightMode;
 | 
						|
+}
 | 
						|
+
 | 
						|
 }  // namespace
 | 
						|
 
 | 
						|
 namespace base::win {
 | 
						|
 
 | 
						|
 bool IsDarkModeAvailable() {
 | 
						|
+  if (IsForcedLightMode())
 | 
						|
+    return false;
 | 
						|
   auto& dark_mode_support = GetDarkModeSupport();
 | 
						|
   return (dark_mode_support.allow_dark_mode_for_app ||
 | 
						|
           dark_mode_support.set_preferred_app_mode) &&
 | 
						|
diff --git chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
 | 
						|
index 23d0611fdb2b5..81fd1055e926e 100644
 | 
						|
--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
 | 
						|
+++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
 | 
						|
@@ -61,7 +61,10 @@ void ChromeBrowserMainExtraPartsViewsLinux::ToolkitInitialized() {
 | 
						|
                               linux_ui_theme->GetNativeTheme()->system_theme());
 | 
						|
   }
 | 
						|
 #if defined(USE_DBUS)
 | 
						|
-  dark_mode_manager_ = std::make_unique<ui::DarkModeManagerLinux>();
 | 
						|
+  if (!ui::NativeTheme::IsForcedDarkMode() &&
 | 
						|
+      !ui::NativeTheme::IsForcedLightMode()) {
 | 
						|
+    dark_mode_manager_ = std::make_unique<ui::DarkModeManagerLinux>();
 | 
						|
+  }
 | 
						|
 #endif
 | 
						|
 }
 | 
						|
 
 | 
						|
diff --git ui/gtk/native_theme_gtk.cc ui/gtk/native_theme_gtk.cc
 | 
						|
index d69b17b004120..5175ea3a785a3 100644
 | 
						|
--- ui/gtk/native_theme_gtk.cc
 | 
						|
+++ ui/gtk/native_theme_gtk.cc
 | 
						|
@@ -164,9 +164,11 @@ void NativeThemeGtk::OnThemeChanged(GtkSettings* settings,
 | 
						|
   // have a light variant and aren't affected by the setting.  Because of this,
 | 
						|
   // experimentally check if the theme is dark by checking if the window
 | 
						|
   // background color is dark.
 | 
						|
-  const SkColor window_bg_color = GetBgColor("");
 | 
						|
-  set_use_dark_colors(IsForcedDarkMode() ||
 | 
						|
-                      color_utils::IsDark(window_bg_color));
 | 
						|
+  if (!IsForcedLightMode()) {
 | 
						|
+    const SkColor window_bg_color = GetBgColor("");
 | 
						|
+    set_use_dark_colors(IsForcedDarkMode() ||
 | 
						|
+                        color_utils::IsDark(window_bg_color));
 | 
						|
+  }
 | 
						|
   set_preferred_color_scheme(CalculatePreferredColorScheme());
 | 
						|
 
 | 
						|
   // GTK doesn't have a native high contrast setting.  Rather, it's implied by
 | 
						|
diff --git ui/native_theme/native_theme.cc ui/native_theme/native_theme.cc
 | 
						|
index f62df6eb7d12b..68f78b5e8bce0 100644
 | 
						|
--- ui/native_theme/native_theme.cc
 | 
						|
+++ ui/native_theme/native_theme.cc
 | 
						|
@@ -143,6 +143,7 @@ void NativeTheme::NotifyOnNativeThemeUpdated() {
 | 
						|
   color_provider_manager.ResetColorProviderCache();
 | 
						|
   for (NativeThemeObserver& observer : native_theme_observers_)
 | 
						|
     observer.OnNativeThemeUpdated(this);
 | 
						|
+  color_provider_manager.AfterNativeThemeUpdated();
 | 
						|
 
 | 
						|
   RecordNumColorProvidersInitializedDuringOnNativeThemeUpdated(
 | 
						|
       color_provider_manager.num_providers_initialized() -
 | 
						|
@@ -276,6 +277,13 @@ bool NativeTheme::IsForcedDarkMode() {
 | 
						|
   return kIsForcedDarkMode;
 | 
						|
 }
 | 
						|
 
 | 
						|
+bool NativeTheme::IsForcedLightMode() {
 | 
						|
+  static bool kIsForcedLightMode =
 | 
						|
+      base::CommandLine::ForCurrentProcess()->HasSwitch(
 | 
						|
+          "force-light-mode");
 | 
						|
+  return kIsForcedLightMode;
 | 
						|
+}
 | 
						|
+
 | 
						|
 bool NativeTheme::IsForcedHighContrast() {
 | 
						|
   static bool kIsForcedHighContrast =
 | 
						|
       base::CommandLine::ForCurrentProcess()->HasSwitch(
 | 
						|
diff --git ui/native_theme/native_theme.h ui/native_theme/native_theme.h
 | 
						|
index 74b3f56ec91a8..78e548bbea4de 100644
 | 
						|
--- ui/native_theme/native_theme.h
 | 
						|
+++ ui/native_theme/native_theme.h
 | 
						|
@@ -597,6 +597,9 @@ class NATIVE_THEME_EXPORT NativeTheme {
 | 
						|
   // Whether dark mode is forced via command-line flag.
 | 
						|
   static bool IsForcedDarkMode();
 | 
						|
 
 | 
						|
+  // Whether light mode is forced via command-line flag.
 | 
						|
+  static bool IsForcedLightMode();
 | 
						|
+
 | 
						|
  protected:
 | 
						|
   explicit NativeTheme(
 | 
						|
       bool should_only_use_dark_colors,
 | 
						|
diff --git ui/native_theme/native_theme_mac.mm ui/native_theme/native_theme_mac.mm
 | 
						|
index 9ca3120cfe3ac..c29c17330a7e5 100644
 | 
						|
--- ui/native_theme/native_theme_mac.mm
 | 
						|
+++ ui/native_theme/native_theme_mac.mm
 | 
						|
@@ -586,11 +586,15 @@ void NativeThemeMac::PaintSelectedMenuItem(
 | 
						|
 
 | 
						|
 void NativeThemeMac::InitializeDarkModeStateAndObserver() {
 | 
						|
   __block auto theme = this;
 | 
						|
-  set_use_dark_colors(IsDarkMode());
 | 
						|
+  if (!IsForcedLightMode()) {
 | 
						|
+    set_use_dark_colors(IsForcedDarkMode() || IsDarkMode());
 | 
						|
+  }
 | 
						|
   set_preferred_color_scheme(CalculatePreferredColorScheme());
 | 
						|
   appearance_observer_ =
 | 
						|
       [[NativeThemeEffectiveAppearanceObserver alloc] initWithHandler:^{
 | 
						|
-        theme->set_use_dark_colors(IsDarkMode());
 | 
						|
+        if (!IsForcedLightMode()) {
 | 
						|
+          theme->set_use_dark_colors(IsForcedDarkMode() || IsDarkMode());
 | 
						|
+        }
 | 
						|
         theme->set_preferred_color_scheme(CalculatePreferredColorScheme());
 | 
						|
         theme->NotifyOnNativeThemeUpdated();
 | 
						|
       }];
 | 
						|
diff --git ui/native_theme/native_theme_win.cc ui/native_theme/native_theme_win.cc
 | 
						|
index 4c922cce6fe89..196fc0a6c07b2 100644
 | 
						|
--- ui/native_theme/native_theme_win.cc
 | 
						|
+++ ui/native_theme/native_theme_win.cc
 | 
						|
@@ -673,14 +673,17 @@ bool NativeThemeWin::ShouldUseDarkColors() const {
 | 
						|
   // Windows high contrast modes are entirely different themes,
 | 
						|
   // so let them take priority over dark mode.
 | 
						|
   // ...unless --force-dark-mode was specified in which case caveat emptor.
 | 
						|
-  if (InForcedColorsMode() && !IsForcedDarkMode())
 | 
						|
+  if (supports_windows_dark_mode_ && IsForcedDarkMode()) {
 | 
						|
+    return true;
 | 
						|
+  }
 | 
						|
+  if (InForcedColorsMode())
 | 
						|
     return false;
 | 
						|
   return NativeTheme::ShouldUseDarkColors();
 | 
						|
 }
 | 
						|
 
 | 
						|
 NativeTheme::PreferredColorScheme
 | 
						|
 NativeThemeWin::CalculatePreferredColorScheme() const {
 | 
						|
-  if (!InForcedColorsMode())
 | 
						|
+  if (!InForcedColorsMode() || !supports_windows_dark_mode_)
 | 
						|
     return NativeTheme::CalculatePreferredColorScheme();
 | 
						|
 
 | 
						|
   // According to the spec, the preferred color scheme for web content is 'dark'
 | 
						|
@@ -1671,8 +1674,9 @@ void NativeThemeWin::RegisterColorFilteringRegkeyObserver() {
 | 
						|
 }
 | 
						|
 
 | 
						|
 void NativeThemeWin::UpdateDarkModeStatus() {
 | 
						|
-  bool dark_mode_enabled = false;
 | 
						|
-  if (hkcu_themes_regkey_.Valid()) {
 | 
						|
+  bool dark_mode_enabled = ShouldUseDarkColors();
 | 
						|
+  if (supports_windows_dark_mode_ && !IsForcedDarkMode() &&
 | 
						|
+      hkcu_themes_regkey_.Valid()) {
 | 
						|
     DWORD apps_use_light_theme = 1;
 | 
						|
     hkcu_themes_regkey_.ReadValueDW(L"AppsUseLightTheme",
 | 
						|
                                     &apps_use_light_theme);
 |