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 6fa41fab826dc2cf022b6a5eba2f2ffe11daacca..c72ae22bc885526d7f9e9522c99bfe581d7e756a 100644 |
| --- a/third_party/WebKit/Source/modules/vr/VRController.cpp |
| +++ b/third_party/WebKit/Source/modules/vr/VRController.cpp |
| @@ -40,104 +40,17 @@ void VRController::getDisplays(ScriptPromiseResolver* resolver) { |
| WTF::bind(&VRController::onGetDisplays, wrapPersistent(this)))); |
| } |
| -device::blink::VRPosePtr VRController::getPose(unsigned index) { |
| - if (!m_service) |
| - return nullptr; |
| - |
| - device::blink::VRPosePtr pose; |
| - m_service->GetPose(index, &pose); |
| - return pose; |
| -} |
| - |
| -void VRController::resetPose(unsigned index) { |
| - if (!m_service) |
| - return; |
| - |
| - m_service->ResetPose(index); |
| -} |
| - |
| -void VRController::requestPresent(ScriptPromiseResolver* resolver, |
| - unsigned index, |
| - bool secureOrigin) { |
| - if (!m_service) { |
| - DOMException* exception = DOMException::create( |
| - InvalidStateError, "The service is no longer active."); |
| - resolver->reject(exception); |
| - ReportPresentationResult(PresentationResult::ServiceInactive); |
| - return; |
| - } |
| - |
| - m_service->RequestPresent( |
| - index, secureOrigin, |
| - convertToBaseCallback(WTF::bind(&VRController::onPresentComplete, |
| - wrapPersistent(this), |
| - wrapPersistent(resolver), index))); |
| -} |
| - |
| -void VRController::exitPresent(unsigned index) { |
| - if (!m_service) |
| - return; |
| - |
| - m_service->ExitPresent(index); |
| -} |
| - |
| -void VRController::submitFrame(unsigned index, device::blink::VRPosePtr pose) { |
| - if (!m_service) |
| - return; |
| - |
| - m_service->SubmitFrame(index, std::move(pose)); |
| -} |
| - |
| -void VRController::updateLayerBounds( |
| - unsigned index, |
| - device::blink::VRLayerBoundsPtr leftBounds, |
| - device::blink::VRLayerBoundsPtr rightBounds) { |
| - if (!m_service) |
| - return; |
| - |
| - m_service->UpdateLayerBounds(index, std::move(leftBounds), |
| - std::move(rightBounds)); |
| -} |
| - |
| -VRDisplay* VRController::createOrUpdateDisplay( |
| - const device::blink::VRDisplayPtr& display) { |
| - VRDisplay* vrDisplay = getDisplayForIndex(display->index); |
| - if (!vrDisplay) { |
| - vrDisplay = new VRDisplay(m_navigatorVR); |
| - m_displays.append(vrDisplay); |
| - } |
| - |
| - vrDisplay->update(display); |
| - return vrDisplay; |
| +void VRController::GetDisplayClient(const GetDisplayClientCallback& callback) { |
| + VRDisplay* vrDisplay = new VRDisplay(m_navigatorVR); |
| + m_displays.append(vrDisplay); |
| + callback.Run(vrDisplay->BindClient()); |
| } |
| -VRDisplayVector VRController::updateDisplays( |
| - mojo::WTFArray<device::blink::VRDisplayPtr> displays) { |
| - VRDisplayVector vrDisplays; |
| +void VRController::onGetDisplays(bool success) { |
| + VRDisplayVector outDisplays; |
| - for (const auto& display : displays.PassStorage()) { |
| - VRDisplay* vrDisplay = createOrUpdateDisplay(display); |
| - vrDisplays.append(vrDisplay); |
| - } |
| - |
| - return vrDisplays; |
| -} |
| - |
| -VRDisplay* VRController::getDisplayForIndex(unsigned index) { |
| - VRDisplay* display; |
| - for (size_t i = 0; i < m_displays.size(); ++i) { |
| - display = m_displays[i]; |
| - if (display->displayId() == index) { |
| - return display; |
| - } |
| - } |
| - |
| - return 0; |
| -} |
| - |
| -void VRController::onGetDisplays( |
| - mojo::WTFArray<device::blink::VRDisplayPtr> displays) { |
| - VRDisplayVector outDisplays = updateDisplays(std::move(displays)); |
| + if (success) |
| + outDisplays = m_displays; |
| std::unique_ptr<VRGetDevicesCallback> callback = |
| m_pendingGetDevicesCallbacks.takeFirst(); |
| @@ -147,70 +60,15 @@ void VRController::onGetDisplays( |
| callback->onSuccess(outDisplays); |
|
bajones
2016/10/25 22:21:38
Probably shouldn't call onSuccess if success == fa
|
| } |
| -void VRController::onPresentComplete(ScriptPromiseResolver* resolver, |
| - unsigned index, |
| - bool success) { |
| - VRDisplay* vrDisplay = getDisplayForIndex(index); |
| - if (!vrDisplay) { |
| - DOMException* exception = |
| - DOMException::create(InvalidStateError, "VRDisplay not found."); |
| - resolver->reject(exception); |
| - ReportPresentationResult(PresentationResult::VRDisplayNotFound); |
| - return; |
| - } |
| - |
| - if (success) { |
| - vrDisplay->beginPresent(resolver); |
| - } else { |
| - vrDisplay->forceExitPresent(); |
| - DOMException* exception = DOMException::create( |
| - NotAllowedError, "Presentation request was denied."); |
| - ReportPresentationResult(PresentationResult::RequestDenied); |
| - resolver->reject(exception); |
| - } |
| -} |
| - |
| -void VRController::OnDisplayChanged(device::blink::VRDisplayPtr display) { |
| - VRDisplay* vrDisplay = getDisplayForIndex(display->index); |
| - if (!vrDisplay) |
| - return; |
| - |
| - vrDisplay->update(display); |
| -} |
| - |
| -void VRController::OnExitPresent(unsigned index) { |
| - VRDisplay* vrDisplay = getDisplayForIndex(index); |
| - if (vrDisplay) |
| - vrDisplay->forceExitPresent(); |
| -} |
| - |
| -void VRController::OnDisplayConnected(device::blink::VRDisplayPtr display) { |
| - VRDisplay* vrDisplay = createOrUpdateDisplay(display); |
| - if (!vrDisplay) |
| - return; |
| - |
| - m_navigatorVR->fireVREvent(VRDisplayEvent::create( |
| - EventTypeNames::vrdisplayconnect, true, false, vrDisplay, "connect")); |
| -} |
| - |
| -void VRController::OnDisplayDisconnected(unsigned index) { |
| - VRDisplay* vrDisplay = getDisplayForIndex(index); |
| - if (!vrDisplay) |
| - return; |
| - |
| - vrDisplay->disconnected(); |
| - |
| - m_navigatorVR->fireVREvent( |
| - VRDisplayEvent::create(EventTypeNames::vrdisplaydisconnect, true, false, |
| - vrDisplay, "disconnect")); |
| -} |
| - |
| void VRController::contextDestroyed() { |
| // If the document context was destroyed, shut down the client connection |
| // and never call the mojo service again. |
| - m_binding.Close(); |
| m_service.reset(); |
| + // Shutdown all displays' message pipe |
| + for (size_t i = 0; i < m_displays.size(); ++i) |
| + m_displays[i]->shutdownMessagePipe(); |
| + |
| // The context is not automatically cleared, so do it manually. |
| ContextLifecycleObserver::clearContext(); |
| } |