Chromium Code Reviews| 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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 61 Node* EventTarget::toNode() | 61 Node* EventTarget::toNode() |
| 62 { | 62 { |
| 63 return 0; | 63 return 0; |
| 64 } | 64 } |
| 65 | 65 |
| 66 DOMWindow* EventTarget::toDOMWindow() | 66 DOMWindow* EventTarget::toDOMWindow() |
| 67 { | 67 { |
| 68 return 0; | 68 return 0; |
| 69 } | 69 } |
| 70 | 70 |
| 71 inline DOMWindow* EventTarget::browsingContext() | |
| 72 { | |
| 73 if (ScriptExecutionContext* context = scriptExecutionContext()) | |
| 74 return context->browsingContext(); | |
| 75 return 0; | |
| 76 } | |
| 77 | |
| 71 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener> listener, bool useCapture) | 78 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener> listener, bool useCapture) |
| 72 { | 79 { |
| 73 EventTargetData* d = ensureEventTargetData(); | 80 EventTargetData* d = ensureEventTargetData(); |
| 74 return d->eventListenerMap.add(eventType, listener, useCapture); | 81 return d->eventListenerMap.add(eventType, listener, useCapture); |
| 75 } | 82 } |
| 76 | 83 |
| 77 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen er* listener, bool useCapture) | 84 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen er* listener, bool useCapture) |
| 78 { | 85 { |
| 79 EventTargetData* d = eventTargetData(); | 86 EventTargetData* d = eventTargetData(); |
| 80 if (!d) | 87 if (!d) |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 if (listenerUnprefixedVector) | 203 if (listenerUnprefixedVector) |
| 197 fireEventListeners(event, d, *listenerUnprefixedVector); | 204 fireEventListeners(event, d, *listenerUnprefixedVector); |
| 198 else if (listenerPrefixedVector) { | 205 else if (listenerPrefixedVector) { |
| 199 AtomicString unprefixedTypeName = event->type(); | 206 AtomicString unprefixedTypeName = event->type(); |
| 200 event->setType(prefixedTypeName); | 207 event->setType(prefixedTypeName); |
| 201 fireEventListeners(event, d, *listenerPrefixedVector); | 208 fireEventListeners(event, d, *listenerPrefixedVector); |
| 202 event->setType(unprefixedTypeName); | 209 event->setType(unprefixedTypeName); |
| 203 } | 210 } |
| 204 | 211 |
| 205 if (!prefixedTypeName.isEmpty()) { | 212 if (!prefixedTypeName.isEmpty()) { |
| 206 ScriptExecutionContext* context = scriptExecutionContext(); | 213 if (DOMWindow* browsingContext = this->browsingContext()) { |
| 207 if (context && context->isDocument()) { | 214 if (listenerPrefixedVector) { |
| 208 Document* document = toDocument(context); | 215 if (listenerUnprefixedVector) |
| 209 if (document->domWindow()) { | 216 UseCounter::count(browsingContext, UseCounter::PrefixedAndUn prefixedTransitionEndEvent); |
| 210 if (listenerPrefixedVector) | 217 else |
| 211 if (listenerUnprefixedVector) | 218 UseCounter::count(browsingContext, UseCounter::PrefixedTrans itionEndEvent); |
| 212 UseCounter::count(document->domWindow(), UseCounter::Pre fixedAndUnprefixedTransitionEndEvent); | 219 } else if (listenerUnprefixedVector) { |
| 213 else | 220 UseCounter::count(browsingContext, UseCounter::UnprefixedTransit ionEndEvent); |
| 214 UseCounter::count(document->domWindow(), UseCounter::Pre fixedTransitionEndEvent); | |
| 215 else if (listenerUnprefixedVector) | |
| 216 UseCounter::count(document->domWindow(), UseCounter::Unprefi xedTransitionEndEvent); | |
| 217 } | 221 } |
| 218 } | 222 } |
| 219 } | 223 } |
| 220 | 224 |
| 221 return !event->defaultPrevented(); | 225 return !event->defaultPrevented(); |
| 222 } | 226 } |
| 223 | 227 |
| 224 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) | 228 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList enerVector& entry) |
| 225 { | 229 { |
| 226 RefPtr<EventTarget> protect = this; | 230 RefPtr<EventTarget> protect = this; |
| 227 | 231 |
| 228 // Fire all listeners registered for this event. Don't fire listeners remove d | 232 // Fire all listeners registered for this event. Don't fire listeners remove d |
| 229 // during event dispatch. Also, don't fire event listeners added during even t | 233 // during event dispatch. Also, don't fire event listeners added during even t |
| 230 // dispatch. Conveniently, all new event listeners will be added after or at | 234 // dispatch. Conveniently, all new event listeners will be added after or at |
| 231 // index |size|, so iterating up to (but not including) |size| naturally exc ludes | 235 // index |size|, so iterating up to (but not including) |size| naturally exc ludes |
| 232 // new event listeners. | 236 // new event listeners. |
| 233 | 237 |
| 234 ScriptExecutionContext* context = scriptExecutionContext(); | 238 if (event->type() == eventNames().beforeunloadEvent) { |
| 235 if (context && context->isDocument() && event->type() == eventNames().before unloadEvent) { | 239 if (DOMWindow* browsingContext = this->browsingContext()) { |
| 236 Document* document = toDocument(context); | 240 if (browsingContext->top()) |
| 237 if (DOMWindow* domWindow = document->domWindow()) { | 241 UseCounter::count(browsingContext, UseCounter::SubFrameBeforeUnl oadFired); |
| 238 if (domWindow != domWindow->top()) | |
| 239 UseCounter::count(domWindow, UseCounter::SubFrameBeforeUnloadFir ed); | |
| 240 } | 242 } |
| 241 } | 243 } |
| 242 | 244 |
| 243 bool userEventWasHandled = false; | 245 bool userEventWasHandled = false; |
| 244 size_t i = 0; | 246 size_t i = 0; |
| 245 size_t size = entry.size(); | 247 size_t size = entry.size(); |
| 246 if (!d->firingEventIterators) | 248 if (!d->firingEventIterators) |
| 247 d->firingEventIterators = adoptPtr(new FiringEventIteratorVector); | 249 d->firingEventIterators = adoptPtr(new FiringEventIteratorVector); |
| 248 d->firingEventIterators->append(FiringEventIterator(event->type(), i, size)) ; | 250 d->firingEventIterators->append(FiringEventIterator(event->type(), i, size)) ; |
| 249 for ( ; i < size; ++i) { | 251 for ( ; i < size; ++i) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 262 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willHa ndleEvent(context, event); | 264 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willHa ndleEvent(context, event); |
| 263 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng | 265 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng |
| 264 // event listeners, even though that violates some versions of the DOM s pec. | 266 // event listeners, even though that violates some versions of the DOM s pec. |
| 265 registeredListener.listener->handleEvent(context, event); | 267 registeredListener.listener->handleEvent(context, event); |
| 266 if (!userEventWasHandled && ScriptController::processingUserGesture()) | 268 if (!userEventWasHandled && ScriptController::processingUserGesture()) |
| 267 userEventWasHandled = true; | 269 userEventWasHandled = true; |
| 268 InspectorInstrumentation::didHandleEvent(cookie); | 270 InspectorInstrumentation::didHandleEvent(cookie); |
| 269 } | 271 } |
| 270 d->firingEventIterators->removeLast(); | 272 d->firingEventIterators->removeLast(); |
| 271 if (userEventWasHandled) { | 273 if (userEventWasHandled) { |
| 272 ScriptExecutionContext* context = scriptExecutionContext(); | 274 if (ScriptExecutionContext* context = scriptExecutionContext()) |
| 273 if (context && context->isDocument()) { | 275 context->userEventWasHandled(); |
|
abarth-chromium
2013/08/09 16:25:53
userEventWasHandled -> didHandleUserEvent ?
| |
| 274 Document* document = toDocument(context); | |
| 275 document->resetLastHandledUserGestureTimestamp(); | |
| 276 } | |
| 277 } | 276 } |
| 278 } | 277 } |
| 279 | 278 |
| 280 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev entType) | 279 const EventListenerVector& EventTarget::getEventListeners(const AtomicString& ev entType) |
| 281 { | 280 { |
| 282 DEFINE_STATIC_LOCAL(EventListenerVector, emptyVector, ()); | 281 DEFINE_STATIC_LOCAL(EventListenerVector, emptyVector, ()); |
| 283 | 282 |
| 284 EventTargetData* d = eventTargetData(); | 283 EventTargetData* d = eventTargetData(); |
| 285 if (!d) | 284 if (!d) |
| 286 return emptyVector; | 285 return emptyVector; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 303 // they have one less listener to invoke. | 302 // they have one less listener to invoke. |
| 304 if (d->firingEventIterators) { | 303 if (d->firingEventIterators) { |
| 305 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { | 304 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { |
| 306 d->firingEventIterators->at(i).iterator = 0; | 305 d->firingEventIterators->at(i).iterator = 0; |
| 307 d->firingEventIterators->at(i).end = 0; | 306 d->firingEventIterators->at(i).end = 0; |
| 308 } | 307 } |
| 309 } | 308 } |
| 310 } | 309 } |
| 311 | 310 |
| 312 } // namespace WebCore | 311 } // namespace WebCore |
| OLD | NEW |