105 lines
3.5 KiB
Diff
105 lines
3.5 KiB
Diff
|
diff --git ui/color/color_provider_manager.cc ui/color/color_provider_manager.cc
|
||
|
index a0933fab35037..7a381e24a8816 100644
|
||
|
--- ui/color/color_provider_manager.cc
|
||
|
+++ ui/color/color_provider_manager.cc
|
||
|
@@ -46,6 +46,15 @@ std::optional<GlobalManager>& GetGlobalManager() {
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
+void ColorProviderManager::AddObserver(ColorProviderManagerObserver* observer) {
|
||
|
+ observers_.AddObserver(observer);
|
||
|
+}
|
||
|
+
|
||
|
+void ColorProviderManager::RemoveObserver(
|
||
|
+ ColorProviderManagerObserver* observer) {
|
||
|
+ observers_.RemoveObserver(observer);
|
||
|
+}
|
||
|
+
|
||
|
ColorProviderManager::ColorProviderManager() {
|
||
|
ResetColorProviderInitializerList();
|
||
|
}
|
||
|
@@ -86,8 +95,19 @@ void ColorProviderManager::ResetColorProviderInitializerList() {
|
||
|
}
|
||
|
|
||
|
void ColorProviderManager::ResetColorProviderCache() {
|
||
|
- if (!color_providers_.empty())
|
||
|
+ if (!color_providers_.empty()) {
|
||
|
color_providers_.clear();
|
||
|
+
|
||
|
+ for (ColorProviderManagerObserver& observer : observers_) {
|
||
|
+ observer.OnColorProviderCacheReset();
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+void ColorProviderManager::AfterNativeThemeUpdated() {
|
||
|
+ for (ColorProviderManagerObserver& observer : observers_) {
|
||
|
+ observer.OnAfterNativeThemeUpdated();
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
void ColorProviderManager::AppendColorProviderInitializer(
|
||
|
diff --git ui/color/color_provider_manager.h ui/color/color_provider_manager.h
|
||
|
index 67341dd5fc3d6..ee70de7f7fd44 100644
|
||
|
--- ui/color/color_provider_manager.h
|
||
|
+++ ui/color/color_provider_manager.h
|
||
|
@@ -15,6 +15,7 @@
|
||
|
#include "base/containers/flat_map.h"
|
||
|
#include "base/functional/callback.h"
|
||
|
#include "base/memory/weak_ptr.h"
|
||
|
+#include "base/observer_list.h"
|
||
|
#include "third_party/skia/include/core/SkColor.h"
|
||
|
#include "ui/color/color_provider_key.h"
|
||
|
#include "ui/color/system_theme.h"
|
||
|
@@ -24,6 +25,19 @@ namespace ui {
|
||
|
|
||
|
class ColorProvider;
|
||
|
|
||
|
+// Observers which are notified when the color provider manager changes.
|
||
|
+class COMPONENT_EXPORT(COLOR) ColorProviderManagerObserver {
|
||
|
+ public:
|
||
|
+ // Called when the color provider cache is reset.
|
||
|
+ virtual void OnColorProviderCacheReset() {}
|
||
|
+
|
||
|
+ // Called after NativeTheme sends OnNativeThemeUpdated notifications.
|
||
|
+ virtual void OnAfterNativeThemeUpdated() {}
|
||
|
+
|
||
|
+ protected:
|
||
|
+ virtual ~ColorProviderManagerObserver() = default;
|
||
|
+};
|
||
|
+
|
||
|
// Manages and provides color providers.
|
||
|
//
|
||
|
// In most cases, use ColorProviderManager::Get() to obtain an instance to the
|
||
|
@@ -48,6 +62,9 @@ class COMPONENT_EXPORT(COLOR) ColorProviderManager {
|
||
|
// Clears the ColorProviders stored in `color_providers_`.
|
||
|
void ResetColorProviderCache();
|
||
|
|
||
|
+ // Called after NativeTheme sends OnNativeThemeUpdated notifications.
|
||
|
+ void AfterNativeThemeUpdated();
|
||
|
+
|
||
|
// Appends `initializer` to the end of the current `initializer_list_`.
|
||
|
void AppendColorProviderInitializer(
|
||
|
ColorProviderInitializerList::CallbackType Initializer);
|
||
|
@@ -59,6 +76,10 @@ class COMPONENT_EXPORT(COLOR) ColorProviderManager {
|
||
|
return num_providers_initialized_;
|
||
|
}
|
||
|
|
||
|
+ // Add or remove observers.
|
||
|
+ void AddObserver(ColorProviderManagerObserver* observer);
|
||
|
+ void RemoveObserver(ColorProviderManagerObserver* observer);
|
||
|
+
|
||
|
protected:
|
||
|
ColorProviderManager();
|
||
|
virtual ~ColorProviderManager();
|
||
|
@@ -76,6 +97,9 @@ class COMPONENT_EXPORT(COLOR) ColorProviderManager {
|
||
|
// Tracks the number of ColorProviders constructed and initialized by the
|
||
|
// manager for metrics purposes.
|
||
|
size_t num_providers_initialized_ = 0;
|
||
|
+
|
||
|
+ base::ObserverList<ColorProviderManagerObserver>::UncheckedAndDanglingUntriaged
|
||
|
+ observers_;
|
||
|
};
|
||
|
|
||
|
} // namespace ui
|