Chromium Code Reviews| Index: third_party/WebKit/Source/modules/vr/NavigatorVR.cpp |
| diff --git a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp |
| index 9afab6780516d62c816cc3c292538588cb1a6a1d..10b97ce59f8527b26ffad074ea52ec5c95d802b0 100644 |
| --- a/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp |
| +++ b/third_party/WebKit/Source/modules/vr/NavigatorVR.cpp |
| @@ -25,9 +25,19 @@ |
| namespace blink { |
| +namespace { |
| + |
| +void rejectNavigatorDetached(ScriptPromiseResolver* resolver) { |
| + DOMException* exception = DOMException::create( |
| + InvalidStateError, "The object is no longer associated with a document."); |
| + resolver->reject(exception); |
| +} |
| + |
| +} // namespace |
| + |
| NavigatorVR* NavigatorVR::from(Document& document) { |
| if (!document.frame() || !document.frame()->domWindow()) |
| - return 0; |
| + return nullptr; |
| Navigator& navigator = *document.frame()->domWindow()->navigator(); |
| return &from(navigator); |
| } |
| @@ -44,6 +54,13 @@ NavigatorVR& NavigatorVR::from(Navigator& navigator) { |
| ScriptPromise NavigatorVR::getVRDisplays(ScriptState* scriptState, |
| Navigator& navigator) { |
| + if (!navigator.frame()) { |
| + ScriptPromiseResolver* resolver = |
| + ScriptPromiseResolver::create(scriptState); |
| + ScriptPromise promise = resolver->promise(); |
|
mthiesse
2017/02/21 15:19:27
nit: Why not remove this line, and return resolver
sof
2017/02/21 15:29:12
You have to call promise() before rejecting/resolv
|
| + rejectNavigatorDetached(resolver); |
| + return promise; |
| + } |
| return NavigatorVR::from(navigator).getVRDisplays(scriptState); |
| } |
| @@ -52,9 +69,7 @@ ScriptPromise NavigatorVR::getVRDisplays(ScriptState* scriptState) { |
| ScriptPromise promise = resolver->promise(); |
| if (!document()) { |
| - DOMException* exception = DOMException::create( |
| - InvalidStateError, "The object is no longer associated to a document."); |
| - resolver->reject(exception); |
| + rejectNavigatorDetached(resolver); |
| return promise; |
| } |
| @@ -73,7 +88,7 @@ ScriptPromise NavigatorVR::getVRDisplays(ScriptState* scriptState) { |
| VRController* NavigatorVR::controller() { |
| if (!supplementable()->frame()) |
| - return 0; |
| + return nullptr; |
| if (!m_controller) { |
| m_controller = new VRController(this); |
| @@ -85,8 +100,10 @@ VRController* NavigatorVR::controller() { |
| } |
| Document* NavigatorVR::document() { |
| - return supplementable()->frame() ? supplementable()->frame()->document() |
| - : nullptr; |
| + if (!supplementable()->frame()) |
| + return nullptr; |
| + |
| + return supplementable()->frame()->document(); |
| } |
| DEFINE_TRACE(NavigatorVR) { |
| @@ -108,14 +125,16 @@ const char* NavigatorVR::supplementName() { |
| } |
| void NavigatorVR::enqueueVREvent(VRDisplayEvent* event) { |
| - if (supplementable()->frame()) { |
| - supplementable()->frame()->domWindow()->enqueueWindowEvent(event); |
| - } |
| + if (!supplementable()->frame()) |
| + return; |
| + |
| + supplementable()->frame()->domWindow()->enqueueWindowEvent(event); |
| } |
| void NavigatorVR::dispatchVRGestureEvent(VRDisplayEvent* event) { |
| if (!(supplementable()->frame())) |
| return; |
| + |
| UserGestureIndicator gestureIndicator( |
| DocumentUserGestureToken::create(document())); |
| LocalDOMWindow* window = supplementable()->frame()->domWindow(); |
| @@ -161,10 +180,11 @@ void NavigatorVR::didRemoveEventListener(LocalDOMWindow* window, |
| } |
| void NavigatorVR::didRemoveAllEventListeners(LocalDOMWindow* window) { |
| - if (m_controller) { |
| - m_controller->setListeningForActivate(false); |
| - m_listeningForActivate = false; |
| - } |
| + if (!m_controller) |
| + return; |
| + |
| + m_controller->setListeningForActivate(false); |
| + m_listeningForActivate = false; |
| } |
| } // namespace blink |