v8::Handle<v8::Value> V8InjectedScriptHost::getEventListenersMethodCustom(const v8::Arguments& args) { if (args.Length() < 1) return v8::Undefined(); v8::Local<v8::Value> value = args[0]; if (!V8Node::HasInstance(value, args.GetIsolate(), worldType(args.GetIsolate()))) return v8::Undefined(); Node* node = V8Node::toNative(value->ToObject()); if (!node) return v8::Undefined(); // This can only happen for orphan DocumentType nodes. Document* document = node->document(); if (!node->document()) return v8::Undefined(); InjectedScriptHost* host = V8InjectedScriptHost::toNative(args.Holder()); Vector<EventListenerInfo> listenersArray; host->getEventListenersImpl(node, listenersArray); v8::Local<v8::Object> result = v8::Object::New(); for (size_t i = 0; i < listenersArray.size(); ++i) { v8::Handle<v8::Array> listeners = getJSListenerFunctions(document, listenersArray[i]); if (!listeners->Length()) continue; AtomicString eventType = listenersArray[i].eventType; result->Set(v8String(eventType, args.GetIsolate()), listeners); } return result; }
void V8InjectedScriptHost::getEventListenersMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { if (info.Length() < 1) return; v8::Local<v8::Value> value = info[0]; if (!V8Node::HasInstance(value, info.GetIsolate(), worldType(info.GetIsolate()))) return; Node* node = V8Node::toNative(value->ToObject()); if (!node) return; InjectedScriptHost* host = V8InjectedScriptHost::toNative(info.Holder()); Vector<EventListenerInfo> listenersArray; host->getEventListenersImpl(node, listenersArray); v8::Local<v8::Object> result = v8::Object::New(); for (size_t i = 0; i < listenersArray.size(); ++i) { v8::Handle<v8::Array> listeners = getJSListenerFunctions(&node->document(), listenersArray[i]); if (!listeners->Length()) continue; AtomicString eventType = listenersArray[i].eventType; result->Set(v8String(eventType, info.GetIsolate()), listeners); } v8SetReturnValue(info, result); }