|  | // Copyright 2022 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_ASH_CROSAPI_WEB_APP_SERVICE_ASH_H_ | 
|  | #define CHROME_BROWSER_ASH_CROSAPI_WEB_APP_SERVICE_ASH_H_ | 
|  |  | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "base/observer_list.h" | 
|  | #include "base/observer_list_types.h" | 
|  | #include "chromeos/crosapi/mojom/web_app_service.mojom.h" | 
|  | #include "mojo/public/cpp/bindings/pending_receiver.h" | 
|  | #include "mojo/public/cpp/bindings/pending_remote.h" | 
|  | #include "mojo/public/cpp/bindings/receiver_set.h" | 
|  | #include "mojo/public/cpp/bindings/remote_set.h" | 
|  |  | 
|  | namespace crosapi { | 
|  |  | 
|  | // Created in ash-chrome. Allows lacros-chrome: | 
|  | // 1) to query web-app-related information in ash-chrome, | 
|  | // 2) to register its own |crosapi::mojom::WebAppProviderBridge| to let | 
|  | //    ash-chrome to modify or query WebAppProvider in lacros-chrome. | 
|  | class WebAppServiceAsh : public crosapi::mojom::WebAppService { | 
|  | public: | 
|  | class Observer : public base::CheckedObserver { | 
|  | public: | 
|  | virtual void OnWebAppProviderBridgeConnected() {} | 
|  | virtual void OnWebAppProviderBridgeDisconnected() {} | 
|  | }; | 
|  |  | 
|  | WebAppServiceAsh(); | 
|  | ~WebAppServiceAsh() override; | 
|  |  | 
|  | void AddObserver(Observer* observer); | 
|  | void RemoveObserver(Observer* observer); | 
|  |  | 
|  | void BindReceiver(mojo::PendingReceiver<mojom::WebAppService> receiver); | 
|  |  | 
|  | // crosapi::mojom::WebAppService: | 
|  | void RegisterWebAppProviderBridge( | 
|  | mojo::PendingRemote<mojom::WebAppProviderBridge> web_app_provider_bridge) | 
|  | override; | 
|  |  | 
|  | void GetAssociatedAndroidPackage( | 
|  | const std::string& app_id, | 
|  | GetAssociatedAndroidPackageCallback callback) override; | 
|  |  | 
|  | // Returns the web app provider bridge of the currently connected | 
|  | // lacros-chrome, or nullptr if there is no connection. | 
|  | mojom::WebAppProviderBridge* GetWebAppProviderBridge(); | 
|  |  | 
|  | private: | 
|  | // Called when |web_app_provider_bridge_| is disconnected. | 
|  | void OnBridgeDisconnected(); | 
|  |  | 
|  | // Crosapi clients connected to this object. | 
|  | mojo::ReceiverSet<mojom::WebAppService> receivers_; | 
|  |  | 
|  | // Remote lacros-chrome web app bridge to send commands to. | 
|  | // At the moment only a single connection is supported. | 
|  | // TODO(crbug.com/1174246): Support SxS lacros. | 
|  | mojo::Remote<mojom::WebAppProviderBridge> web_app_provider_bridge_; | 
|  |  | 
|  | base::ObserverList<Observer> observers_; | 
|  |  | 
|  | base::WeakPtrFactory<WebAppServiceAsh> weak_factory_{this}; | 
|  | }; | 
|  |  | 
|  | }  // namespace crosapi | 
|  |  | 
|  | #endif  // CHROME_BROWSER_ASH_CROSAPI_WEB_APP_SERVICE_ASH_H_ |