| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |