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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 return context->executingWindow(); | 78 return context->executingWindow(); |
79 return 0; | 79 return 0; |
80 } | 80 } |
81 | 81 |
82 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve
ntListener> listener, bool useCapture) | 82 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve
ntListener> listener, bool useCapture) |
83 { | 83 { |
84 // FIXME: listener null check should throw TypeError (and be done in | 84 // FIXME: listener null check should throw TypeError (and be done in |
85 // generated bindings), but breaks legacy content. http://crbug.com/249598 | 85 // generated bindings), but breaks legacy content. http://crbug.com/249598 |
86 if (!listener) | 86 if (!listener) |
87 return false; | 87 return false; |
88 EventListener* eventListener = listener.get(); | 88 return ensureEventTargetData().eventListenerMap.add(eventType, listener, use
Capture); |
89 if (ensureEventTargetData().eventListenerMap.add(eventType, listener, useCap
ture)) { | |
90 InspectorInstrumentation::didAddEventListener(this, eventType, eventList
ener, useCapture); | |
91 return true; | |
92 } | |
93 return false; | |
94 } | 89 } |
95 | 90 |
96 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen
er* listener, bool useCapture) | 91 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen
er* listener, bool useCapture) |
97 { | 92 { |
98 EventTargetData* d = eventTargetData(); | 93 EventTargetData* d = eventTargetData(); |
99 if (!d) | 94 if (!d) |
100 return false; | 95 return false; |
101 | 96 |
102 size_t indexOfRemovedListener; | 97 size_t indexOfRemovedListener; |
103 | 98 |
104 RefPtr<EventListener> protect(listener); | |
105 if (!d->eventListenerMap.remove(eventType, listener, useCapture, indexOfRemo
vedListener)) | 99 if (!d->eventListenerMap.remove(eventType, listener, useCapture, indexOfRemo
vedListener)) |
106 return false; | 100 return false; |
107 InspectorInstrumentation::didRemoveEventListener(this, eventType, listener,
useCapture); | |
108 | 101 |
109 // Notify firing events planning to invoke the listener at 'index' that | 102 // Notify firing events planning to invoke the listener at 'index' that |
110 // they have one less listener to invoke. | 103 // they have one less listener to invoke. |
111 if (!d->firingEventIterators) | 104 if (!d->firingEventIterators) |
112 return true; | 105 return true; |
113 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 106 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
114 FiringEventIterator& firingIterator = d->firingEventIterators->at(i); | 107 FiringEventIterator& firingIterator = d->firingEventIterators->at(i); |
115 if (eventType != firingIterator.eventType) | 108 if (eventType != firingIterator.eventType) |
116 continue; | 109 continue; |
117 | 110 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 EventTargetData* d = eventTargetData(); | 351 EventTargetData* d = eventTargetData(); |
359 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>(); | 352 return d ? d->eventListenerMap.eventTypes() : Vector<AtomicString>(); |
360 } | 353 } |
361 | 354 |
362 void EventTarget::removeAllEventListeners() | 355 void EventTarget::removeAllEventListeners() |
363 { | 356 { |
364 EventTargetData* d = eventTargetData(); | 357 EventTargetData* d = eventTargetData(); |
365 if (!d) | 358 if (!d) |
366 return; | 359 return; |
367 d->eventListenerMap.clear(); | 360 d->eventListenerMap.clear(); |
368 InspectorInstrumentation::didRemoveAllEventListeners(this); | |
369 | 361 |
370 // Notify firing events planning to invoke the listener at 'index' that | 362 // Notify firing events planning to invoke the listener at 'index' that |
371 // they have one less listener to invoke. | 363 // they have one less listener to invoke. |
372 if (d->firingEventIterators) { | 364 if (d->firingEventIterators) { |
373 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 365 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
374 d->firingEventIterators->at(i).iterator = 0; | 366 d->firingEventIterators->at(i).iterator = 0; |
375 d->firingEventIterators->at(i).end = 0; | 367 d->firingEventIterators->at(i).end = 0; |
376 } | 368 } |
377 } | 369 } |
378 } | 370 } |
379 | 371 |
380 } // namespace WebCore | 372 } // namespace WebCore |
OLD | NEW |