cef/patch/patches/color_provider_manager_3610...

105 lines
3.5 KiB
Diff

diff --git ui/color/color_provider_manager.cc ui/color/color_provider_manager.cc
index 452f80c94d684..671f36923741d 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