Index: content/renderer/vr/vr_dispatcher.cc |
diff --git a/content/renderer/vr/vr_dispatcher.cc b/content/renderer/vr/vr_dispatcher.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..43e25722f9efba164e9c7f5c489b431916f5bd1c |
--- /dev/null |
+++ b/content/renderer/vr/vr_dispatcher.cc |
@@ -0,0 +1,69 @@ |
+// Copyright 2015 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. |
+ |
+#include "content/renderer/vr/vr_dispatcher.h" |
+ |
+#include "content/public/common/service_registry.h" |
+#include "content/renderer/vr/vr_type_converters.h" |
+ |
+namespace content { |
+ |
+VRDispatcher::VRDispatcher(ServiceRegistry* service_registry) |
+ : service_registry_(service_registry) { |
+} |
+ |
+VRDispatcher::~VRDispatcher() { |
+} |
+ |
+VRServicePtr& VRDispatcher::GetVRServicePtr() { |
+ if (!vr_service_) { |
+ service_registry_->ConnectToRemoteService(mojo::GetProxy(&vr_service_)); |
+ } |
+ return vr_service_; |
+} |
+ |
+void VRDispatcher::getDevices(blink::WebVRGetDevicesCallback* callback) { |
+ int request_id = pending_requests_.Add(callback); |
+ GetVRServicePtr()->GetDevices(base::Bind(&VRDispatcher::OnGetDevices, |
+ base::Unretained(this), request_id)); |
+} |
+ |
+void VRDispatcher::getSensorState(unsigned int index, |
+ blink::WebHMDSensorState& state) { |
+ GetVRServicePtr()->GetSensorState( |
+ index, |
+ base::Bind(&VRDispatcher::OnGetSensorState, base::Unretained(&state))); |
+ |
+ // This call needs to return results synchronously in order to be useful and |
+ // provide the lowest latency results possible. |
+ GetVRServicePtr().WaitForIncomingResponse(); |
+} |
+ |
+void VRDispatcher::resetSensor(unsigned int index) { |
+ GetVRServicePtr()->ResetSensor(index); |
+} |
+ |
+void VRDispatcher::OnGetDevices(int request_id, |
+ const mojo::Array<VRDeviceInfoPtr>& devices) { |
+ blink::WebVector<blink::WebVRDevice> web_devices(devices.size()); |
+ |
+ blink::WebVRGetDevicesCallback* callback = |
+ pending_requests_.Lookup(request_id); |
+ if (!callback) |
+ return; |
+ |
+ for (size_t i = 0; i < devices.size(); ++i) { |
+ web_devices[i] = devices[i].To<blink::WebVRDevice>(); |
+ } |
+ |
+ callback->onSuccess(&web_devices); |
+ pending_requests_.Remove(request_id); |
+} |
+ |
+void VRDispatcher::OnGetSensorState(blink::WebHMDSensorState* state, |
+ const VRSensorStatePtr& mojo_state) { |
+ *state = mojo_state.To<blink::WebHMDSensorState>(); |
+} |
+ |
+} // namespace content |