| Index: Source/core/inspector/InspectorRuntimeAgent.cpp
|
| diff --git a/Source/core/inspector/InspectorRuntimeAgent.cpp b/Source/core/inspector/InspectorRuntimeAgent.cpp
|
| index c152557bd44e3420a79782ff6130a505c085f499..74d9c7e5a536e183ac70919df0b92ed1443e83d4 100644
|
| --- a/Source/core/inspector/InspectorRuntimeAgent.cpp
|
| +++ b/Source/core/inspector/InspectorRuntimeAgent.cpp
|
| @@ -33,7 +33,14 @@
|
|
|
| #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/EventListenerInfo.h"
|
| #include "core/inspector/InjectedScript.h"
|
| #include "core/inspector/InjectedScriptManager.h"
|
| #include "core/inspector/InspectorState.h"
|
| @@ -139,6 +146,57 @@ 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) {
|
| + *errorString = "No event target with passed objectId";
|
| + 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)
|
| + .setLocation(location);
|
| + if (objectGroupId)
|
| + value->setHandler(getEventHandlerObject(context, eventListener.get(), m_injectedScriptManager, objectGroupId));
|
| + return value.release();
|
| +}
|
| +
|
| void InspectorRuntimeAgent::releaseObject(ErrorString*, const String& objectId)
|
| {
|
| InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForObjectId(objectId);
|
|
|