Chromium Code Reviews| Index: Source/core/inspector/InspectorRuntimeAgent.cpp |
| diff --git a/Source/core/inspector/InspectorRuntimeAgent.cpp b/Source/core/inspector/InspectorRuntimeAgent.cpp |
| index c152557bd44e3420a79782ff6130a505c085f499..0c59fd0d03a61852ce427efe0b826240b37e828f 100644 |
| --- a/Source/core/inspector/InspectorRuntimeAgent.cpp |
| +++ b/Source/core/inspector/InspectorRuntimeAgent.cpp |
| @@ -33,7 +33,13 @@ |
| #include "bindings/core/v8/DOMWrapperWorld.h" |
| #include "bindings/core/v8/ScriptDebugServer.h" |
| +#include "bindings/core/v8/ScriptEventListener.h" |
| #include "bindings/core/v8/ScriptState.h" |
| +#include "core/dom/Document.h" |
| +#include "core/dom/Node.h" |
| +#include "core/events/EventTarget.h" |
| +#include "core/frame/DOMWindow.h" |
| +#include "core/frame/LocalDOMWindow.h" |
| #include "core/inspector/InjectedScript.h" |
| #include "core/inspector/InjectedScriptManager.h" |
| #include "core/inspector/InspectorState.h" |
| @@ -139,6 +145,70 @@ void InspectorRuntimeAgent::getProperties(ErrorString* errorString, const String |
| setPauseOnExceptionsState(m_scriptDebugServer, previousPauseOnExceptionsState); |
| } |
| +void InspectorRuntimeAgent::getEventListeners(ErrorString* errorString, const String& objectId, const String* objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::EventListener>>& listenersArray) |
| +{ |
| + InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForObjectId(objectId); |
| + if (injectedScript.isEmpty()) { |
| + *errorString = "Inspected frame has gone"; |
| + return; |
| + } |
| + listenersArray = TypeBuilder::Array<TypeBuilder::Runtime::EventListener>::create(); |
| + EventTarget* target = injectedScript.eventTargetForObjectId(objectId); |
| + if (!target) |
|
pfeldman
2015/04/10 08:45:11
Lets return error here.
kozy
2015/04/13 14:26:54
Done.
|
| + return; |
| + Vector<EventListenerInfo> eventInformation; |
| + EventListenerInfo::getEventListeners(target, eventInformation, true); |
| + if (!eventInformation.size()) |
| + return; |
| + RegisteredEventListenerIterator iterator(eventInformation); |
| + while (const RegisteredEventListener* listener = iterator.nextRegisteredEventListener()) { |
| + const EventListenerInfo& info = iterator.currentEventListenerInfo(); |
| + RefPtr<TypeBuilder::Runtime::EventListener> listenerObject = buildObjectForEventListener(*listener, info.eventType, info.eventTarget, objectGroup); |
| + if (listenerObject) |
| + listenersArray->addItem(listenerObject); |
| + } |
| +} |
| + |
| +PassRefPtr<TypeBuilder::Runtime::EventListener> InspectorRuntimeAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, EventTarget* target, const String* objectGroupId) |
| +{ |
| + RefPtr<EventListener> eventListener = registeredEventListener.listener; |
| + String scriptId; |
| + int lineNumber; |
| + int columnNumber; |
| + ExecutionContext* context = target->executionContext(); |
| + if (!context) |
| + return nullptr; |
| + if (!eventListenerHandlerLocation(context, eventListener.get(), scriptId, lineNumber, columnNumber)) |
| + return nullptr; |
| + |
| + RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger::Location::create() |
| + .setScriptId(scriptId) |
| + .setLineNumber(lineNumber); |
| + location->setColumnNumber(columnNumber); |
| + RefPtr<TypeBuilder::Runtime::EventListener> value = TypeBuilder::Runtime::EventListener::create() |
| + .setType(eventType) |
| + .setUseCapture(registeredEventListener.useCapture) |
| + .setIsAttribute(eventListener->isAttribute()) |
| + .setLocation(location); |
| + if (objectGroupId) { |
|
pfeldman
2015/04/10 08:45:11
This part can be reused w/ DOM.
kozy
2015/04/13 14:26:54
Done.
|
| + ScriptValue functionValue = eventListenerHandler(context, eventListener.get()); |
| + if (!functionValue.isEmpty() && context->isDocument()) { |
| + LocalFrame* frame = toDocument(context)->frame(); |
| + if (frame) { |
| + ScriptState* scriptState = eventListenerHandlerScriptState(frame, eventListener.get()); |
| + if (scriptState) { |
| + InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(scriptState); |
| + if (!injectedScript.isEmpty()) { |
| + RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = injectedScript.wrapObject(functionValue, *objectGroupId); |
| + value->setHandler(valueJson); |
| + } |
| + } |
| + } |
| + } |
| + } |
| + return value.release(); |
| +} |
| + |
| void InspectorRuntimeAgent::releaseObject(ErrorString*, const String& objectId) |
| { |
| InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForObjectId(objectId); |