JSValue JSCommandLineAPIHost::getEventListeners(ExecState& state) { if (state.argumentCount() < 1) return jsUndefined(); JSValue value = state.uncheckedArgument(0); if (!value.isObject() || value.isNull()) return jsUndefined(); Node* node = JSNode::toWrapped(value); if (!node) return jsUndefined(); Vector<EventListenerInfo> listenersArray; wrapped().getEventListenersImpl(node, listenersArray); JSObject* result = constructEmptyObject(&state); for (size_t i = 0; i < listenersArray.size(); ++i) { JSArray* listeners = getJSListenerFunctions(state, &node->document(), listenersArray[i]); if (!listeners->length()) continue; AtomicString eventType = listenersArray[i].eventType; result->putDirect(state.vm(), Identifier::fromString(&state, eventType.impl()), JSValue(listeners)); } return result; }
JSValue JSInjectedScriptHost::getEventListeners(ExecState* exec) { if (exec->argumentCount() < 1) return jsUndefined(); JSValue value = exec->argument(0); if (!value.isObject() || value.isNull()) return jsUndefined(); Node* node = toNode(value); if (!node) return jsUndefined(); // This can only happen for orphan DocumentType nodes. Document* document = node->document(); if (!node->document()) return jsUndefined(); Vector<EventListenerInfo> listenersArray; impl()->getEventListenersImpl(node, listenersArray); JSObject* result = constructEmptyObject(exec); for (size_t i = 0; i < listenersArray.size(); ++i) { JSArray* listeners = getJSListenerFunctions(exec, document, listenersArray[i]); if (!listeners->length()) continue; AtomicString eventType = listenersArray[i].eventType; result->putDirect(exec->globalData(), Identifier(exec, eventType.impl()), JSValue(listeners)); } return result; }
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); }