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

Side by Side Diff: sky/engine/core/events/EventTarget.cpp

Issue 760183003: Enable/Unprefix Animations & Transitions, add basic tests (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: patch for landing Created 6 years 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
« no previous file with comments | « sky/engine/core/events/EventTarget.h ('k') | sky/engine/core/events/EventTypeNames.in » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 6 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 event->setEventPhase(0); 152 event->setEventPhase(0);
153 return defaultPrevented; 153 return defaultPrevented;
154 } 154 }
155 155
156 void EventTarget::uncaughtExceptionInEventHandler() 156 void EventTarget::uncaughtExceptionInEventHandler()
157 { 157 {
158 } 158 }
159 159
160 static const AtomicString& legacyType(const Event* event) 160 static const AtomicString& legacyType(const Event* event)
161 { 161 {
162 if (event->type() == EventTypeNames::transitionend)
163 return EventTypeNames::webkitTransitionEnd;
164
165 if (event->type() == EventTypeNames::animationstart)
166 return EventTypeNames::webkitAnimationStart;
167
168 if (event->type() == EventTypeNames::animationend)
169 return EventTypeNames::webkitAnimationEnd;
170
171 if (event->type() == EventTypeNames::animationiteration)
172 return EventTypeNames::webkitAnimationIteration;
173
174 if (event->type() == EventTypeNames::wheel) 162 if (event->type() == EventTypeNames::wheel)
175 return EventTypeNames::mousewheel; 163 return EventTypeNames::mousewheel;
176 164
177 return emptyAtom; 165 return emptyAtom;
178 } 166 }
179 167
180 void EventTarget::countLegacyEvents(const AtomicString& legacyTypeName, EventLis tenerVector* listenersVector, EventListenerVector* legacyListenersVector)
181 {
182 UseCounter::Feature unprefixedFeature;
183 UseCounter::Feature prefixedFeature;
184 UseCounter::Feature prefixedAndUnprefixedFeature;
185 if (legacyTypeName == EventTypeNames::webkitTransitionEnd) {
186 prefixedFeature = UseCounter::PrefixedTransitionEndEvent;
187 unprefixedFeature = UseCounter::UnprefixedTransitionEndEvent;
188 prefixedAndUnprefixedFeature = UseCounter::PrefixedAndUnprefixedTransiti onEndEvent;
189 } else if (legacyTypeName == EventTypeNames::webkitAnimationEnd) {
190 prefixedFeature = UseCounter::PrefixedAnimationEndEvent;
191 unprefixedFeature = UseCounter::UnprefixedAnimationEndEvent;
192 prefixedAndUnprefixedFeature = UseCounter::PrefixedAndUnprefixedAnimatio nEndEvent;
193 } else if (legacyTypeName == EventTypeNames::webkitAnimationStart) {
194 prefixedFeature = UseCounter::PrefixedAnimationStartEvent;
195 unprefixedFeature = UseCounter::UnprefixedAnimationStartEvent;
196 prefixedAndUnprefixedFeature = UseCounter::PrefixedAndUnprefixedAnimatio nStartEvent;
197 } else if (legacyTypeName == EventTypeNames::webkitAnimationIteration) {
198 prefixedFeature = UseCounter::PrefixedAnimationIterationEvent;
199 unprefixedFeature = UseCounter::UnprefixedAnimationIterationEvent;
200 prefixedAndUnprefixedFeature = UseCounter::PrefixedAndUnprefixedAnimatio nIterationEvent;
201 } else {
202 return;
203 }
204
205 if (LocalDOMWindow* executingWindow = this->executingWindow()) {
206 if (legacyListenersVector) {
207 if (listenersVector)
208 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature);
209 else
210 UseCounter::count(executingWindow->document(), prefixedFeature);
211 } else if (listenersVector) {
212 UseCounter::count(executingWindow->document(), unprefixedFeature);
213 }
214 }
215 }
216
217 bool EventTarget::fireEventListeners(Event* event) 168 bool EventTarget::fireEventListeners(Event* event)
218 { 169 {
219 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); 170 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden());
220 ASSERT(event && !event->type().isEmpty()); 171 ASSERT(event && !event->type().isEmpty());
221 172
222 EventTargetData* d = eventTargetData(); 173 EventTargetData* d = eventTargetData();
223 if (!d) 174 if (!d)
224 return true; 175 return true;
225 176
226 EventListenerVector* legacyListenersVector = 0; 177 EventListenerVector* legacyListenersVector = 0;
227 AtomicString legacyTypeName = legacyType(event); 178 AtomicString legacyTypeName = legacyType(event);
228 if (!legacyTypeName.isEmpty()) 179 if (!legacyTypeName.isEmpty())
229 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); 180 legacyListenersVector = d->eventListenerMap.find(legacyTypeName);
230 181
231 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( )); 182 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( ));
232 if (!RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled() && (event->type () == EventTypeNames::animationiteration || event->type() == EventTypeNames::ani mationend
233 || event->type() == EventTypeNames::animationstart)
234 // Some code out-there uses custom events to dispatch unprefixed animati on events manually,
235 // we can safely remove all this block when cssAnimationUnprefixedEnable d is always on, this
236 // is really a special case. DO NOT ADD MORE EVENTS HERE.
237 && event->interfaceName() != EventNames::CustomEvent)
238 listenersVector = 0;
239 183
240 if (listenersVector) { 184 if (listenersVector) {
241 fireEventListeners(event, d, *listenersVector); 185 fireEventListeners(event, d, *listenersVector);
242 } else if (legacyListenersVector) { 186 } else if (legacyListenersVector) {
243 AtomicString unprefixedTypeName = event->type(); 187 AtomicString unprefixedTypeName = event->type();
244 event->setType(legacyTypeName); 188 event->setType(legacyTypeName);
245 fireEventListeners(event, d, *legacyListenersVector); 189 fireEventListeners(event, d, *legacyListenersVector);
246 event->setType(unprefixedTypeName); 190 event->setType(unprefixedTypeName);
247 } 191 }
248 192
249 Editor::countEvent(executionContext(), event); 193 Editor::countEvent(executionContext(), event);
250 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector);
251 return !event->defaultPrevented(); 194 return !event->defaultPrevented();
252 } 195 }
253 196
254 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) 197 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry)
255 { 198 {
256 RefPtr<EventTarget> protect(this); 199 RefPtr<EventTarget> protect(this);
257 200
258 // Fire all listeners registered for this event. Don't fire listeners remove d 201 // Fire all listeners registered for this event. Don't fire listeners remove d
259 // during event dispatch. Also, don't fire event listeners added during even t 202 // during event dispatch. Also, don't fire event listeners added during even t
260 // dispatch. Conveniently, all new event listeners will be added after or at 203 // dispatch. Conveniently, all new event listeners will be added after or at
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // they have one less listener to invoke. 275 // they have one less listener to invoke.
333 if (d->firingEventIterators) { 276 if (d->firingEventIterators) {
334 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 277 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
335 d->firingEventIterators->at(i).iterator = 0; 278 d->firingEventIterators->at(i).iterator = 0;
336 d->firingEventIterators->at(i).end = 0; 279 d->firingEventIterators->at(i).end = 0;
337 } 280 }
338 } 281 }
339 } 282 }
340 283
341 } // namespace blink 284 } // namespace blink
OLDNEW
« no previous file with comments | « sky/engine/core/events/EventTarget.h ('k') | sky/engine/core/events/EventTypeNames.in » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698