|  | // 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, ExperimentalAsh> | 
|  | 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_ |