1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/renderer/vr/vr_dispatcher.h"
7 #include "content/public/common/service_registry.h"
8 #include "content/renderer/vr/vr_type_converters.h"
12 VRDispatcher::VRDispatcher(ServiceRegistry
* service_registry
)
13 : service_registry_(service_registry
) {
16 VRDispatcher::~VRDispatcher() {
19 VRServicePtr
& VRDispatcher::GetVRServicePtr() {
21 service_registry_
->ConnectToRemoteService(mojo::GetProxy(&vr_service_
));
26 void VRDispatcher::getDevices(blink::WebVRGetDevicesCallback
* callback
) {
27 int request_id
= pending_requests_
.Add(callback
);
28 GetVRServicePtr()->GetDevices(base::Bind(&VRDispatcher::OnGetDevices
,
29 base::Unretained(this), request_id
));
32 void VRDispatcher::getSensorState(unsigned int index
,
33 blink::WebHMDSensorState
& state
) {
34 GetVRServicePtr()->GetSensorState(
36 base::Bind(&VRDispatcher::OnGetSensorState
, base::Unretained(&state
)));
38 // This call needs to return results synchronously in order to be useful and
39 // provide the lowest latency results possible.
40 GetVRServicePtr().WaitForIncomingResponse();
43 void VRDispatcher::resetSensor(unsigned int index
) {
44 GetVRServicePtr()->ResetSensor(index
);
47 void VRDispatcher::OnGetDevices(int request_id
,
48 const mojo::Array
<VRDeviceInfoPtr
>& devices
) {
49 blink::WebVector
<blink::WebVRDevice
> web_devices(devices
.size());
51 blink::WebVRGetDevicesCallback
* callback
=
52 pending_requests_
.Lookup(request_id
);
56 for (size_t i
= 0; i
< devices
.size(); ++i
) {
57 web_devices
[i
] = devices
[i
].To
<blink::WebVRDevice
>();
60 callback
->onSuccess(&web_devices
);
61 pending_requests_
.Remove(request_id
);
64 void VRDispatcher::OnGetSensorState(blink::WebHMDSensorState
* state
,
65 const VRSensorStatePtr
& mojo_state
) {
66 *state
= mojo_state
.To
<blink::WebHMDSensorState
>();
69 } // namespace content