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

Side by Side Diff: third_party/WebKit/Source/modules/vr/NavigatorVR.cpp

Issue 2317483002: Add support of vrdisplayconnect and vrdisplaydisconnect event (Closed)
Patch Set: Fix typo of Event reason 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 unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698