v8::Handle<v8::Value> V8DOMWindow::addEventListenerCallback(const v8::Arguments& args) { INC_STATS("DOM.DOMWindow.addEventListener()"); String eventType = toWebCoreString(args[0]); bool useCapture = args[2]->BooleanValue(); DOMWindow* imp = V8DOMWindow::toNative(args.Holder()); if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true)) return v8::Undefined(); Document* doc = imp->document(); if (!doc) return v8::Undefined(); // FIXME: Check if there is not enough arguments V8Proxy* proxy = V8Proxy::retrieve(imp->frame()); if (!proxy) return v8::Undefined(); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate); if (listener) { imp->addEventListener(eventType, listener, useCapture); createHiddenDependency(args.Holder(), args[1], eventListenerCacheIndex); } return v8::Undefined(); }
static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args) { RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate); if (listener) { V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]); V8MediaSource::toNative(args.Holder())->addEventListener(stringResource, listener, args[2]->BooleanValue()); createHiddenDependency(args.Holder(), args[1], V8MediaSource::eventListenerCacheIndex); } return v8Undefined(); }
static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args) { INC_STATS("DOM.TestEventTarget.addEventListener()"); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate); if (listener) { V8TestEventTarget::toNative(args.Holder())->addEventListener(v8ValueToAtomicWebCoreString(args[0]), listener, args[2]->BooleanValue()); createHiddenDependency(args.Holder(), args[1], V8TestEventTarget::eventListenerCacheIndex); } return v8::Undefined(); }
v8::Handle<v8::Value> V8MessagePort::addEventListenerCallback(const v8::Arguments& args) { INC_STATS("DOM.MessagePort.addEventListener()"); MessagePort* messagePort = V8DOMWrapper::convertToNativeObject<MessagePort>(V8ClassIndex::MESSAGEPORT, args.Holder()); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(messagePort, args[1], false, ListenerFindOrCreate); if (listener) { String type = toWebCoreString(args[0]); bool useCapture = args[2]->BooleanValue(); messagePort->addEventListener(type, listener, useCapture); createHiddenDependency(args.Holder(), args[1], V8Custom::kMessagePortRequestCacheIndex); } return v8::Undefined(); }
void transferHiddenDependency(v8::Handle<v8::Object> object, EventListener* oldValue, v8::Local<v8::Value> newValue, int cacheIndex, v8::Isolate* isolate) { if (oldValue) { V8AbstractEventListener* oldListener = V8AbstractEventListener::cast(oldValue); if (oldListener) { v8::Local<v8::Object> oldListenerObject = oldListener->getExistingListenerObject(); if (!oldListenerObject.IsEmpty()) removeHiddenDependency(object, oldListenerObject, cacheIndex, isolate); } } // Non-callable input is treated as null and ignored if (newValue->IsFunction()) createHiddenDependency(object, newValue, cacheIndex, isolate); }
v8::Handle<v8::Value> V8EventSource::addEventListenerCallback(const v8::Arguments& args) { INC_STATS("DOM.EventSource.addEventListener()"); EventSource* eventSource = V8EventSource::toNative(args.Holder()); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(eventSource, args[1], false, ListenerFindOrCreate); if (listener) { String type = toWebCoreString(args[0]); bool useCapture = args[2]->BooleanValue(); eventSource->addEventListener(type, listener, useCapture); createHiddenDependency(args.Holder(), args[1], cacheIndex); } return v8::Undefined(); }
v8::Handle<v8::Value> V8WorkerContext::addEventListenerCallback(const v8::Arguments& args) { INC_STATS(L"DOM.WorkerContext.addEventListener()"); WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(args.Holder()); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(workerContext, args[1], false, ListenerFindOrCreate); if (listener) { String type = toWebCoreString(args[0]); bool useCapture = args[2]->BooleanValue(); workerContext->addEventListener(type, listener, useCapture); createHiddenDependency(args.Holder(), args[1], V8Custom::kWorkerContextRequestCacheIndex); } return v8::Undefined(); }
void transferHiddenDependency(v8::Handle<v8::Object> object, EventListener* oldValue, v8::Local<v8::Value> newValue, int cacheIndex) { if (oldValue) { V8AbstractEventListener* oldListener = V8AbstractEventListener::cast(oldValue); if (oldListener) { v8::Local<v8::Object> oldListenerObject = oldListener->getExistingListenerObject(); if (!oldListenerObject.IsEmpty()) removeHiddenDependency(object, oldListenerObject, cacheIndex); } } if (!newValue->IsNull() && !newValue->IsUndefined()) createHiddenDependency(object, newValue, cacheIndex); }