| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_THEMES_THEME_HELPER_H_ |
| #define CHROME_BROWSER_THEMES_THEME_HELPER_H_ |
| |
| #include <optional> |
| |
| #include "base/sequence_checker.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/base/resource/resource_scale_factor.h" |
| #include "ui/base/theme_provider.h" |
| |
| class CustomThemeSupplier; |
| |
| namespace theme_service_internal { |
| class ThemeServiceTest; |
| } |
| |
| namespace gfx { |
| class ImageSkia; |
| class Image; |
| } // namespace gfx |
| |
| namespace color_utils { |
| struct HSL; |
| } |
| |
| // Helper functions for ThemeService as part of implementing the |
| // ui::ThemeProvider interface with respect to a given CustomThemeSupplier and |
| // incognito state. |
| class ThemeHelper { |
| public: |
| // The default theme if we haven't installed a theme yet or if we've clicked |
| // the "Use Classic" button. |
| static const char kDefaultThemeID[]; |
| |
| // Whether |theme_supplier| is installed through extensions. |
| // |UsingExtensionTheme| and |UsingDefaultTheme| are not mutually exclusive as |
| // default theme can be installed through extensions. |
| static bool IsExtensionTheme(const CustomThemeSupplier* theme_supplier); |
| |
| // Whether we are using an autogenerated theme. |
| static bool IsAutogeneratedTheme(const CustomThemeSupplier* theme_supplier); |
| |
| // Whether |theme_supplier| is a default theme. |
| static bool IsDefaultTheme(const CustomThemeSupplier* theme_supplier); |
| |
| // Whether |theme_supplier| is what users would think of as a "custom theme" |
| // (that is, an extension or autogenerated theme). |
| static bool IsCustomTheme(const CustomThemeSupplier* theme_supplier); |
| |
| static bool HasCustomImage(int id, const CustomThemeSupplier* theme_supplier); |
| |
| ThemeHelper(); |
| virtual ~ThemeHelper(); |
| |
| ThemeHelper(const ThemeHelper&) = delete; |
| ThemeHelper& operator=(const ThemeHelper&) = delete; |
| |
| // Gets the effective value of a themeable display property, either from the |
| // `theme_supplier` if available or the default. |
| int GetDisplayProperty(int id, |
| const CustomThemeSupplier* theme_supplier) const; |
| |
| base::RefCountedMemory* GetRawData( |
| int id, |
| const CustomThemeSupplier* theme_supplier, |
| ui::ResourceScaleFactor scale_factor) const; |
| |
| // Get the specified tint - |id| is one of the TINT_* enum values. |
| color_utils::HSL GetTint(int id, |
| bool incognito, |
| const CustomThemeSupplier* theme_supplier) const; |
| |
| // These methods provide the implementation for ui::ThemeProvider (exposed |
| // via BrowserThemeProvider). |
| gfx::ImageSkia* GetImageSkiaNamed( |
| int id, |
| bool incognito, |
| const CustomThemeSupplier* theme_supplier) const; |
| |
| // Implementation for ui::ThemeProvider. |
| virtual bool ShouldUseNativeFrame( |
| const CustomThemeSupplier* theme_supplier) const; |
| |
| void DCheckCalledOnValidSequence() const { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| } |
| |
| // Gets the default value of a themeable display property. |
| virtual int GetDefaultDisplayProperty(int id) const; |
| |
| private: |
| friend class theme_service_internal::ThemeServiceTest; |
| |
| // Whether dark default colors/tints should be used, if available. |
| static bool UseDarkModeColors(const CustomThemeSupplier* theme_supplier); |
| |
| // Returns a cross platform image for an id. |
| gfx::Image GetImageNamed(int id, |
| bool incognito, |
| const CustomThemeSupplier* theme_supplier) const; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| }; |
| |
| #endif // CHROME_BROWSER_THEMES_THEME_HELPER_H_ |