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

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: Add back the EventDispatchResult enum 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;
255 if (!event) {
tkent 2016/02/22 01:40:22 This check is unnecessary. It's done in binding l
dtapuska 2016/02/23 19:14:40 Done.
256 exceptionState.throwDOMException(InvalidStateError, "The event provided is null.");
257 return false;
258 }
254 if (event->type().isEmpty()) { 259 if (event->type().isEmpty()) {
255 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized."); 260 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized.");
256 return false; 261 return false;
257 } 262 }
258 if (event->isBeingDispatched()) { 263 if (event->isBeingDispatched()) {
259 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched."); 264 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched.");
260 return false; 265 return false;
261 } 266 }
262 267
263 if (!executionContext()) 268 if (!executionContext())
264 return false; 269 return false;
265 270
266 event->setTrusted(false); 271 event->setTrusted(false);
267 return dispatchEventInternal(event); 272
273 // Return whether the event was cancelled or not to JS not that it
274 // might have actually been handled; so throw away the result of
275 // dispatchEventInternal.
276 dispatchEventInternal(event);
277 return !event->defaultPrevented();
268 } 278 }
269 279
270 bool EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) 280 EventTarget::DispatchEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawP tr<Event> event)
271 { 281 {
272 event->setTrusted(true); 282 event->setTrusted(true);
273 return dispatchEventInternal(event); 283 return dispatchEventInternal(event);
274 } 284 }
275 285
276 bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) 286 EventTarget::DispatchEventResult EventTarget::dispatchEventInternal(PassRefPtrWi llBeRawPtr<Event> event)
277 { 287 {
278 event->setTarget(this); 288 event->setTarget(this);
279 event->setCurrentTarget(this); 289 event->setCurrentTarget(this);
280 event->setEventPhase(Event::AT_TARGET); 290 event->setEventPhase(Event::AT_TARGET);
281 bool defaultWasNotPrevented = fireEventListeners(event.get()); 291 EventTarget::DispatchEventResult result = fireEventListeners(event.get());
282 event->setEventPhase(0); 292 event->setEventPhase(0);
283 return defaultWasNotPrevented; 293 return result;
284 } 294 }
285 295
286 void EventTarget::uncaughtExceptionInEventHandler() 296 void EventTarget::uncaughtExceptionInEventHandler()
287 { 297 {
288 } 298 }
289 299
290 static const AtomicString& legacyType(const Event* event) 300 static const AtomicString& legacyType(const Event* event)
291 { 301 {
292 if (event->type() == EventTypeNames::transitionend) 302 if (event->type() == EventTypeNames::transitionend)
293 return EventTypeNames::webkitTransitionEnd; 303 return EventTypeNames::webkitTransitionEnd;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 if (listenersVector) 351 if (listenersVector)
342 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature); 352 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature);
343 else 353 else
344 UseCounter::count(executingWindow->document(), prefixedFeature); 354 UseCounter::count(executingWindow->document(), prefixedFeature);
345 } else if (listenersVector) { 355 } else if (listenersVector) {
346 UseCounter::count(executingWindow->document(), unprefixedFeature); 356 UseCounter::count(executingWindow->document(), unprefixedFeature);
347 } 357 }
348 } 358 }
349 } 359 }
350 360
351 bool EventTarget::fireEventListeners(Event* event) 361 EventTarget::DispatchEventResult EventTarget::fireEventListeners(Event* event)
352 { 362 {
353 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); 363 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden());
354 ASSERT(event && !event->type().isEmpty()); 364 ASSERT(event && !event->type().isEmpty());
355 365
356 EventTargetData* d = eventTargetData(); 366 EventTargetData* d = eventTargetData();
357 if (!d) 367 if (!d)
358 return true; 368 return EventTarget::DispatchEventResult::NotHandled;
359 369
360 EventListenerVector* legacyListenersVector = nullptr; 370 EventListenerVector* legacyListenersVector = nullptr;
361 AtomicString legacyTypeName = legacyType(event); 371 AtomicString legacyTypeName = legacyType(event);
362 if (!legacyTypeName.isEmpty()) 372 if (!legacyTypeName.isEmpty())
363 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); 373 legacyListenersVector = d->eventListenerMap.find(legacyTypeName);
364 374
365 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( )); 375 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( ));
366 376
367 if (listenersVector) { 377 if (listenersVector) {
368 fireEventListeners(event, d, *listenersVector); 378 fireEventListeners(event, d, *listenersVector);
369 } else if (legacyListenersVector) { 379 } else if (legacyListenersVector) {
370 AtomicString unprefixedTypeName = event->type(); 380 AtomicString unprefixedTypeName = event->type();
371 event->setType(legacyTypeName); 381 event->setType(legacyTypeName);
372 fireEventListeners(event, d, *legacyListenersVector); 382 fireEventListeners(event, d, *legacyListenersVector);
373 event->setType(unprefixedTypeName); 383 event->setType(unprefixedTypeName);
374 } 384 }
375 385
376 Editor::countEvent(executionContext(), event); 386 Editor::countEvent(executionContext(), event);
377 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); 387 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector);
378 return !event->defaultPrevented(); 388 return event->eventResult();
379 } 389 }
380 390
381 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) 391 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry)
382 { 392 {
383 RefPtrWillBeRawPtr<EventTarget> protect(this); 393 RefPtrWillBeRawPtr<EventTarget> protect(this);
384 394
385 // Fire all listeners registered for this event. Don't fire listeners remove d 395 // 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 396 // 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 397 // 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 398 // 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. 486 // they have one less listener to invoke.
477 if (d->firingEventIterators) { 487 if (d->firingEventIterators) {
478 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 488 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
479 d->firingEventIterators->at(i).iterator = 0; 489 d->firingEventIterators->at(i).iterator = 0;
480 d->firingEventIterators->at(i).end = 0; 490 d->firingEventIterators->at(i).end = 0;
481 } 491 }
482 } 492 }
483 } 493 }
484 494
485 } // namespace blink 495 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698