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

Unified 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, 9 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorDOMAgent.cpp
diff --git a/Source/core/inspector/InspectorDOMAgent.cpp b/Source/core/inspector/InspectorDOMAgent.cpp
index 968bfa0cd9160df7bbdb8168495eb0073a19b52c..b63d1498ea6539b3725036a08ce5dc9c4268776b 100644
--- a/Source/core/inspector/InspectorDOMAgent.cpp
+++ b/Source/core/inspector/InspectorDOMAgent.cpp
@@ -948,7 +948,7 @@ void InspectorDOMAgent::getEventListenersForNode(ErrorString* errorString, int n
for (size_t j = 0; j < vector.size(); ++j) {
const RegisteredEventListener& listener = vector[j];
if (listener.useCapture) {
- RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildObjectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objectGroup);
+ RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildObjectForEventListener(listener, info.eventType, info.eventTarget, objectGroup);
if (listenerObject)
listenersArray->addItem(listenerObject);
}
@@ -962,7 +962,7 @@ void InspectorDOMAgent::getEventListenersForNode(ErrorString* errorString, int n
for (size_t j = 0; j < vector.size(); ++j) {
const RegisteredEventListener& listener = vector[j];
if (!listener.useCapture) {
- RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildObjectForEventListener(listener, info.eventType, info.eventTarget->toNode(), objectGroup);
+ RefPtr<TypeBuilder::DOM::EventListener> listenerObject = buildObjectForEventListener(listener, info.eventType, info.eventTarget, objectGroup);
if (listenerObject)
listenersArray->addItem(listenerObject);
}
@@ -979,6 +979,10 @@ void InspectorDOMAgent::getEventListeners(EventTarget* target, Vector<EventListe
Node* node = target->toNode();
for (ContainerNode* ancestor = node ? node->parentOrShadowHostNode() : nullptr; ancestor; ancestor = ancestor->parentOrShadowHostNode())
ancestors.append(ancestor);
+ if (ExecutionContext* context = target->executionContext()) {
+ if (LocalDOMWindow* window = context->executingWindow())
+ ancestors.append(window);
+ }
}
// Nodes and their Listeners for the concerned event types (order is top to bottom)
@@ -1756,16 +1760,23 @@ PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > InspectorDOMAgent::build
return children.release();
}
-PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node, const String* objectGroupId)
+PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, EventTarget* target, const String* objectGroupId)
{
RefPtr<EventListener> eventListener = registeredEventListener.listener;
String scriptId;
int lineNumber;
int columnNumber;
- if (!eventListenerHandlerLocation(&node->document(), eventListener.get(), scriptId, lineNumber, columnNumber))
+ Document* document = nullptr;
+ if (Node* node = target->toNode())
+ document = &node->document();
+ else if (DOMWindow* window = target->toDOMWindow())
+ document = window->document();
+
+ if (!document)
+ return nullptr;
+ if (!eventListenerHandlerLocation(document, eventListener.get(), scriptId, lineNumber, columnNumber))
return nullptr;
- Document& document = node->document();
RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Location::create()
.setScriptId(scriptId)
.setLineNumber(lineNumber);
@@ -1774,12 +1785,15 @@ PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEve
.setType(eventType)
.setUseCapture(registeredEventListener.useCapture)
.setIsAttribute(eventListener->isAttribute())
- .setNodeId(pushNodePathToFrontend(node))
.setLocation(location);
+
+ if (Node* node = target->toNode())
+ value->setNodeId(pushNodePathToFrontend(node));
+
if (objectGroupId) {
- ScriptValue functionValue = eventListenerHandler(&document, eventListener.get());
+ ScriptValue functionValue = eventListenerHandler(document, eventListener.get());
if (!functionValue.isEmpty()) {
- LocalFrame* frame = document.frame();
+ LocalFrame* frame = document->frame();
if (frame) {
ScriptState* scriptState = eventListenerHandlerScriptState(frame, eventListener.get());
if (scriptState) {

Powered by Google App Engine
This is Rietveld 408576698