| Index: components/arc/arc_bridge_service_impl.cc
|
| diff --git a/components/arc/arc_bridge_service_impl.cc b/components/arc/arc_bridge_service_impl.cc
|
| index d5485b4d41f62c8b0abb9cb889e46a407c0a9455..4a54769797c46a24d928a85426a1d919d93129e0 100644
|
| --- a/components/arc/arc_bridge_service_impl.cc
|
| +++ b/components/arc/arc_bridge_service_impl.cc
|
| @@ -17,6 +17,7 @@
|
| #include "chromeos/dbus/dbus_method_call_status.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/dbus/session_manager_client.h"
|
| +#include "ipc/ipc_channel_handle.h"
|
| #include "mojo/public/cpp/bindings/array.h"
|
| #include "third_party/mojo/src/mojo/edk/embedder/embedder.h"
|
|
|
| @@ -179,6 +180,29 @@ bool ArcBridgeServiceImpl::RequestProcessList() {
|
| return true;
|
| }
|
|
|
| +void ArcBridgeServiceImpl::NotifyVideoAcceleratorChannelCreated(
|
| + const IPC::ChannelHandle& handle) {
|
| + DCHECK(CalledOnValidThread());
|
| + if (state() != State::READY) {
|
| + LOG(ERROR) << "Called NotifyVideoAcceleratorChannelCreated when the "
|
| + "service is not ready";
|
| + return;
|
| + }
|
| + // TODO revisit before commit:
|
| + // can mojo create wrapper for invalid handle?
|
| + MojoHandle wrapped_handle;
|
| + MojoResult wrap_result = mojo::embedder::CreatePlatformHandleWrapper(
|
| + mojo::embedder::ScopedPlatformHandle(
|
| + mojo::embedder::PlatformHandle(handle.socket.fd)),
|
| + &wrapped_handle);
|
| + if (wrap_result != MOJO_RESULT_OK) {
|
| + LOG(WARNING) << "Pipe failed to wrap handles. Closing: " << wrap_result;
|
| + return;
|
| + }
|
| + instance_ptr_->NotifyVideoAcceleratorChannelCreated(
|
| + mojo::ScopedHandle(mojo::Handle(wrapped_handle)));
|
| +}
|
| +
|
| void ArcBridgeServiceImpl::OnInstanceBootPhase(InstanceBootPhase phase) {
|
| DCHECK(CalledOnValidThread());
|
| // The state can be CONNECTED the first time this is called, and will then
|
| @@ -245,6 +269,16 @@ void ArcBridgeServiceImpl::OnReleaseDisplayWakeLock(DisplayWakeLockType type) {
|
| VLOG(1) << "OnReleaseDisplayWakeLock";
|
| }
|
|
|
| +void ArcBridgeServiceImpl::OnRequestArcVideoAcceleratorChannel() {
|
| + DCHECK(CalledOnValidThread());
|
| + if (!video_service()) {
|
| + LOG(ERROR) << "Got OnRequestArcVideoAcceleratorChannel"
|
| + " but video service is not registered";
|
| + return;
|
| + }
|
| + video_service()->OnRequestArcVideoAcceleratorChannel();
|
| +}
|
| +
|
| void ArcBridgeServiceImpl::OnArcAvailable(bool arc_available) {
|
| DCHECK(CalledOnValidThread());
|
| if (available() == arc_available)
|
|
|