blob: 738a5b0d8abe2d12413206c6e733e64973af28aa [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_NATIVE_THEME_MOCK_OS_SETTINGS_PROVIDER_H_
#define UI_NATIVE_THEME_MOCK_OS_SETTINGS_PROVIDER_H_
#include <optional>
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/time/time.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/color/color_provider_key.h"
#include "ui/native_theme/native_theme.h"
#include "ui/native_theme/os_settings_provider.h"
namespace ui {
// Mock object to allow tests to control OS-level theme settings. Instantiate
// this in your test fixture to have it override the real provider; it will
// automatically notify the NativeTheme of changes made via the setters.
class COMPONENT_EXPORT(NATIVE_THEME) MockOsSettingsProvider
: public OsSettingsProvider {
public:
MockOsSettingsProvider();
~MockOsSettingsProvider() override;
// OsSettingsProvider:
bool DarkColorSchemeAvailable() const override;
NativeTheme::PreferredColorScheme PreferredColorScheme() const override;
ColorProviderKey::UserColorSource PreferredColorSource() const override;
NativeTheme::PreferredContrast PreferredContrast() const override;
bool PrefersReducedTransparency() const override;
bool PrefersInvertedColors() const override;
bool ForcedColorsActive() const override;
std::optional<SkColor> AccentColor() const override;
std::optional<SkColor> Color(ColorId color_id) const override;
std::optional<ColorProviderKey::SchemeVariant> SchemeVariant() const override;
base::TimeDelta CaretBlinkInterval() const override;
// Setters for all the above settings.
void SetDarkColorSchemeAvailable(bool dark_color_scheme_available);
void SetPreferredColorScheme(
NativeTheme::PreferredColorScheme preferred_color_scheme);
void SetPreferredColorSource(
ColorProviderKey::UserColorSource preferred_color_source);
void SetPreferredContrast(NativeTheme::PreferredContrast preferred_contrast);
void SetPrefersReducedTransparency(bool prefers_reduced_transparency);
void SetPrefersInvertedColors(bool prefers_inverted_colors);
void SetForcedColorsActive(bool forced_colors_active);
void SetAccentColor(SkColor accent_color);
void SetColor(ColorId color_id, SkColor color);
void SetSchemeVariant(ColorProviderKey::SchemeVariant scheme_variant);
void SetCaretBlinkInterval(base::TimeDelta caret_blink_interval);
private:
bool dark_color_scheme_available_ = true;
NativeTheme::PreferredColorScheme preferred_color_scheme_ =
NativeTheme::PreferredColorScheme::kLight;
ColorProviderKey::UserColorSource preferred_color_source_ =
ColorProviderKey::UserColorSource::kBaseline;
NativeTheme::PreferredContrast preferred_contrast_ =
NativeTheme::PreferredContrast::kNoPreference;
bool prefers_reduced_transparency_ = false;
bool prefers_inverted_colors_ = false;
bool forced_colors_active_ = false;
std::optional<SkColor> accent_color_;
base::flat_map<ColorId, SkColor> colors_;
std::optional<ColorProviderKey::SchemeVariant> scheme_variant_;
base::TimeDelta caret_blink_interval_ = kDefaultCaretBlinkInterval;
};
} // namespace ui
#endif // UI_NATIVE_THEME_MOCK_OS_SETTINGS_PROVIDER_H_