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