| // 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_BROWSER_VERSION_SERVICE_ASH_H_ |
| #define CHROME_BROWSER_ASH_CROSAPI_BROWSER_VERSION_SERVICE_ASH_H_ |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chromeos/crosapi/mojom/browser_version.mojom.h" |
| #include "components/component_updater/component_updater_service.h" |
| #include "mojo/public/cpp/bindings/receiver_set.h" |
| #include "mojo/public/cpp/bindings/remote_set.h" |
| |
| namespace crosapi { |
| |
| // The ash-chrome implementation of the BrowserVersion crosapi interface. |
| class BrowserVersionServiceAsh |
| : public mojom::BrowserVersionService, |
| public component_updater::ComponentUpdateService::Observer { |
| public: |
| class Delegate { |
| public: |
| virtual ~Delegate() = default; |
| |
| // Returns the latest available lacros-chrome version that can be launched. |
| virtual base::Version GetLatestLaunchableBrowserVersion() const = 0; |
| |
| // Returns true if there is a more recent lacros-chrome binary available |
| // than what has currently been launched. |
| virtual bool IsNewerBrowserAvailable() const = 0; |
| }; |
| |
| explicit BrowserVersionServiceAsh( |
| component_updater::ComponentUpdateService* component_updater_service); |
| |
| BrowserVersionServiceAsh(const BrowserVersionServiceAsh&) = delete; |
| BrowserVersionServiceAsh& operator=(const BrowserVersionServiceAsh&) = delete; |
| ~BrowserVersionServiceAsh() override; |
| |
| void BindReceiver( |
| mojo::PendingReceiver<mojom::BrowserVersionService> receiver); |
| |
| // crosapi::mojom::BrowserVersionService: |
| void AddBrowserVersionObserver( |
| mojo::PendingRemote<mojom::BrowserVersionObserver> observer) override; |
| void GetInstalledBrowserVersion( |
| GetInstalledBrowserVersionCallback callback) override; |
| |
| const Delegate* GetDelegate() const; |
| |
| void set_delegate_for_testing(const Delegate* delegate) { |
| delegate_for_testing_ = delegate; |
| } |
| |
| private: |
| // component_updater::ComponentUpdateService::Observer: |
| void OnEvent(Events event, const std::string& id) override; |
| |
| // Returns the stringified version of the latest available lacros-chrome that |
| // can be launched. |
| std::string GetLatestLaunchableBrowserVersion() const; |
| |
| const raw_ptr<component_updater::ComponentUpdateService> |
| component_update_service_; |
| |
| // Optional delegate member for testing. |
| raw_ptr<const Delegate> delegate_for_testing_ = nullptr; |
| |
| // Support any number of connections. |
| mojo::ReceiverSet<mojom::BrowserVersionService> receivers_; |
| |
| // Support any number of observers. |
| mojo::RemoteSet<mojom::BrowserVersionObserver> observers_; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // CHROME_BROWSER_ASH_CROSAPI_BROWSER_VERSION_SERVICE_ASH_H_ |