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 25 matching lines...) Expand all Loading... |
36 #include "bindings/core/v8/V8DOMActivityLogger.h" | 36 #include "bindings/core/v8/V8DOMActivityLogger.h" |
37 #include "core/dom/ExceptionCode.h" | 37 #include "core/dom/ExceptionCode.h" |
38 #include "core/editing/Editor.h" | 38 #include "core/editing/Editor.h" |
39 #include "core/events/Event.h" | 39 #include "core/events/Event.h" |
40 #include "core/inspector/InspectorInstrumentation.h" | 40 #include "core/inspector/InspectorInstrumentation.h" |
41 #include "core/frame/LocalDOMWindow.h" | 41 #include "core/frame/LocalDOMWindow.h" |
42 #include "core/frame/UseCounter.h" | 42 #include "core/frame/UseCounter.h" |
43 #include "platform/EventDispatchForbiddenScope.h" | 43 #include "platform/EventDispatchForbiddenScope.h" |
44 #include "platform/RuntimeEnabledFeatures.h" | 44 #include "platform/RuntimeEnabledFeatures.h" |
45 #include "wtf/StdLibExtras.h" | 45 #include "wtf/StdLibExtras.h" |
| 46 #include "wtf/Threading.h" |
46 #include "wtf/Vector.h" | 47 #include "wtf/Vector.h" |
47 | 48 |
48 using namespace WTF; | 49 using namespace WTF; |
49 | 50 |
50 namespace blink { | 51 namespace blink { |
51 | 52 |
52 EventTargetData::EventTargetData() | 53 EventTargetData::EventTargetData() |
53 { | 54 { |
54 } | 55 } |
55 | 56 |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli
ng | 350 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli
ng |
350 // event listeners, even though that violates some versions of the DOM s
pec. | 351 // event listeners, even though that violates some versions of the DOM s
pec. |
351 registeredListener.listener->handleEvent(context, event); | 352 registeredListener.listener->handleEvent(context, event); |
352 InspectorInstrumentation::didHandleEvent(cookie); | 353 InspectorInstrumentation::didHandleEvent(cookie); |
353 } | 354 } |
354 d->firingEventIterators->removeLast(); | 355 d->firingEventIterators->removeLast(); |
355 } | 356 } |
356 | 357 |
357 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev
entType) | 358 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev
entType) |
358 { | 359 { |
359 DEFINE_STATIC_LOCAL(EventListenerVector, emptyVector, ()); | 360 AtomicallyInitializedStatic(EventListenerVector*, emptyVector = new EventLis
tenerVector); |
360 | 361 |
361 EventTargetData* d = eventTargetData(); | 362 EventTargetData* d = eventTargetData(); |
362 if (!d) | 363 if (!d) |
363 return emptyVector; | 364 return *emptyVector; |
364 | 365 |
365 EventListenerVector* listenerVector = d->eventListenerMap.find(eventType); | 366 EventListenerVector* listenerVector = d->eventListenerMap.find(eventType); |
366 if (!listenerVector) | 367 if (!listenerVector) |
367 return emptyVector; | 368 return *emptyVector; |
368 | 369 |
369 return *listenerVector; | 370 return *listenerVector; |
370 } | 371 } |
371 | 372 |
372 Vector<AtomicString> EventTarget::eventTypes() | 373 Vector<AtomicString> EventTarget::eventTypes() |
373 { | 374 { |
374 EventTargetData* d = eventTargetData(); | 375 EventTargetData* d = eventTargetData(); |
375 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>(); | 376 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>(); |
376 } | 377 } |
377 | 378 |
378 void EventTarget::removeAllEventListeners() | 379 void EventTarget::removeAllEventListeners() |
379 { | 380 { |
380 EventTargetData* d = eventTargetData(); | 381 EventTargetData* d = eventTargetData(); |
381 if (!d) | 382 if (!d) |
382 return; | 383 return; |
383 d->eventListenerMap.clear(); | 384 d->eventListenerMap.clear(); |
384 | 385 |
385 // Notify firing events planning to invoke the listener at 'index' that | 386 // Notify firing events planning to invoke the listener at 'index' that |
386 // they have one less listener to invoke. | 387 // they have one less listener to invoke. |
387 if (d->firingEventIterators) { | 388 if (d->firingEventIterators) { |
388 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 389 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
389 d->firingEventIterators->at(i).iterator = 0; | 390 d->firingEventIterators->at(i).iterator = 0; |
390 d->firingEventIterators->at(i).end = 0; | 391 d->firingEventIterators->at(i).end = 0; |
391 } | 392 } |
392 } | 393 } |
393 } | 394 } |
394 | 395 |
395 } // namespace blink | 396 } // namespace blink |
OLD | NEW |