| // Copyright 2016 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 COMPONENTS_ARC_ARC_BRIDGE_HOST_IMPL_H_ |
| #define COMPONENTS_ARC_ARC_BRIDGE_HOST_IMPL_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "base/threading/thread_checker.h" |
| #include "components/arc/common/arc_bridge.mojom.h" |
| #include "components/arc/instance_holder.h" |
| #include "mojo/public/cpp/bindings/binding.h" |
| #include "mojo/public/cpp/bindings/interface_ptr.h" |
| |
| namespace arc { |
| |
| // Implementation of the ArcBridgeHost. |
| // The lifetime of ArcBridgeHost and ArcBridgeInstance mojo channels are tied |
| // to this instance. Also, any ARC related Mojo channel will be closed if |
| // either ArcBridgeHost or ArcBridgeInstance Mojo channels is closed on error. |
| // When ARC Instance (not Host) Mojo channel gets ready (= passed via |
| // OnFooInstanceReady(), and the QueryVersion() gets completed), then this sets |
| // the raw pointer to the ArcBridgeService so that other services can access |
| // to the pointer, and resets it on channel closing. |
| // Note that ArcBridgeService must be alive while ArcBridgeHostImpl is alive. |
| class ArcBridgeHostImpl : public mojom::ArcBridgeHost { |
| public: |
| // Interface to keep the Mojo channel InterfacePtr. |
| class MojoChannel; |
| |
| explicit ArcBridgeHostImpl(mojom::ArcBridgeInstancePtr instance); |
| ~ArcBridgeHostImpl() override; |
| |
| // ArcBridgeHost overrides. |
| void OnAppInstanceReady(mojom::AppInstancePtr app_ptr) override; |
| void OnAudioInstanceReady(mojom::AudioInstancePtr audio_ptr) override; |
| void OnAuthInstanceReady(mojom::AuthInstancePtr auth_ptr) override; |
| void OnBluetoothInstanceReady( |
| mojom::BluetoothInstancePtr bluetooth_ptr) override; |
| void OnClipboardInstanceReady( |
| mojom::ClipboardInstancePtr clipboard_ptr) override; |
| void OnCrashCollectorInstanceReady( |
| mojom::CrashCollectorInstancePtr crash_collector_ptr) override; |
| void OnEnterpriseReportingInstanceReady( |
| mojom::EnterpriseReportingInstancePtr enterprise_reporting_ptr) override; |
| void OnFileSystemInstanceReady( |
| mojom::FileSystemInstancePtr file_system_ptr) override; |
| void OnImeInstanceReady(mojom::ImeInstancePtr ime_ptr) override; |
| void OnIntentHelperInstanceReady( |
| mojom::IntentHelperInstancePtr intent_helper_ptr) override; |
| void OnMetricsInstanceReady(mojom::MetricsInstancePtr metrics_ptr) override; |
| void OnNetInstanceReady(mojom::NetInstancePtr net_ptr) override; |
| void OnNotificationsInstanceReady( |
| mojom::NotificationsInstancePtr notifications_ptr) override; |
| void OnObbMounterInstanceReady( |
| mojom::ObbMounterInstancePtr obb_mounter_ptr) override; |
| void OnPolicyInstanceReady(mojom::PolicyInstancePtr policy_ptr) override; |
| void OnPowerInstanceReady(mojom::PowerInstancePtr power_ptr) override; |
| void OnPrintInstanceReady(mojom::PrintInstancePtr print_ptr) override; |
| void OnProcessInstanceReady(mojom::ProcessInstancePtr process_ptr) override; |
| void OnStorageManagerInstanceReady( |
| mojom::StorageManagerInstancePtr storage_manager_ptr) override; |
| void OnTtsInstanceReady(mojom::TtsInstancePtr tts_ptr) override; |
| void OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) override; |
| |
| private: |
| // Called when the bridge channel is closed. This typically only happens when |
| // the ARC instance crashes. |
| void OnClosed(); |
| |
| // The common implementation to handle ArcBridgeHost overrides. |
| // |T| is a ARC Mojo Instance type. |
| template <typename T> |
| void OnInstanceReady(InstanceHolder<T>* holder, mojo::InterfacePtr<T> ptr); |
| |
| // Called if one of the established channels is closed. |
| void OnChannelClosed(MojoChannel* channel); |
| |
| base::ThreadChecker thread_checker_; |
| |
| mojo::Binding<mojom::ArcBridgeHost> binding_; |
| mojom::ArcBridgeInstancePtr instance_; |
| |
| // Put as a last member to ensure that any callback tied to the elements |
| // is not invoked. |
| std::vector<std::unique_ptr<MojoChannel>> mojo_channels_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ArcBridgeHostImpl); |
| }; |
| |
| } // namespace arc |
| |
| #endif // COMPONENTS_ARC_ARC_BRIDGE_HOST_IMPL_H_ |