Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/vr/NavigatorVR.h" | 5 #include "modules/vr/NavigatorVR.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptPromiseResolver.h" | 7 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 8 #include "core/dom/DOMException.h" | 8 #include "core/dom/DOMException.h" |
| 9 #include "core/dom/Document.h" | 9 #include "core/dom/Document.h" |
| 10 #include "core/dom/ExceptionCode.h" | 10 #include "core/dom/ExceptionCode.h" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 } | 74 } |
| 75 | 75 |
| 76 Document* NavigatorVR::document() | 76 Document* NavigatorVR::document() |
| 77 { | 77 { |
| 78 return m_frame ? m_frame->document() : 0; | 78 return m_frame ? m_frame->document() : 0; |
| 79 } | 79 } |
| 80 | 80 |
| 81 DEFINE_TRACE(NavigatorVR) | 81 DEFINE_TRACE(NavigatorVR) |
| 82 { | 82 { |
| 83 visitor->trace(m_controller); | 83 visitor->trace(m_controller); |
| 84 visitor->trace(m_pendingEvents); | |
| 85 visitor->trace(m_dispatchOneEventRunner); | |
| 84 | 86 |
| 85 Supplement<Navigator>::trace(visitor); | 87 Supplement<Navigator>::trace(visitor); |
| 86 DOMWindowProperty::trace(visitor); | 88 DOMWindowProperty::trace(visitor); |
| 87 } | 89 } |
| 88 | 90 |
| 91 bool NavigatorVR::isVREvent(const AtomicString& eventType) | |
| 92 { | |
| 93 return eventType == EventTypeNames::vrdisplayconnect | |
| 94 || eventType == EventTypeNames::vrdisplaydisconnect | |
| 95 || eventType == EventTypeNames::vrdisplayactivate | |
| 96 || eventType == EventTypeNames::vrdisplaydeactivate; | |
| 97 } | |
| 98 | |
| 99 void NavigatorVR::didAddEventListener(LocalDOMWindow*, const AtomicString& event Type) | |
| 100 { | |
| 101 if (isVREvent(eventType)) { | |
| 102 m_hasEventListener = true; | |
| 103 } | |
| 104 } | |
| 105 | |
| 106 void NavigatorVR::didRemoveEventListener(LocalDOMWindow* window, const AtomicStr ing& eventType) | |
| 107 { | |
| 108 if (isVREvent(eventType) | |
| 109 && !window->hasEventListeners(EventTypeNames::vrdisplayconnect) | |
| 110 && !window->hasEventListeners(EventTypeNames::vrdisplaydisconnect)) { | |
| 111 didRemoveVREventListeners(); | |
| 112 } | |
| 113 } | |
| 114 | |
| 115 void NavigatorVR::didRemoveAllEventListeners(LocalDOMWindow*) | |
| 116 { | |
| 117 didRemoveVREventListeners(); | |
| 118 } | |
| 119 | |
| 120 void NavigatorVR::didRemoveVREventListeners() | |
| 121 { | |
| 122 m_hasEventListener = false; | |
| 123 m_dispatchOneEventRunner->stop(); | |
| 124 m_pendingEvents.clear(); | |
| 125 } | |
| 126 | |
| 89 NavigatorVR::NavigatorVR(LocalFrame* frame) | 127 NavigatorVR::NavigatorVR(LocalFrame* frame) |
| 90 : DOMWindowProperty(frame) | 128 : DOMWindowProperty(frame) |
| 129 , m_hasEventListener(false) | |
| 130 , m_dispatchOneEventRunner(AsyncMethodRunner<NavigatorVR>::create(this, &Nav igatorVR::dispatchOneEvent)) | |
| 91 { | 131 { |
| 132 if (frame) | |
| 133 frame->localDOMWindow()->registerEventListenerObserver(this); | |
| 92 } | 134 } |
| 93 | 135 |
| 94 NavigatorVR::~NavigatorVR() | 136 NavigatorVR::~NavigatorVR() |
| 95 { | 137 { |
| 96 } | 138 } |
| 97 | 139 |
| 98 const char* NavigatorVR::supplementName() | 140 const char* NavigatorVR::supplementName() |
| 99 { | 141 { |
| 100 return "NavigatorVR"; | 142 return "NavigatorVR"; |
| 101 } | 143 } |
| 102 | 144 |
| 103 void NavigatorVR::fireVRDisplayPresentChange(VRDisplay* display) | 145 void NavigatorVR::fireVRDisplayPresentChange(VRDisplay* display) |
| 104 { | 146 { |
| 105 if (m_frame && m_frame->localDOMWindow()) { | 147 if (m_frame && m_frame->localDOMWindow()) { |
| 106 m_frame->localDOMWindow()->enqueueWindowEvent( | 148 m_frame->localDOMWindow()->enqueueWindowEvent( |
| 107 VRDisplayEvent::create(EventTypeNames::vrdisplaypresentchange, true, false, display, "")); | 149 VRDisplayEvent::create(EventTypeNames::vrdisplaypresentchange, true, false, display, "")); |
| 108 } | 150 } |
| 109 } | 151 } |
| 110 | 152 |
| 153 void NavigatorVR::fireVREvent(VRDisplayEvent* event) | |
|
bajones
2016/09/06 23:25:46
Lets have this function call m_frame->localDOMWind
| |
| 154 { | |
| 155 m_pendingEvents.append(event); | |
| 156 m_dispatchOneEventRunner->runAsync(); | |
| 157 } | |
| 158 | |
| 159 void NavigatorVR::dispatchOneEvent() | |
| 160 { | |
| 161 DCHECK(frame()); | |
| 162 DCHECK(frame()->domWindow()); | |
| 163 DCHECK(!m_pendingEvents.isEmpty()); | |
| 164 | |
| 165 if (m_frame) | |
| 166 m_frame->domWindow()->dispatchEvent(m_pendingEvents.takeFirst()); | |
| 167 | |
| 168 if (!m_pendingEvents.isEmpty()) | |
| 169 m_dispatchOneEventRunner->runAsync(); | |
| 170 } | |
| 171 | |
| 111 } // namespace blink | 172 } // namespace blink |
| OLD | NEW |