Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: Source/core/events/EventTarget.cpp

Issue 114033002: DevTools: Capture async stacks for event listeners. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: addressed Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 76
77 inline DOMWindow* EventTarget::executingWindow() 77 inline DOMWindow* EventTarget::executingWindow()
78 { 78 {
79 if (ExecutionContext* context = executionContext()) 79 if (ExecutionContext* context = executionContext())
80 return context->executingWindow(); 80 return context->executingWindow();
81 return 0; 81 return 0;
82 } 82 }
83 83
84 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener> listener, bool useCapture) 84 bool EventTarget::addEventListener(const AtomicString& eventType, PassRefPtr<Eve ntListener> listener, bool useCapture)
85 { 85 {
86 return ensureEventTargetData().eventListenerMap.add(eventType, listener, use Capture); 86 EventListener* eventListener = listener.get();
87 if (ensureEventTargetData().eventListenerMap.add(eventType, listener, useCap ture)) {
88 InspectorInstrumentation::didAddEventListener(this, eventType, eventList ener, useCapture);
89 return true;
90 }
91 return false;
87 } 92 }
88 93
89 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen er* listener, bool useCapture) 94 bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen er* listener, bool useCapture)
90 { 95 {
91 EventTargetData* d = eventTargetData(); 96 EventTargetData* d = eventTargetData();
92 if (!d) 97 if (!d)
93 return false; 98 return false;
94 99
95 size_t indexOfRemovedListener; 100 size_t indexOfRemovedListener;
96 101
97 if (!d->eventListenerMap.remove(eventType, listener, useCapture, indexOfRemo vedListener)) 102 if (!d->eventListenerMap.remove(eventType, listener, useCapture, indexOfRemo vedListener))
98 return false; 103 return false;
104 InspectorInstrumentation::didRemoveEventListener(this, eventType, listener, useCapture);
99 105
100 // Notify firing events planning to invoke the listener at 'index' that 106 // Notify firing events planning to invoke the listener at 'index' that
101 // they have one less listener to invoke. 107 // they have one less listener to invoke.
102 if (!d->firingEventIterators) 108 if (!d->firingEventIterators)
103 return true; 109 return true;
104 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 110 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
105 FiringEventIterator& firingIterator = d->firingEventIterators->at(i); 111 FiringEventIterator& firingIterator = d->firingEventIterators->at(i);
106 if (eventType != firingIterator.eventType) 112 if (eventType != firingIterator.eventType)
107 continue; 113 continue;
108 114
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 326
321 // If stopImmediatePropagation has been called, we just break out immedi ately, without 327 // If stopImmediatePropagation has been called, we just break out immedi ately, without
322 // handling any more events on this target. 328 // handling any more events on this target.
323 if (event->immediatePropagationStopped()) 329 if (event->immediatePropagationStopped())
324 break; 330 break;
325 331
326 ExecutionContext* context = executionContext(); 332 ExecutionContext* context = executionContext();
327 if (!context) 333 if (!context)
328 break; 334 break;
329 335
330 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willHa ndleEvent(context, event); 336 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willHa ndleEvent(this, event->type(), registeredListener.listener.get(), registeredList ener.useCapture);
331 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng 337 // To match Mozilla, the AT_TARGET phase fires both capturing and bubbli ng
332 // event listeners, even though that violates some versions of the DOM s pec. 338 // event listeners, even though that violates some versions of the DOM s pec.
333 registeredListener.listener->handleEvent(context, event); 339 registeredListener.listener->handleEvent(context, event);
334 if (!userEventWasHandled && UserGestureIndicator::processingUserGesture( )) 340 if (!userEventWasHandled && UserGestureIndicator::processingUserGesture( ))
335 userEventWasHandled = true; 341 userEventWasHandled = true;
336 InspectorInstrumentation::didHandleEvent(cookie); 342 InspectorInstrumentation::didHandleEvent(cookie);
337 } 343 }
338 d->firingEventIterators->removeLast(); 344 d->firingEventIterators->removeLast();
339 if (userEventWasHandled) { 345 if (userEventWasHandled) {
340 if (ExecutionContext* context = executionContext()) 346 if (ExecutionContext* context = executionContext())
(...skipping 15 matching lines...) Expand all
356 362
357 return *listenerVector; 363 return *listenerVector;
358 } 364 }
359 365
360 void EventTarget::removeAllEventListeners() 366 void EventTarget::removeAllEventListeners()
361 { 367 {
362 EventTargetData* d = eventTargetData(); 368 EventTargetData* d = eventTargetData();
363 if (!d) 369 if (!d)
364 return; 370 return;
365 d->eventListenerMap.clear(); 371 d->eventListenerMap.clear();
372 InspectorInstrumentation::didRemoveAllEventListeners(this);
366 373
367 // Notify firing events planning to invoke the listener at 'index' that 374 // Notify firing events planning to invoke the listener at 'index' that
368 // they have one less listener to invoke. 375 // they have one less listener to invoke.
369 if (d->firingEventIterators) { 376 if (d->firingEventIterators) {
370 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) { 377 for (size_t i = 0; i < d->firingEventIterators->size(); ++i) {
371 d->firingEventIterators->at(i).iterator = 0; 378 d->firingEventIterators->at(i).iterator = 0;
372 d->firingEventIterators->at(i).end = 0; 379 d->firingEventIterators->at(i).end = 0;
373 } 380 }
374 } 381 }
375 } 382 }
376 383
377 } // namespace WebCore 384 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/inspector/debugger/async-callstack-expected.txt ('k') | Source/core/inspector/AsyncCallStackTracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698