| diff --git base/win/dark_mode_support.cc base/win/dark_mode_support.cc |
| index 325bc70b6ba97..d4117dbb1d4d8 100644 |
| --- base/win/dark_mode_support.cc |
| +++ base/win/dark_mode_support.cc |
| @@ -6,6 +6,7 @@ |
| |
| #include <windows.h> |
| |
| +#include "base/command_line.h" |
| #include "base/native_library.h" |
| #include "base/win/windows_version.h" |
| |
| @@ -85,11 +86,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 ui/native_theme/native_theme_mac.mm ui/native_theme/native_theme_mac.mm |
| index e6078b2a45d88..bf051fb8a02f4 100644 |
| --- ui/native_theme/native_theme_mac.mm |
| +++ ui/native_theme/native_theme_mac.mm |
| @@ -50,6 +50,13 @@ bool InvertedColors() { |
| return NSWorkspace.sharedWorkspace.accessibilityDisplayShouldInvertColors; |
| } |
| |
| +bool IsForcedLightMode() { |
| + static bool kIsForcedLightMode = |
| + base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + "force-light-mode"); |
| + return kIsForcedLightMode; |
| +} |
| + |
| } // namespace |
| |
| // Helper object to respond to light mode/dark mode changeovers. |
| @@ -577,11 +584,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(); |
| }]; |
| @@ -590,7 +601,9 @@ void NativeThemeMac::InitializeDarkModeStateAndObserver() { |
| void NativeThemeMac::ConfigureWebInstance() { |
| // NativeThemeAura is used as web instance so we need to initialize its state. |
| NativeTheme* web_instance = NativeTheme::GetInstanceForWeb(); |
| - web_instance->set_use_dark_colors(IsDarkMode()); |
| + if (!IsForcedLightMode()) { |
| + web_instance->set_use_dark_colors(IsForcedDarkMode() || IsDarkMode()); |
| + } |
| web_instance->set_preferred_color_scheme(CalculatePreferredColorScheme()); |
| web_instance->SetPreferredContrast(CalculatePreferredContrast()); |
| web_instance->set_prefers_reduced_transparency(PrefersReducedTransparency()); |
| diff --git ui/native_theme/native_theme_win.cc ui/native_theme/native_theme_win.cc |
| index 50647269ec84f..c947bd2717d04 100644 |
| --- ui/native_theme/native_theme_win.cc |
| +++ ui/native_theme/native_theme_win.cc |
| @@ -662,14 +662,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' |
| @@ -1660,8 +1663,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); |