OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |