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

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: Rebase Created 5 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
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 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 240 }
241 241
242 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType) 242 bool EventTarget::clearAttributeEventListener(const AtomicString& eventType)
243 { 243 {
244 EventListener* listener = getAttributeEventListener(eventType); 244 EventListener* listener = getAttributeEventListener(eventType);
245 if (!listener) 245 if (!listener)
246 return false; 246 return false;
247 return removeEventListener(eventType, listener, false); 247 return removeEventListener(eventType, listener, false);
248 } 248 }
249 249
250 bool EventTarget::dispatchEventForBindings(PassRefPtrWillBeRawPtr<Event> event, ExceptionState& exceptionState) 250 bool EventTarget::dispatchEventForBindings(PassRefPtrWillBeRawPtr<Event> dispatc hEvent, ExceptionState& exceptionState)
251 { 251 {
252 RefPtrWillBeRawPtr<Event> event = dispatchEvent;
253 if (!event) {
254 exceptionState.throwDOMException(InvalidStateError, "The event provided is null.");
philipj_slow 2015/12/04 22:38:51 Why did you add back the null check? If it was whi
dtapuska 2015/12/07 14:25:30 Ah yes resolve issue because I needed to hold onto
255 return false;
256 }
252 if (event->type().isEmpty()) { 257 if (event->type().isEmpty()) {
253 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized."); 258 exceptionState.throwDOMException(InvalidStateError, "The event provided is uninitialized.");
254 return false; 259 return false;
255 } 260 }
256 if (event->isBeingDispatched()) { 261 if (event->isBeingDispatched()) {
257 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched."); 262 exceptionState.throwDOMException(InvalidStateError, "The event is alread y being dispatched.");
258 return false; 263 return false;
259 } 264 }
260 265
261 if (!executionContext()) 266 if (!executionContext())
262 return false; 267 return false;
263 268
264 event->setTrusted(false); 269 event->setTrusted(false);
265 return dispatchEventInternal(event); 270
271 // Return whether the event was cancelled or not to JS not that it
philipj_slow 2015/12/04 22:38:51 Does this change observable behavior? I can't unde
dtapuska 2015/12/07 14:25:30 Well it may in some cases; Touch and Mouse event l
philipj_slow 2015/12/07 15:03:56 It would be good if any observable changes are don
272 // might have actually been handled; so throw away the result of
273 // dispatchEventInternal.
274 dispatchEventInternal(event);
275 return !event->defaultPrevented();
266 } 276 }
267 277
268 bool EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event) 278 WebInputEventResult EventTarget::dispatchEvent(PassRefPtrWillBeRawPtr<Event> eve nt)
269 { 279 {
270 event->setTrusted(true); 280 event->setTrusted(true);
271 return dispatchEventInternal(event); 281 return dispatchEventInternal(event);
272 } 282 }
273 283
274 bool EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Event> event) 284 WebInputEventResult EventTarget::dispatchEventInternal(PassRefPtrWillBeRawPtr<Ev ent> event)
275 { 285 {
276 event->setTarget(this); 286 event->setTarget(this);
277 event->setCurrentTarget(this); 287 event->setCurrentTarget(this);
278 event->setEventPhase(Event::AT_TARGET); 288 event->setEventPhase(Event::AT_TARGET);
279 bool defaultWasNotPrevented = fireEventListeners(event.get()); 289 WebInputEventResult result = fireEventListeners(event.get());
280 event->setEventPhase(0); 290 event->setEventPhase(0);
281 return defaultWasNotPrevented; 291 return result;
282 } 292 }
283 293
284 void EventTarget::uncaughtExceptionInEventHandler() 294 void EventTarget::uncaughtExceptionInEventHandler()
285 { 295 {
286 } 296 }
287 297
288 static const AtomicString& legacyType(const Event* event) 298 static const AtomicString& legacyType(const Event* event)
289 { 299 {
290 if (event->type() == EventTypeNames::transitionend) 300 if (event->type() == EventTypeNames::transitionend)
291 return EventTypeNames::webkitTransitionEnd; 301 return EventTypeNames::webkitTransitionEnd;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 if (listenersVector) 345 if (listenersVector)
336 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature); 346 UseCounter::count(executingWindow->document(), prefixedAndUnpref ixedFeature);
337 else 347 else
338 UseCounter::count(executingWindow->document(), prefixedFeature); 348 UseCounter::count(executingWindow->document(), prefixedFeature);
339 } else if (listenersVector) { 349 } else if (listenersVector) {
340 UseCounter::count(executingWindow->document(), unprefixedFeature); 350 UseCounter::count(executingWindow->document(), unprefixedFeature);
341 } 351 }
342 } 352 }
343 } 353 }
344 354
345 bool EventTarget::fireEventListeners(Event* event) 355 WebInputEventResult EventTarget::fireEventListeners(Event* event)
346 { 356 {
347 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden()); 357 ASSERT(!EventDispatchForbiddenScope::isEventDispatchForbidden());
348 ASSERT(event && !event->type().isEmpty()); 358 ASSERT(event && !event->type().isEmpty());
349 359
350 EventTargetData* d = eventTargetData(); 360 EventTargetData* d = eventTargetData();
351 if (!d) 361 if (!d)
352 return true; 362 return WebInputEventResult::NotHandled;
353 363
354 EventListenerVector* legacyListenersVector = nullptr; 364 EventListenerVector* legacyListenersVector = nullptr;
355 AtomicString legacyTypeName = legacyType(event); 365 AtomicString legacyTypeName = legacyType(event);
356 if (!legacyTypeName.isEmpty()) 366 if (!legacyTypeName.isEmpty())
357 legacyListenersVector = d->eventListenerMap.find(legacyTypeName); 367 legacyListenersVector = d->eventListenerMap.find(legacyTypeName);
358 368
359 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( )); 369 EventListenerVector* listenersVector = d->eventListenerMap.find(event->type( ));
360 370
361 if (listenersVector) { 371 if (listenersVector) {
362 fireEventListeners(event, d, *listenersVector); 372 fireEventListeners(event, d, *listenersVector);
363 } else if (legacyListenersVector) { 373 } else if (legacyListenersVector) {
364 AtomicString unprefixedTypeName = event->type(); 374 AtomicString unprefixedTypeName = event->type();
365 event->setType(legacyTypeName); 375 event->setType(legacyTypeName);
366 fireEventListeners(event, d, *legacyListenersVector); 376 fireEventListeners(event, d, *legacyListenersVector);
367 event->setType(unprefixedTypeName); 377 event->setType(unprefixedTypeName);
368 } 378 }
369 379
370 Editor::countEvent(executionContext(), event); 380 Editor::countEvent(executionContext(), event);
371 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector); 381 countLegacyEvents(legacyTypeName, listenersVector, legacyListenersVector);
372 return !event->defaultPrevented(); 382 return event->eventResult();
373 } 383 }
374 384
375 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) 385 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry)
376 { 386 {
377 RefPtrWillBeRawPtr<EventTarget> protect(this); 387 RefPtrWillBeRawPtr<EventTarget> protect(this);
378 388
379 // Fire all listeners registered for this event. Don't fire listeners remove d 389 // Fire all listeners registered for this event. Don't fire listeners remove d
380 // during event dispatch. Also, don't fire event listeners added during even t 390 // during event dispatch. Also, don't fire event listeners added during even t
381 // dispatch. Conveniently, all new event listeners will be added after or at 391 // dispatch. Conveniently, all new event listeners will be added after or at
382 // index |size|, so iterating up to (but not including) |size| naturally exc ludes 392 // index |size|, so iterating up to (but not including) |size| naturally exc ludes
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 // they have one less listener to invoke. 476 // they have one less listener to invoke.
467 if (d->firingEventIterators) { 477 if (d->firingEventIterators) {
468 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 478 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
469 d->firingEventIterators->at(i).iterator = 0; 479 d->firingEventIterators->at(i).iterator = 0;
470 d->firingEventIterators->at(i).end = 0; 480 d->firingEventIterators->at(i).end = 0;
471 } 481 }
472 } 482 }
473 } 483 }
474 484
475 } // namespace blink 485 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/events/EventTarget.h ('k') | third_party/WebKit/Source/core/events/FocusEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698