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 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |