|  | // 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 CHROME_BROWSER_EXTENSIONS_API_TABS_APP_WINDOW_HELPER_H_ | 
|  | #define CHROME_BROWSER_EXTENSIONS_API_TABS_APP_WINDOW_HELPER_H_ | 
|  |  | 
|  | #include <map> | 
|  | #include <memory> | 
|  |  | 
|  | #include "base/functional/callback.h" | 
|  | #include "base/memory/raw_ptr.h" | 
|  | #include "base/scoped_observation.h" | 
|  | #include "extensions/browser/app_window/app_window_registry.h" | 
|  | #include "extensions/buildflags/buildflags.h" | 
|  |  | 
|  | static_assert(BUILDFLAG(ENABLE_PLATFORM_APPS)); | 
|  |  | 
|  | class Profile; | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | class AppWindow; | 
|  | class AppWindowController; | 
|  | class WindowController; | 
|  |  | 
|  | // A helper class to handle creating AppWindowControllers for each new | 
|  | // AppWindow, as well as notifying of window focus changes. | 
|  | class AppWindowHelper : public AppWindowRegistry::Observer { | 
|  | public: | 
|  | using ActiveWindowChangedCallback = | 
|  | base::RepeatingCallback<void(WindowController*)>; | 
|  |  | 
|  | AppWindowHelper(Profile* profile, ActiveWindowChangedCallback callback); | 
|  | ~AppWindowHelper() override; | 
|  |  | 
|  | // AppWindowRegistry::Observer: | 
|  | void OnAppWindowAdded(AppWindow* app_window) override; | 
|  | void OnAppWindowRemoved(AppWindow* app_window) override; | 
|  | void OnAppWindowActivated(AppWindow* app_window) override; | 
|  |  | 
|  | private: | 
|  | void AddAppWindow(AppWindow* app_window); | 
|  |  | 
|  | raw_ptr<Profile> profile_; | 
|  |  | 
|  | ActiveWindowChangedCallback active_window_changed_callback_; | 
|  |  | 
|  | // Map of AppWindows. The key is the unique SessionId from the AppWindow. | 
|  | using AppWindowMap = std::map<int, std::unique_ptr<AppWindowController>>; | 
|  | AppWindowMap app_windows_; | 
|  |  | 
|  | base::ScopedObservation<AppWindowRegistry, AppWindowRegistry::Observer> | 
|  | app_registry_observation_{this}; | 
|  | }; | 
|  |  | 
|  | }  // namespace extensions | 
|  |  | 
|  | #endif  // CHROME_BROWSER_EXTENSIONS_API_TABS_APP_WINDOW_HELPER_H_ |