blob: fce46f71e246dcc0ba2a9fe73655caae39942675 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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_CROSAPI_ASH_H_
#define CHROME_BROWSER_ASH_CROSAPI_CROSAPI_ASH_H_
#include <map>
#include <memory>
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ash/crosapi/crosapi_id.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "chromeos/crosapi/mojom/task_manager.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
namespace crosapi {
class AutomationAsh;
class BrowserServiceHostAsh;
class CertDatabaseAsh;
class ClipboardAsh;
class ClipboardHistoryAsh;
class ContentProtectionAsh;
class DeviceAttributesAsh;
class DownloadControllerAsh;
class DriveIntegrationServiceAsh;
class FeedbackAsh;
class FileManagerAsh;
class IdleServiceAsh;
class ImageWriterAsh;
class KeystoreServiceAsh;
class LocalPrinterAsh;
class MessageCenterAsh;
class MetricsReportingAsh;
class NativeThemeServiceAsh;
class NetworkingAttributesAsh;
class PowerAsh;
class PrefsAsh;
class RemotingAsh;
class ResourceManagerAsh;
class ScreenManagerAsh;
class SelectFileAsh;
class SystemDisplayAsh;
class TaskManagerAsh;
class WebPageInfoFactoryAsh;
class TestControllerAsh;
class UrlHandlerAsh;
class VideoCaptureDeviceFactoryAsh;
// Implementation of Crosapi in Ash. It provides a set of APIs that
// crosapi clients, such as lacros-chrome, can call into.
class CrosapiAsh : public mojom::Crosapi {
public:
CrosapiAsh();
~CrosapiAsh() override;
// Binds the given receiver to this instance.
// |disconnected_handler| is called on the connection lost.
void BindReceiver(mojo::PendingReceiver<mojom::Crosapi> pending_receiver,
CrosapiId crosapi_id,
base::OnceClosure disconnect_handler);
// crosapi::mojom::Crosapi:
void BindAutomationDeprecated(
mojo::PendingReceiver<mojom::Automation> receiver) override;
void BindAutomationFactory(
mojo::PendingReceiver<mojom::AutomationFactory> receiver) override;
void BindAccountManager(
mojo::PendingReceiver<mojom::AccountManager> receiver) override;
void BindBrowserServiceHost(
mojo::PendingReceiver<mojom::BrowserServiceHost> receiver) override;
void BindCertDatabase(
mojo::PendingReceiver<mojom::CertDatabase> receiver) override;
void BindChromeAppPublisher(
mojo::PendingReceiver<mojom::AppPublisher> receiver) override;
void BindClipboard(mojo::PendingReceiver<mojom::Clipboard> receiver) override;
void BindClipboardHistory(
mojo::PendingReceiver<mojom::ClipboardHistory> receiver) override;
void BindContentProtection(
mojo::PendingReceiver<mojom::ContentProtection> receiver) override;
void BindDeviceAttributes(
mojo::PendingReceiver<mojom::DeviceAttributes> receiver) override;
void BindHoldingSpaceService(
mojo::PendingReceiver<mojom::HoldingSpaceService> receiver) override;
void BindDownloadController(
mojo::PendingReceiver<mojom::DownloadController> receiver) override;
void BindDriveIntegrationService(
mojo::PendingReceiver<mojom::DriveIntegrationService> receiver) override;
void BindFileManager(
mojo::PendingReceiver<mojom::FileManager> receiver) override;
void BindIdleService(
mojo::PendingReceiver<mojom::IdleService> receiver) override;
void BindImageWriter(
mojo::PendingReceiver<mojom::ImageWriter> receiver) override;
void BindKeystoreService(
mojo::PendingReceiver<mojom::KeystoreService> receiver) override;
void BindLocalPrinter(
mojo::PendingReceiver<mojom::LocalPrinter> receiver) override;
void BindMessageCenter(
mojo::PendingReceiver<mojom::MessageCenter> receiver) override;
void BindMetricsReporting(
mojo::PendingReceiver<mojom::MetricsReporting> receiver) override;
void BindNativeThemeService(
mojo::PendingReceiver<mojom::NativeThemeService> receiver) override;
void BindNetworkingAttributes(
mojo::PendingReceiver<mojom::NetworkingAttributes> receiver) override;
void BindPower(mojo::PendingReceiver<mojom::Power> receiver) override;
void BindPrefs(mojo::PendingReceiver<mojom::Prefs> receiver) override;
void BindRemoting(mojo::PendingReceiver<mojom::Remoting> receiver) override;
void BindResourceManager(
mojo::PendingReceiver<mojom::ResourceManager> receiver) override;
void BindScreenManager(
mojo::PendingReceiver<mojom::ScreenManager> receiver) override;
void BindSelectFile(
mojo::PendingReceiver<mojom::SelectFile> receiver) override;
void BindSensorHalClient(
mojo::PendingRemote<chromeos::sensors::mojom::SensorHalClient> remote)
override;
void BindHidManager(
mojo::PendingReceiver<device::mojom::HidManager> receiver) override;
void BindFeedback(mojo::PendingReceiver<mojom::Feedback> receiver) override;
void OnBrowserStartup(mojom::BrowserInfoPtr browser_info) override;
void BindMediaSessionController(
mojo::PendingReceiver<media_session::mojom::MediaControllerManager>
receiver) override;
void BindMediaSessionAudioFocus(
mojo::PendingReceiver<media_session::mojom::AudioFocusManager> receiver)
override;
void BindMediaSessionAudioFocusDebug(
mojo::PendingReceiver<media_session::mojom::AudioFocusManagerDebug>
receiver) override;
void BindSystemDisplay(
mojo::PendingReceiver<mojom::SystemDisplay> receiver) override;
void BindWebPageInfoFactory(
mojo::PendingReceiver<mojom::WebPageInfoFactory> receiver) override;
void BindTaskManager(
mojo::PendingReceiver<mojom::TaskManager> receiver) override;
void BindTestController(
mojo::PendingReceiver<mojom::TestController> receiver) override;
void BindUrlHandler(
mojo::PendingReceiver<mojom::UrlHandler> receiver) override;
void BindMachineLearningService(
mojo::PendingReceiver<
chromeos::machine_learning::mojom::MachineLearningService> receiver)
override;
void BindVideoCaptureDeviceFactory(
mojo::PendingReceiver<mojom::VideoCaptureDeviceFactory> receiver)
override;
void BindWebAppPublisher(
mojo::PendingReceiver<mojom::AppPublisher> receiver) override;
BrowserServiceHostAsh* browser_service_host_ash() {
return browser_service_host_ash_.get();
}
AutomationAsh* automation_ash() { return automation_ash_.get(); }
DownloadControllerAsh* download_controller_ash() {
return download_controller_ash_.get();
}
WebPageInfoFactoryAsh* web_page_info_factory_ash() {
return web_page_info_factory_ash_.get();
}
ImageWriterAsh* image_writer_ash() { return image_writer_ash_.get(); }
LocalPrinterAsh* local_printer_ash() { return local_printer_ash_.get(); }
NetworkingAttributesAsh* networking_attributes_ash() {
return networking_attributes_ash_.get();
}
TaskManagerAsh* task_manager_ash() { return task_manager_ash_.get(); }
KeystoreServiceAsh* keystore_service_ash() {
return keystore_service_ash_.get();
}
private:
// Called when a connection is lost.
void OnDisconnected();
std::unique_ptr<AutomationAsh> automation_ash_;
std::unique_ptr<BrowserServiceHostAsh> browser_service_host_ash_;
std::unique_ptr<CertDatabaseAsh> cert_database_ash_;
std::unique_ptr<ClipboardAsh> clipboard_ash_;
std::unique_ptr<ClipboardHistoryAsh> clipboard_history_ash_;
std::unique_ptr<ContentProtectionAsh> content_protection_ash_;
std::unique_ptr<DeviceAttributesAsh> device_attributes_ash_;
std::unique_ptr<DownloadControllerAsh> download_controller_ash_;
std::unique_ptr<DriveIntegrationServiceAsh> drive_integration_service_ash_;
std::unique_ptr<FeedbackAsh> feedback_ash_;
std::unique_ptr<FileManagerAsh> file_manager_ash_;
std::unique_ptr<IdleServiceAsh> idle_service_ash_;
std::unique_ptr<ImageWriterAsh> image_writer_ash_;
std::unique_ptr<KeystoreServiceAsh> keystore_service_ash_;
std::unique_ptr<LocalPrinterAsh> local_printer_ash_;
std::unique_ptr<MessageCenterAsh> message_center_ash_;
std::unique_ptr<MetricsReportingAsh> metrics_reporting_ash_;
std::unique_ptr<NativeThemeServiceAsh> native_theme_service_ash_;
std::unique_ptr<NetworkingAttributesAsh> networking_attributes_ash_;
std::unique_ptr<PowerAsh> power_ash_;
std::unique_ptr<PrefsAsh> prefs_ash_;
std::unique_ptr<RemotingAsh> remoting_ash_;
std::unique_ptr<ResourceManagerAsh> resource_manager_ash_;
std::unique_ptr<ScreenManagerAsh> screen_manager_ash_;
std::unique_ptr<SelectFileAsh> select_file_ash_;
std::unique_ptr<SystemDisplayAsh> system_display_ash_;
std::unique_ptr<WebPageInfoFactoryAsh> web_page_info_factory_ash_;
std::unique_ptr<TaskManagerAsh> task_manager_ash_;
std::unique_ptr<TestControllerAsh> test_controller_ash_;
std::unique_ptr<UrlHandlerAsh> url_handler_ash_;
std::unique_ptr<VideoCaptureDeviceFactoryAsh>
video_capture_device_factory_ash_;
mojo::ReceiverSet<mojom::Crosapi, CrosapiId> receiver_set_;
std::map<mojo::ReceiverId, base::OnceClosure> disconnect_handler_map_;
base::WeakPtrFactory<CrosapiAsh> weak_factory_{this};
};
} // namespace crosapi
#endif // CHROME_BROWSER_ASH_CROSAPI_CROSAPI_ASH_H_