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

Side by Side Diff: third_party/WebKit/Source/core/events/EventTarget.cpp

Issue 1479923002: Enumerate the return value of dispatchEvent so it is clear. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_passive_uma_add
Patch Set: Fix comments Created 4 years, 10 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 /* 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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 } 242 }
243 243
244 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType) 244 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType)
245 { 245 {
246 EventListener* listener = getAttributeEventListener(eventType); 246 EventListener* listener = getAttributeEventListener(eventType);
247 if (!listener) 247 if (!listener)
248 return false; 248 return false;
249 return removeEventListener(eventType, listener, false); 249 return removeEventListener(eventType, listener, false);
250 } 250 }
251 251
252 bool EventTarget::dispatchEventForBindings(PassRefPtrWillBeRawPtr<Event> event, ExceptionState& exceptionState) 252 bool EventTarget::dispatchEventForBindings(PassRefPtrWillBeRawPtr<Event> dispatc hEvent, ExceptionState& exceptionState)
253 { 253 {
254 RefPtrWillBeRawPtr<Event> event = dispatchEvent;
philipj_slow 2016/02/25 15:23:46 If this is to protect the event for its use in the
dtapuska 2016/02/25 22:06:10 Done.
254 if (event->type().isEmpty()) { 255 if (event->type().isEmpty()) {
255 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized."); 256 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized.");
256 return false; 257 return false;
257 } 258 }
258 if (event->isBeingDispatched()) { 259 if (event->isBeingDispatched()) {
259 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched."); 260 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched.");
260 return false; 261 return false;
261 } 262 }
262 263
263 if (!executionContext()) 264 if (!executionContext())
264 return false; 265 return false;
265 266
266 event->setTrusted(false); 267 event->setTrusted(false);
267 return dispatchEventInternal(event); 268
269 // Return whether the event was cancelled or not to JS not that it
270 // might have actually been handled; so throw away the result of
271 // dispatchEventInternal.
272 dispatchEventInternal(event);
273 return !event->defaultPrevented();
philipj_slow 2016/02/25 15:23:46 Will this not be equivalent to dispatchEventIntern
dtapuska 2016/02/25 22:06:10 Done.
268 } 274 }
269 275
270 bool EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) 276 DispatchEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> eve nt)
271 { 277 {
272 event->setTrusted(true); 278 event->setTrusted(true);
273 return dispatchEventInternal(event); 279 return dispatchEventInternal(event);
274 } 280 }
275 281
276 bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) 282 DispatchEventResult EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Ev ent> event)
277 { 283 {
278 event->setTarget(this); 284 event->setTarget(this);
279 event->setCurrentTarget(this); 285 event->setCurrentTarget(this);
280 event->setEventPhase(Event::AT_TARGET); 286 event->setEventPhase(Event::AT_TARGET);
281 bool defaultWasNotPrevented = fireEventListeners(event.get()); 287 DispatchEventResult result = fireEventListeners(event.get());
282 event->setEventPhase(0); 288 event->setEventPhase(0);
283 return defaultWasNotPrevented; 289 return result;
284 } 290 }
285 291
286 void EventTarget::uncaughtExceptionInEventHandler() 292 void EventTarget::uncaughtExceptionInEventHandler()
287 { 293 {
288 } 294 }
289 295
290 static const AtomicString& legacyType(const Event* event) 296 static const AtomicString& legacyType(const Event* event)
291 { 297 {
292 if (event->type() == EventTypeNames::transitionend) 298 if (event->type() == EventTypeNames::transitionend)
293 return EventTypeNames::webkitTransitionEnd; 299 return EventTypeNames::webkitTransitionEnd;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 if (listenersVector) 347 if (listenersVector)
342 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature); 348 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature);
343 else 349 else
344 UseCounter::count(executingWindow->document(), prefixedFeature); 350 UseCounter::count(executingWindow->document(), prefixedFeature);
345 } else if (listenersVector) { 351 } else if (listenersVector) {
346 UseCounter::count(executingWindow->document(), unprefixedFeature); 352 UseCounter::count(executingWindow->document(), unprefixedFeature);
347 } 353 }
348 } 354 }
349 } 355 }
350 356
351 bool EventTarget::fireEventListeners(Event* event) 357 DispatchEventResult EventTarget::fireEventListeners(Event* event)
352 { 358 {
353 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); 359 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden());
354 ASSERT(event && !event->type().isEmpty()); 360 ASSERT(event && !event->type().isEmpty());
355 361
356 EventTargetData* d = eventTargetData(); 362 EventTargetData* d = eventTargetData();
357 if (!d) 363 if (!d)
358 return true; 364 return DispatchEventResult::NotCanceled;
359 365
360 EventListenerVector* legacyListenersVector = nullptr; 366 EventListenerVector* legacyListenersVector = nullptr;
361 AtomicString legacyTypeName = legacyType(event); 367 AtomicString legacyTypeName = legacyType(event);
362 if (!legacyTypeName.isEmpty()) 368 if (!legacyTypeName.isEmpty())
363 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); 369 legacyListenersVector = d->eventListenerMap.find(legacyTypeName);
364 370
365 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( )); 371 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( ));
366 372
367 if (listenersVector) { 373 if (listenersVector) {
368 fireEventListeners(event, d, *listenersVector); 374 fireEventListeners(event, d, *listenersVector);
369 } else if (legacyListenersVector) { 375 } else if (legacyListenersVector) {
370 AtomicString unprefixedTypeName = event->type(); 376 AtomicString unprefixedTypeName = event->type();
371 event->setType(legacyTypeName); 377 event->setType(legacyTypeName);
372 fireEventListeners(event, d, *legacyListenersVector); 378 fireEventListeners(event, d, *legacyListenersVector);
373 event->setType(unprefixedTypeName); 379 event->setType(unprefixedTypeName);
374 } 380 }
375 381
376 Editor::countEvent(executionContext(), event); 382 Editor::countEvent(executionContext(), event);
377 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); 383 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector);
378 return !event->defaultPrevented(); 384 return event->eventResult();
379 } 385 }
380 386
381 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) 387 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry)
382 { 388 {
383 RefPtrWillBeRawPtr<EventTarget> protect(this); 389 RefPtrWillBeRawPtr<EventTarget> protect(this);
384 390
385 // Fire all listeners registered for this event. Don't fire listeners remove d 391 // Fire all listeners registered for this event. Don't fire listeners remove d
386 // during event dispatch. Also, don't fire event listeners added during even t 392 // during event dispatch. Also, don't fire event listeners added during even t
387 // dispatch. Conveniently, all new event listeners will be added after or at 393 // dispatch. Conveniently, all new event listeners will be added after or at
388 // index |size|, so iterating up to (but not including) |size| naturally exc ludes 394 // index |size|, so iterating up to (but not including) |size| naturally exc ludes
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 // they have one less listener to invoke. 482 // they have one less listener to invoke.
477 if (d->firingEventIterators) { 483 if (d->firingEventIterators) {
478 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 484 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
479 d->firingEventIterators->at(i).iterator = 0; 485 d->firingEventIterators->at(i).iterator = 0;
480 d->firingEventIterators->at(i).end = 0; 486 d->firingEventIterators->at(i).end = 0;
481 } 487 }
482 } 488 }
483 } 489 }
484 490
485 } // namespace blink 491 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698