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

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

Issue 2420743003: mojo VR interface simplified (Closed)
Patch Set: address leon@ comments about name Created 4 years, 2 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 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();
}

Powered by Google App Engine
This is Rietveld 408576698