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 +#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);