| // Copyright 2021 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_APPS_APP_SERVICE_INSTANCE_REGISTRY_UPDATER_H_ |
| #define CHROME_BROWSER_APPS_APP_SERVICE_INSTANCE_REGISTRY_UPDATER_H_ |
| |
| #include "base/memory/raw_ref.h" |
| #include "base/scoped_multi_source_observation.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/apps/browser_instance/browser_app_instance_observer.h" |
| #include "chrome/browser/apps/browser_instance/browser_app_instance_registry.h" |
| #include "components/services/app_service/public/cpp/instance.h" |
| #include "ui/aura/env.h" |
| #include "ui/aura/env_observer.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_observer.h" |
| |
| namespace apps { |
| |
| class InstanceRegistry; |
| |
| // Created in ash-chrome. Listens to |BrowserAppInstanceRegistry| events and |
| // aura::Windows associated with them and updates |InstanceRegistry|. |
| class InstanceRegistryUpdater : public BrowserAppInstanceObserver, |
| public aura::EnvObserver, |
| public aura::WindowObserver { |
| public: |
| InstanceRegistryUpdater( |
| BrowserAppInstanceRegistry& browser_app_instance_registry, |
| InstanceRegistry& instance_registry); |
| InstanceRegistryUpdater(const InstanceRegistryUpdater&) = delete; |
| InstanceRegistryUpdater& operator=(const InstanceRegistryUpdater&) = delete; |
| ~InstanceRegistryUpdater() override; |
| |
| // BrowserAppInstanceObserver overrides: |
| void OnBrowserWindowAdded(const BrowserWindowInstance& instance) override; |
| void OnBrowserWindowUpdated(const BrowserWindowInstance& instance) override; |
| void OnBrowserWindowRemoved(const BrowserWindowInstance& instance) override; |
| void OnBrowserAppAdded(const BrowserAppInstance& instance) override; |
| void OnBrowserAppUpdated(const BrowserAppInstance& instance) override; |
| void OnBrowserAppRemoved(const BrowserAppInstance& instance) override; |
| |
| // aura::EnvObserver overrides: |
| void OnWindowInitialized(aura::Window* window) override; |
| |
| // aura::WindowObserver overrides: |
| void OnWindowVisibilityChanged(aura::Window* window, bool visible) override; |
| void OnWindowDestroying(aura::Window* window) override; |
| |
| private: |
| const raw_ref<BrowserAppInstanceRegistry> browser_app_instance_registry_; |
| const raw_ref<InstanceRegistry> instance_registry_; |
| |
| void OnInstance(const base::UnguessableToken& instance_id, |
| const std::string& app_id, |
| aura::Window* window, |
| InstanceState state); |
| |
| base::ScopedObservation<aura::Env, aura::EnvObserver> env_observer_{this}; |
| base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver> |
| window_observations_{this}; |
| base::ScopedObservation<BrowserAppInstanceRegistry, |
| BrowserAppInstanceObserver> |
| browser_app_instance_registry_observation_{this}; |
| }; |
| |
| } // namespace apps |
| |
| #endif // CHROME_BROWSER_APPS_APP_SERVICE_INSTANCE_REGISTRY_UPDATER_H_ |