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..28bc4628d0d25bd83879b59f19521377567809f4 |
--- /dev/null |
+++ b/content/renderer/vr/vr_dispatcher.cc |
@@ -0,0 +1,74 @@ |
+// 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_.get()) { |
Ken Rockot(use gerrit already)
2015/05/31 23:43:47
nit: vr_service_ is testable, no need to get()
|
+ 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, |
Ken Rockot(use gerrit already)
2015/05/31 23:43:47
nit: OnGetSensorState doesn't actually need |this|
|
+ base::Unretained(this), |
+ base::Unretained(&state))); |
+ |
+ // TODO: Justify this. |
Ken Rockot(use gerrit already)
2015/05/31 23:43:47
What do you mean? Justify the call to WaitForIncom
|
+ 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) { |
+ const VRDeviceInfoPtr& mojo_device = devices[i]; |
Ken Rockot(use gerrit already)
2015/05/31 23:43:47
nit: maybe just do devices[i].To<blink::WebVRDevic
|
+ web_devices[i] = mojo_device.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 |