| // 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_ASH_CROSAPI_WEB_PAGE_INFO_ASH_H_ |
| #define CHROME_BROWSER_ASH_CROSAPI_WEB_PAGE_INFO_ASH_H_ |
| |
| #include "base/functional/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/observer_list_types.h" |
| #include "chromeos/crosapi/mojom/web_page_info.mojom.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 { |
| |
| // Implements the crosapi interface for web page info. Lives in Ash-Chrome on |
| // the UI thread. |
| class WebPageInfoFactoryAsh : public mojom::WebPageInfoFactory { |
| public: |
| class Observer : public base::CheckedObserver { |
| public: |
| virtual void OnLacrosInstanceRegistered( |
| const mojo::RemoteSetElementId& remote_id) = 0; |
| virtual void OnLacrosInstanceDisconnected( |
| const mojo::RemoteSetElementId& remote_id) = 0; |
| }; |
| |
| WebPageInfoFactoryAsh(); |
| WebPageInfoFactoryAsh(const WebPageInfoFactoryAsh&) = delete; |
| WebPageInfoFactoryAsh& operator=(const WebPageInfoFactoryAsh&) = delete; |
| ~WebPageInfoFactoryAsh() override; |
| |
| void BindReceiver(mojo::PendingReceiver<mojom::WebPageInfoFactory> receiver); |
| |
| // crosapi::mojom::WebPageInfoFactory: |
| void RegisterWebPageInfoProvider( |
| mojo::PendingRemote<mojom::WebPageInfoProvider> web_page_info_provider) |
| override; |
| |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| // Called by smart dim to request web page info from lacros. When receiving a |
| // WebPageInfoPtr, runs the callback. |
| using RequestCurrentWebPageInfoCallback = |
| base::OnceCallback<void(mojom::WebPageInfoPtr)>; |
| void RequestCurrentWebPageInfo(const mojo::RemoteSetElementId& remote_id, |
| RequestCurrentWebPageInfoCallback callback); |
| |
| private: |
| void OnDisconnected(mojo::RemoteSetElementId mojo_id); |
| |
| // Any number of crosapi clients can connect to this class. |
| mojo::ReceiverSet<mojom::WebPageInfoFactory> receivers_; |
| |
| // This set maintains all registered web page info providers. |
| mojo::RemoteSet<mojom::WebPageInfoProvider> web_page_info_providers_; |
| |
| // The customers of lacros web page info. When `RegisterWebPageInfoProvider` |
| // is called, notify observers with the RemoteSetElementId. |
| base::ObserverList<Observer> observers_; |
| |
| base::WeakPtrFactory<WebPageInfoFactoryAsh> weak_factory_{this}; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // CHROME_BROWSER_ASH_CROSAPI_WEB_PAGE_INFO_ASH_H_ |