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 |