blob: 208a1f40b0d23df4544d29740c90289c0f7b3fce [file]
// Copyright 2026 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_UI_BROWSER_WINDOW_THEME_OBSERVER_H_
#define CHROME_BROWSER_UI_BROWSER_WINDOW_THEME_OBSERVER_H_
#include "base/callback_list.h"
#include "base/scoped_observation.h"
#include "chrome/browser/themes/theme_service.h"
#include "chrome/browser/themes/theme_service_observer.h"
#include "chrome/browser/ui/browser_window.h"
#include "ui/base/unowned_user_data/scoped_unowned_user_data.h"
class BrowserWindowInterface;
// Observes ThemeService for theme changes and notifies registered listeners.
// This was previously handled directly by Browser.
class BrowserWindowThemeObserver : public ThemeServiceObserver {
public:
DECLARE_USER_DATA(BrowserWindowThemeObserver);
using ThemeChangedCallback =
base::RepeatingCallback<void(BrowserThemeChangeType)>;
explicit BrowserWindowThemeObserver(BrowserWindowInterface* browser);
BrowserWindowThemeObserver(const BrowserWindowThemeObserver&) = delete;
BrowserWindowThemeObserver& operator=(const BrowserWindowThemeObserver&) =
delete;
~BrowserWindowThemeObserver() override;
static BrowserWindowThemeObserver* From(BrowserWindowInterface* browser);
// Register a callback to be invoked when the theme changes.
base::CallbackListSubscription RegisterThemeChangedCallback(
ThemeChangedCallback callback);
// Notify all listeners of a theme change with the given type.
// Used by AppBrowserController to notify web app theme changes.
void NotifyThemeChanged(BrowserThemeChangeType type);
// ThemeServiceObserver:
void OnThemeChanged() override;
private:
base::RepeatingCallbackList<void(BrowserThemeChangeType)>
theme_changed_callbacks_;
base::ScopedObservation<ThemeService, ThemeServiceObserver>
theme_service_observation_{this};
ui::ScopedUnownedUserData<BrowserWindowThemeObserver>
scoped_unowned_user_data_;
};
#endif // CHROME_BROWSER_UI_BROWSER_WINDOW_THEME_OBSERVER_H_