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

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: Extracted eventListenersTreeOutline.css 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 #include "core/fileapi/FileList.h" 57 #include "core/fileapi/FileList.h"
58 #include "core/frame/LocalFrame.h" 58 #include "core/frame/LocalFrame.h"
59 #include "core/html/HTMLFrameOwnerElement.h" 59 #include "core/html/HTMLFrameOwnerElement.h"
60 #include "core/html/HTMLInputElement.h" 60 #include "core/html/HTMLInputElement.h"
61 #include "core/html/HTMLLinkElement.h" 61 #include "core/html/HTMLLinkElement.h"
62 #include "core/html/HTMLTemplateElement.h" 62 #include "core/html/HTMLTemplateElement.h"
63 #include "core/html/imports/HTMLImportChild.h" 63 #include "core/html/imports/HTMLImportChild.h"
64 #include "core/html/imports/HTMLImportLoader.h" 64 #include "core/html/imports/HTMLImportLoader.h"
65 #include "core/inspector/DOMEditor.h" 65 #include "core/inspector/DOMEditor.h"
66 #include "core/inspector/DOMPatchSupport.h" 66 #include "core/inspector/DOMPatchSupport.h"
67 #include "core/inspector/EventListenerInfo.h"
67 #include "core/inspector/IdentifiersFactory.h" 68 #include "core/inspector/IdentifiersFactory.h"
68 #include "core/inspector/InjectedScriptHost.h" 69 #include "core/inspector/InjectedScriptHost.h"
69 #include "core/inspector/InjectedScriptManager.h" 70 #include "core/inspector/InjectedScriptManager.h"
70 #include "core/inspector/InspectorHighlight.h" 71 #include "core/inspector/InspectorHighlight.h"
71 #include "core/inspector/InspectorHistory.h" 72 #include "core/inspector/InspectorHistory.h"
72 #include "core/inspector/InspectorOverlay.h" 73 #include "core/inspector/InspectorOverlay.h"
73 #include "core/inspector/InspectorPageAgent.h" 74 #include "core/inspector/InspectorPageAgent.h"
74 #include "core/inspector/InspectorState.h" 75 #include "core/inspector/InspectorState.h"
75 #include "core/inspector/InstrumentingAgents.h" 76 #include "core/inspector/InstrumentingAgents.h"
76 #include "core/layout/HitTestResult.h" 77 #include "core/layout/HitTestResult.h"
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 931
931 m_domEditor->replaceWholeText(toText(node), value, errorString); 932 m_domEditor->replaceWholeText(toText(node), value, errorString);
932 } 933 }
933 934
934 void InspectorDOMAgent::getEventListenersForNode(ErrorString* errorString, int n odeId, const String* objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Ev entListener> >& listenersArray) 935 void InspectorDOMAgent::getEventListenersForNode(ErrorString* errorString, int n odeId, const String* objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Ev entListener> >& listenersArray)
935 { 936 {
936 listenersArray = TypeBuilder::Array<TypeBuilder::DOM::EventListener>::create (); 937 listenersArray = TypeBuilder::Array<TypeBuilder::DOM::EventListener>::create ();
937 Node* node = assertNode(errorString, nodeId); 938 Node* node = assertNode(errorString, nodeId);
938 if (!node) 939 if (!node)
939 return; 940 return;
941
940 Vector<EventListenerInfo> eventInformation; 942 Vector<EventListenerInfo> eventInformation;
941 getEventListeners(node, eventInformation, true); 943 EventListenerInfo::getEventListeners(node, eventInformation, true);
942 944 if (!eventInformation.size())
943 // Get Capturing Listeners (in this order) 945 return;
944 size_t eventInformationLength = eventInformation.size(); 946 RegisteredEventListenerIterator iterator(eventInformation);
945 for (size_t i = 0; i < eventInformationLength; ++i) { 947 while (const RegisteredEventListener* listener = iterator.nextRegisteredEven tListener()) {
946 const EventListenerInfo& info = eventInformation[i]; 948 const EventListenerInfo& info = iterator.currentEventListenerInfo();
947 const EventListenerVector& vector = info.eventListenerVector; 949 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildObjectForE ventListener(*listener, info.eventType, info.eventTarget->toNode(), objectGroup) ;
948 for (size_t j = 0; j < vector.size(); ++j) { 950 if (listenerObject)
949 const RegisteredEventListener& listener = vector[j]; 951 listenersArray->addItem(listenerObject);
950 if (listener.useCapture) {
951 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objec tGroup);
952 if (listenerObject)
953 listenersArray->addItem(listenerObject);
954 }
955 }
956 }
957
958 // Get Bubbling Listeners (reverse order)
959 for (size_t i = eventInformationLength; i; --i) {
960 const EventListenerInfo& info = eventInformation[i - 1];
961 const EventListenerVector& vector = info.eventListenerVector;
962 for (size_t j = 0; j < vector.size(); ++j) {
963 const RegisteredEventListener& listener = vector[j];
964 if (!listener.useCapture) {
965 RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildOb jectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objec tGroup);
966 if (listenerObject)
967 listenersArray->addItem(listenerObject);
968 }
969 }
970 } 952 }
971 } 953 }
972 954
973 void InspectorDOMAgent::getEventListeners(EventTarget* target, Vector<EventListe nerInfo>& eventInformation, bool includeAncestors)
974 {
975 // The Node's Ancestors including self.
976 Vector<EventTarget*> ancestors;
977 ancestors.append(target);
978 if (includeAncestors) {
979 Node* node = target->toNode();
980 for (ContainerNode* ancestor = node ? node->parentOrShadowHostNode() : n ullptr; ancestor; ancestor = ancestor->parentOrShadowHostNode())
981 ancestors.append(ancestor);
982 }
983
984 // Nodes and their Listeners for the concerned event types (order is top to bottom)
985 for (size_t i = ancestors.size(); i; --i) {
986 EventTarget* ancestor = ancestors[i - 1];
987 Vector<AtomicString> eventTypes = ancestor->eventTypes();
988 for (size_t j = 0; j < eventTypes.size(); ++j) {
989 AtomicString& type = eventTypes[j];
990 const EventListenerVector& listeners = ancestor->getEventListeners(t ype);
991 EventListenerVector filteredListeners;
992 filteredListeners.reserveCapacity(listeners.size());
993 for (size_t k = 0; k < listeners.size(); ++k) {
994 if (listeners[k].listener->type() == EventListener::JSEventListe nerType)
995 filteredListeners.append(listeners[k]);
996 }
997 if (!filteredListeners.isEmpty())
998 eventInformation.append(EventListenerInfo(ancestor, type, filter edListeners));
999 }
1000 }
1001 }
1002
1003 static Node* nextNodeWithShadowDOMInMind(const Node& current, const Node* stayWi thin, bool includeUserAgentShadowDOM) 955 static Node* nextNodeWithShadowDOMInMind(const Node& current, const Node* stayWi thin, bool includeUserAgentShadowDOM)
1004 { 956 {
1005 // At first traverse the subtree. 957 // At first traverse the subtree.
1006 if (current.isElementNode()) { 958 if (current.isElementNode()) {
1007 const Element& element = toElement(current); 959 const Element& element = toElement(current);
1008 ElementShadow* elementShadow = element.shadow(); 960 ElementShadow* elementShadow = element.shadow();
1009 if (elementShadow) { 961 if (elementShadow) {
1010 ShadowRoot* shadowRoot = elementShadow->youngestShadowRoot(); 962 ShadowRoot* shadowRoot = elementShadow->youngestShadowRoot();
1011 if (shadowRoot) { 963 if (shadowRoot) {
1012 if (shadowRoot->type() == ShadowRoot::OpenShadowRoot || includeU serAgentShadowDOM) 964 if (shadowRoot->type() == ShadowRoot::OpenShadowRoot || includeU serAgentShadowDOM)
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Lo cation::create() 1721 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Lo cation::create()
1770 .setScriptId(scriptId) 1722 .setScriptId(scriptId)
1771 .setLineNumber(lineNumber); 1723 .setLineNumber(lineNumber);
1772 location->setColumnNumber(columnNumber); 1724 location->setColumnNumber(columnNumber);
1773 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe ner::create() 1725 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe ner::create()
1774 .setType(eventType) 1726 .setType(eventType)
1775 .setUseCapture(registeredEventListener.useCapture) 1727 .setUseCapture(registeredEventListener.useCapture)
1776 .setIsAttribute(eventListener->isAttribute()) 1728 .setIsAttribute(eventListener->isAttribute())
1777 .setNodeId(pushNodePathToFrontend(node)) 1729 .setNodeId(pushNodePathToFrontend(node))
1778 .setLocation(location); 1730 .setLocation(location);
1779 if (objectGroupId) { 1731 if (objectGroupId)
1780 ScriptValue functionValue = eventListenerHandler(&document, eventListene r.get()); 1732 value->setHandler(getEventHandlerObject(&document, eventListener.get(), m_injectedScriptManager, objectGroupId));
1781 if (!functionValue.isEmpty()) {
1782 LocalFrame* frame = document.frame();
1783 if (frame) {
1784 ScriptState* scriptState = eventListenerHandlerScriptState(frame , eventListener.get());
1785 if (scriptState) {
1786 InjectedScript injectedScript = m_injectedScriptManager->inj ectedScriptFor(scriptState);
1787 if (!injectedScript.isEmpty()) {
1788 RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = i njectedScript.wrapObject(functionValue, *objectGroupId);
1789 value->setHandler(valueJson);
1790 }
1791 }
1792 }
1793 }
1794 }
1795 return value.release(); 1733 return value.release();
1796 } 1734 }
1797 1735
1798 PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > InspectorDOMAgent::build ArrayForPseudoElements(Element* element, NodeToIdMap* nodesMap) 1736 PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > InspectorDOMAgent::build ArrayForPseudoElements(Element* element, NodeToIdMap* nodesMap)
1799 { 1737 {
1800 if (!element->pseudoElement(BEFORE) && !element->pseudoElement(AFTER)) 1738 if (!element->pseudoElement(BEFORE) && !element->pseudoElement(AFTER))
1801 return nullptr; 1739 return nullptr;
1802 1740
1803 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > pseudoElements = TypeBui lder::Array<TypeBuilder::DOM::Node>::create(); 1741 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > pseudoElements = TypeBui lder::Array<TypeBuilder::DOM::Node>::create();
1804 if (element->pseudoElement(BEFORE)) 1742 if (element->pseudoElement(BEFORE))
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 visitor->trace(m_searchResults); 2237 visitor->trace(m_searchResults);
2300 #endif 2238 #endif
2301 visitor->trace(m_hoveredNodeForInspectMode); 2239 visitor->trace(m_hoveredNodeForInspectMode);
2302 visitor->trace(m_history); 2240 visitor->trace(m_history);
2303 visitor->trace(m_domEditor); 2241 visitor->trace(m_domEditor);
2304 visitor->trace(m_listener); 2242 visitor->trace(m_listener);
2305 InspectorBaseAgent::trace(visitor); 2243 InspectorBaseAgent::trace(visitor);
2306 } 2244 }
2307 2245
2308 } // namespace blink 2246 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorDOMAgent.h ('k') | Source/core/inspector/InspectorRuntimeAgent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698