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

Side by Side Diff: Source/core/inspector/InspectorDOMAgent.cpp

Issue 1042853004: [DevTools] Event Listeners Sidebar shows window listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 8 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 getEventListeners(node, eventInformation, true); 941 getEventListeners(node, eventInformation, true);
942 942
943 // Get Capturing Listeners (in this order) 943 // Get Capturing Listeners (in this order)
944 size_t eventInformationLength = eventInformation.size(); 944 size_t eventInformationLength = eventInformation.size();
945 for (size_t i = 0; i < eventInformationLength; ++i) { 945 for (size_t i = 0; i < eventInformationLength; ++i) {
946 const EventListenerInfo& info = eventInformation[i]; 946 const EventListenerInfo& info = eventInformation[i];
947 const EventListenerVector& vector = info.eventListenerVector; 947 const EventListenerVector& vector = info.eventListenerVector;
948 for (size_t j = 0; j < vector.size(); ++j) { 948 for (size_t j = 0; j < vector.size(); ++j) {
949 const RegisteredEventListener& listener = vector[j]; 949 const RegisteredEventListener& listener = vector[j];
950 if (listener.useCapture) { 950 if (listener.useCapture) {
951 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objec tGroup); 951 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget, objectGroup);
952 if (listenerObject) 952 if (listenerObject)
953 listenersArray->addItem(listenerObject); 953 listenersArray->addItem(listenerObject);
954 } 954 }
955 } 955 }
956 } 956 }
957 957
958 // Get Bubbling Listeners (reverse order) 958 // Get Bubbling Listeners (reverse order)
959 for (size_t i = eventInformationLength; i; --i) { 959 for (size_t i = eventInformationLength; i; --i) {
960 const EventListenerInfo& info = eventInformation[i - 1]; 960 const EventListenerInfo& info = eventInformation[i - 1];
961 const EventListenerVector& vector = info.eventListenerVector; 961 const EventListenerVector& vector = info.eventListenerVector;
962 for (size_t j = 0; j < vector.size(); ++j) { 962 for (size_t j = 0; j < vector.size(); ++j) {
963 const RegisteredEventListener& listener = vector[j]; 963 const RegisteredEventListener& listener = vector[j];
964 if (!listener.useCapture) { 964 if (!listener.useCapture) {
965 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objec tGroup); 965 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget, objectGroup);
966 if (listenerObject) 966 if (listenerObject)
967 listenersArray->addItem(listenerObject); 967 listenersArray->addItem(listenerObject);
968 } 968 }
969 } 969 }
970 } 970 }
971 } 971 }
972 972
973 void InspectorDOMAgent::getEventListeners(EventTarget* target, Vector<EventListe nerInfo>& eventInformation, bool includeAncestors) 973 void InspectorDOMAgent::getEventListeners(EventTarget* target, Vector<EventListe nerInfo>& eventInformation, bool includeAncestors)
974 { 974 {
975 // The Node's Ancestors including self. 975 // The Node's Ancestors including self.
976 Vector<EventTarget*> ancestors; 976 Vector<EventTarget*> ancestors;
977 ancestors.append(target); 977 ancestors.append(target);
978 if (includeAncestors) { 978 if (includeAncestors) {
979 Node* node = target->toNode(); 979 Node* node = target->toNode();
980 for (ContainerNode* ancestor = node ? node->parentOrShadowHostNode() : n ullptr; ancestor; ancestor = ancestor->parentOrShadowHostNode()) 980 for (ContainerNode* ancestor = node ? node->parentOrShadowHostNode() : n ullptr; ancestor; ancestor = ancestor->parentOrShadowHostNode())
981 ancestors.append(ancestor); 981 ancestors.append(ancestor);
982 if (ExecutionContext* context = target->executionContext()) {
983 if (LocalDOMWindow* window = context->executingWindow())
984 ancestors.append(window);
985 }
982 } 986 }
983 987
984 // Nodes and their Listeners for the concerned event types (order is top to bottom) 988 // Nodes and their Listeners for the concerned event types (order is top to bottom)
985 for (size_t i = ancestors.size(); i; --i) { 989 for (size_t i = ancestors.size(); i; --i) {
986 EventTarget* ancestor = ancestors[i - 1]; 990 EventTarget* ancestor = ancestors[i - 1];
987 Vector<AtomicString> eventTypes = ancestor->eventTypes(); 991 Vector<AtomicString> eventTypes = ancestor->eventTypes();
988 for (size_t j = 0; j < eventTypes.size(); ++j) { 992 for (size_t j = 0; j < eventTypes.size(); ++j) {
989 AtomicString& type = eventTypes[j]; 993 AtomicString& type = eventTypes[j];
990 const EventListenerVector& listeners = ancestor->getEventListeners(t ype); 994 const EventListenerVector& listeners = ancestor->getEventListeners(t ype);
991 EventListenerVector filteredListeners; 995 EventListenerVector filteredListeners;
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 depth--; 1753 depth--;
1750 m_childrenRequested.add(bind(container, nodesMap)); 1754 m_childrenRequested.add(bind(container, nodesMap));
1751 1755
1752 while (child) { 1756 while (child) {
1753 children->addItem(buildObjectForNode(child, depth, nodesMap)); 1757 children->addItem(buildObjectForNode(child, depth, nodesMap));
1754 child = innerNextSibling(child); 1758 child = innerNextSibling(child);
1755 } 1759 }
1756 return children.release(); 1760 return children.release();
1757 } 1761 }
1758 1762
1759 PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEve ntListener(const RegisteredEventListener& registeredEventListener, const AtomicS tring& eventType, Node* node, const String* objectGroupId) 1763 PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEve ntListener(const RegisteredEventListener& registeredEventListener, const AtomicS tring& eventType, EventTarget* target, const String* objectGroupId)
1760 { 1764 {
1761 RefPtr<EventListener> eventListener = registeredEventListener.listener; 1765 RefPtr<EventListener> eventListener = registeredEventListener.listener;
1762 String scriptId; 1766 String scriptId;
1763 int lineNumber; 1767 int lineNumber;
1764 int columnNumber; 1768 int columnNumber;
1765 if (!eventListenerHandlerLocation(&node->document(), eventListener.get(), sc riptId, lineNumber, columnNumber)) 1769 Document* document = nullptr;
1770 if (Node* node = target->toNode())
1771 document = &node->document();
1772 else if (DOMWindow* window = target->toDOMWindow())
1773 document = window->document();
1774
1775 if (!document)
1776 return nullptr;
1777 if (!eventListenerHandlerLocation(document, eventListener.get(), scriptId, l ineNumber, columnNumber))
1766 return nullptr; 1778 return nullptr;
1767 1779
1768 Document& document = node->document();
1769 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Lo cation::create() 1780 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Lo cation::create()
1770 .setScriptId(scriptId) 1781 .setScriptId(scriptId)
1771 .setLineNumber(lineNumber); 1782 .setLineNumber(lineNumber);
1772 location->setColumnNumber(columnNumber); 1783 location->setColumnNumber(columnNumber);
1773 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe ner::create() 1784 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe ner::create()
1774 .setType(eventType) 1785 .setType(eventType)
1775 .setUseCapture(registeredEventListener.useCapture) 1786 .setUseCapture(registeredEventListener.useCapture)
1776 .setIsAttribute(eventListener->isAttribute()) 1787 .setIsAttribute(eventListener->isAttribute())
1777 .setNodeId(pushNodePathToFrontend(node))
1778 .setLocation(location); 1788 .setLocation(location);
1789
1790 if (Node* node = target->toNode())
1791 value->setNodeId(pushNodePathToFrontend(node));
1792
1779 if (objectGroupId) { 1793 if (objectGroupId) {
1780 ScriptValue functionValue = eventListenerHandler(&document, eventListene r.get()); 1794 ScriptValue functionValue = eventListenerHandler(document, eventListener .get());
1781 if (!functionValue.isEmpty()) { 1795 if (!functionValue.isEmpty()) {
1782 LocalFrame* frame = document.frame(); 1796 LocalFrame* frame = document->frame();
1783 if (frame) { 1797 if (frame) {
1784 ScriptState* scriptState = eventListenerHandlerScriptState(frame , eventListener.get()); 1798 ScriptState* scriptState = eventListenerHandlerScriptState(frame , eventListener.get());
1785 if (scriptState) { 1799 if (scriptState) {
1786 InjectedScript injectedScript = m_injectedScriptManager->inj ectedScriptFor(scriptState); 1800 InjectedScript injectedScript = m_injectedScriptManager->inj ectedScriptFor(scriptState);
1787 if (!injectedScript.isEmpty()) { 1801 if (!injectedScript.isEmpty()) {
1788 RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = i njectedScript.wrapObject(functionValue, *objectGroupId); 1802 RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = i njectedScript.wrapObject(functionValue, *objectGroupId);
1789 value->setHandler(valueJson); 1803 value->setHandler(valueJson);
1790 } 1804 }
1791 } 1805 }
1792 } 1806 }
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 visitor->trace(m_searchResults); 2313 visitor->trace(m_searchResults);
2300 #endif 2314 #endif
2301 visitor->trace(m_hoveredNodeForInspectMode); 2315 visitor->trace(m_hoveredNodeForInspectMode);
2302 visitor->trace(m_history); 2316 visitor->trace(m_history);
2303 visitor->trace(m_domEditor); 2317 visitor->trace(m_domEditor);
2304 visitor->trace(m_listener); 2318 visitor->trace(m_listener);
2305 InspectorBaseAgent::trace(visitor); 2319 InspectorBaseAgent::trace(visitor);
2306 } 2320 }
2307 2321
2308 } // namespace blink 2322 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698