| 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 d65e078825eaaafa9acc0338243738a8db1140e2..047727841631e4599b534497705416d016e4c921 100644
|
| --- a/third_party/WebKit/Source/modules/vr/VRController.cpp
|
| +++ b/third_party/WebKit/Source/modules/vr/VRController.cpp
|
| @@ -58,12 +58,15 @@ void VRController::resetPose(unsigned index)
|
| m_service->ResetPose(index);
|
| }
|
|
|
| -void VRController::requestPresent(unsigned index)
|
| +void VRController::requestPresent(ScriptPromiseResolver* resolver, unsigned index)
|
| {
|
| - if (!m_service)
|
| + if (!m_service) {
|
| + DOMException* exception = DOMException::create(InvalidStateError, "The service is no longer active.");
|
| + resolver->reject(exception);
|
| return;
|
| + }
|
|
|
| - m_service->RequestPresent(index);
|
| + m_service->RequestPresent(index, convertToBaseCallback(WTF::bind(&VRController::onPresentComplete, wrapPersistent(this), wrapPersistent(resolver), index)));
|
| }
|
|
|
| void VRController::exitPresent(unsigned index)
|
| @@ -74,12 +77,12 @@ void VRController::exitPresent(unsigned index)
|
| m_service->ExitPresent(index);
|
| }
|
|
|
| -void VRController::submitFrame(unsigned index)
|
| +void VRController::submitFrame(unsigned index, device::blink::VRPosePtr pose)
|
| {
|
| if (!m_service)
|
| return;
|
|
|
| - m_service->SubmitFrame(index);
|
| + m_service->SubmitFrame(index, std::move(pose));
|
| }
|
|
|
| void VRController::updateLayerBounds(unsigned index,
|
| @@ -140,6 +143,23 @@ void VRController::onGetDisplays(mojo::WTFArray<device::blink::VRDisplayPtr> dis
|
| callback->onSuccess(outDisplays);
|
| }
|
|
|
| +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);
|
| + }
|
| +
|
| + if (success) {
|
| + vrDisplay->beginPresent(resolver);
|
| + } else {
|
| + vrDisplay->forceExitPresent();
|
| + DOMException* exception = DOMException::create(NotAllowedError, "Presentation request was denied.");
|
| + resolver->reject(exception);
|
| + }
|
| +}
|
| +
|
| void VRController::OnDisplayChanged(device::blink::VRDisplayPtr display)
|
| {
|
| VRDisplay* vrDisplay = getDisplayForIndex(display->index);
|
| @@ -149,6 +169,13 @@ void VRController::OnDisplayChanged(device::blink::VRDisplayPtr display)
|
| vrDisplay->update(display);
|
| }
|
|
|
| +void VRController::OnExitPresent(unsigned index)
|
| +{
|
| + VRDisplay* vrDisplay = getDisplayForIndex(index);
|
| + if (vrDisplay)
|
| + vrDisplay->forceExitPresent();
|
| +}
|
| +
|
| void VRController::contextDestroyed()
|
| {
|
| // If the document context was destroyed, shut down the client connection
|
|
|