Chromium Code Reviews| Index: third_party/WebKit/Source/modules/vr/VRController.cpp |
| diff --git a/third_party/WebKit/Source/modules/vr/VRController.cpp b/third_party/WebKit/Source/modules/vr/VRController.cpp |
| index 36aa47c5b8dcc414b32a940ddd4bdb11a5a0442e..4fa633cae807f9a0e11751738ba171e5c3c90910 100644 |
| --- a/third_party/WebKit/Source/modules/vr/VRController.cpp |
| +++ b/third_party/WebKit/Source/modules/vr/VRController.cpp |
| @@ -5,7 +5,10 @@ |
| #include "modules/vr/VRController.h" |
| #include "core/frame/LocalFrame.h" |
| +#include "modules/vr/VRGetDevicesCallback.h" |
| #include "platform/RuntimeEnabledFeatures.h" |
| +#include "platform/mojo/MojoHelper.h" |
| +#include "public/platform/ServiceRegistry.h" |
| namespace blink { |
| @@ -13,12 +16,10 @@ VRController::~VRController() |
| { |
| } |
| -void VRController::provideTo(LocalFrame& frame, WebVRClient* client) |
| +void VRController::provideTo(LocalFrame& frame, ServiceRegistry* registry) |
| { |
| ASSERT(RuntimeEnabledFeatures::webVREnabled()); |
| - |
| - VRController* controller = new VRController(frame, client); |
| - Supplement<LocalFrame>::provideTo(frame, supplementName(), controller); |
| + Supplement<LocalFrame>::provideTo(frame, supplementName(), registry ? new VRController(frame, registry) : nullptr); |
| } |
| VRController* VRController::from(LocalFrame& frame) |
| @@ -26,10 +27,11 @@ VRController* VRController::from(LocalFrame& frame) |
| return static_cast<VRController*>(Supplement<LocalFrame>::from(frame, supplementName())); |
| } |
| -VRController::VRController(LocalFrame& frame, WebVRClient* client) |
| +VRController::VRController(LocalFrame& frame, ServiceRegistry* registry) |
| : LocalFrameLifecycleObserver(&frame) |
| - , m_client(client) |
| { |
| + ASSERT(!m_service.is_bound()); |
| + registry->connectToRemoteService(mojo::GetProxy(&m_service)); |
| } |
| const char* VRController::supplementName() |
| @@ -37,38 +39,50 @@ const char* VRController::supplementName() |
| return "VRController"; |
| } |
| -void VRController::getDevices(WebVRGetDevicesCallback* callback) |
| +void VRController::getDevices(std::unique_ptr<VRGetDevicesCallback> callback) |
| { |
| - // When detached, the client is no longer valid. |
| - if (!m_client) { |
| + if (!m_service) { |
| callback->onError(); |
| - delete callback; |
| return; |
| } |
| - // Client is expected to take ownership of the callback |
| - m_client->getDevices(callback); |
| + m_pendingGetDevicesCallbacks.append(std::move(callback)); |
| + m_service->GetDevices(sameThreadBindForMojo(&VRController::OnGetDevices, this)); |
| } |
| void VRController::getSensorState(unsigned index, WebHMDSensorState& into) |
| { |
| - // When detached, the client is no longer valid. |
| - if (!m_client) |
| + if (!m_service) |
| return; |
| - m_client->getSensorState(index, into); |
| + |
| + mojom::VRSensorStatePtr state; |
| + m_service->GetSensorState(index, &state); |
| + into = state.To<WebHMDSensorState>(); |
| } |
| void VRController::resetSensor(unsigned index) |
| { |
| - // When detached, the client is no longer valid. |
| - if (!m_client) |
| + if (!m_service) |
| return; |
| - m_client->resetSensor(index); |
| + m_service->ResetSensor(index); |
| } |
| void VRController::willDetachFrameHost() |
| { |
| - m_client = nullptr; |
| + // FIXME:: Detach from the mojo service connection. |
|
haraken
2016/05/03 15:56:31
TODO(your name)
RaviKasibhatla
2016/05/04 08:54:37
Done.
|
| +} |
| + |
| +void VRController::OnGetDevices(const mojo::Array<mojom::VRDeviceInfoPtr>& devices) |
| +{ |
| + WebVector<WebVRDevice> webDevices(devices.size()); |
| + |
| + std::unique_ptr<VRGetDevicesCallback> callback = m_pendingGetDevicesCallbacks.takeFirst(); |
| + if (!callback) |
| + return; |
| + |
| + for (size_t i = 0; i < devices.size(); ++i) |
| + webDevices[i] = devices[i].To<WebVRDevice>(); |
| + callback->onSuccess(webDevices); |
| } |
| DEFINE_TRACE(VRController) |