Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(788)

Unified Diff: third_party/WebKit/Source/modules/vr/VRController.cpp

Issue 2329893002: Isolate a presenting VR device from pages other than the one presenting. (Closed)
Patch Set: Unit tests Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..87fea396354c6aee52faa57ee75ec9d40fd90b47 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,24 @@ 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);
+ return;
+ }
+
+ 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 +170,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
« no previous file with comments | « third_party/WebKit/Source/modules/vr/VRController.h ('k') | third_party/WebKit/Source/modules/vr/VRDisplay.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698