v8::Handle<v8::Value> V8HTMLFormElement::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLFormElement.NamedPropertyGetter"); HTMLFormElement* imp = V8HTMLFormElement::toNative(info.Holder()); AtomicString v = toWebCoreAtomicString(name); // Call getNamedElements twice, first time check if it has a value // and let HTMLFormElement update its cache. // See issue: 867404 { Vector<RefPtr<Node> > elements; imp->getNamedElements(v, elements); if (elements.isEmpty()) return v8Undefined(); } // Second call may return different results from the first call, // but if the first the size cannot be zero. Vector<RefPtr<Node> > elements; imp->getNamedElements(v, elements); ASSERT(!elements.isEmpty()); if (elements.size() == 1) return toV8(elements.at(0).release(), info.Holder()->CreationContext(), info.GetIsolate()); return toV8(V8NamedNodesCollection::create(elements), info.Holder()->CreationContext(), info.GetIsolate()); }
static v8::Handle<v8::Value> removeEventListenerCallback(const v8::Arguments& args) { INC_STATS("DOM.TestEventTarget.removeEventListener()"); RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly); if (listener) { V8TestEventTarget::toNative(args.Holder())->removeEventListener(toWebCoreAtomicString(args[0]), listener.get(), args[2]->BooleanValue()); removeHiddenDependency(args.Holder(), args[1], V8TestEventTarget::eventListenerCacheIndex); } return v8Undefined(); }
v8::Handle<v8::Value> V8HTMLFormControlsCollection::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLCollection.NamedPropertyGetter"); if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) return v8Undefined(); if (info.Holder()->HasRealNamedCallbackProperty(name)) return v8Undefined(); HTMLFormControlsCollection* imp = V8HTMLFormControlsCollection::toNative(info.Holder()); return getNamedItems(imp, toWebCoreAtomicString(name), info.Holder(), info.GetIsolate()); }
v8::Handle<v8::Value> V8HTMLCollection::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) return v8Undefined(); if (info.Holder()->HasRealNamedCallbackProperty(name)) return v8Undefined(); HTMLCollection* imp = V8HTMLCollection::toNative(info.Holder()); #if ENABLE(MICRODATA) if (imp->type() == ItemProperties) { if (!static_cast<HTMLPropertiesCollection*>(imp)->hasNamedItem(toWebCoreAtomicString(name))) return v8Undefined(); RefPtr<PropertyNodeList> item = static_cast<HTMLPropertiesCollection*>(imp)->propertyNodeList(toWebCoreAtomicString(name)); if (!item) return v8Undefined(); return toV8(item.release(), info.Holder(), info.GetIsolate()); } #endif Node* item = imp->namedItem(toWebCoreAtomicString(name)); if (!item) return v8Undefined(); return toV8(item, info.Holder(), info.GetIsolate()); }
static v8::Handle<v8::Value> getter(v8::Local<v8::String> property, const v8::AccessorInfo& info) { // FIXME: Consider passing AtomicStringImpl directly. AtomicString name = toWebCoreAtomicString(property); HTMLDocument* htmlDocument = V8HTMLDocument::toNative(info.Holder()); ASSERT(htmlDocument); v8::Handle<v8::Value> result = V8HTMLDocument::getNamedProperty(htmlDocument, name, info.Holder(), info.GetIsolate()); if (!result.IsEmpty()) return result; v8::Handle<v8::Value> prototype = info.Holder()->GetPrototype(); if (prototype->IsObject()) return prototype.As<v8::Object>()->Get(property); return v8::Undefined(); }
static void getter(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { // FIXME: Consider passing StringImpl directly. AtomicString name = toWebCoreAtomicString(property); HTMLDocument* htmlDocument = V8HTMLDocument::toNative(info.Holder()); ASSERT(htmlDocument); v8::Handle<v8::Value> result = getNamedProperty(htmlDocument, name, info.Holder(), info.GetIsolate()); if (!result.IsEmpty()) { v8SetReturnValue(info, result); return; } v8::Handle<v8::Value> prototype = info.Holder()->GetPrototype(); if (prototype->IsObject()) { v8SetReturnValue(info, prototype.As<v8::Object>()->Get(property)); return; } }
void V8Window::namedPropertyGetterCustom(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { DOMWindow* window = V8Window::toNative(info.Holder()); if (!window) return; Frame* frame = window->frame(); // window is detached from a frame. if (!frame) return; // Search sub-frames. AtomicString propName = toWebCoreAtomicString(name); Frame* child = frame->tree()->scopedChild(propName); if (child) { v8SetReturnValue(info, toV8Fast(child->domWindow(), info, window)); return; } // Search IDL functions defined in the prototype if (!info.Holder()->GetRealNamedProperty(name).IsEmpty()) return; // Search named items in the document. Document* doc = frame->document(); if (doc && doc->isHTMLDocument()) { if (toHTMLDocument(doc)->hasNamedItem(propName.impl()) || doc->hasElementWithId(propName.impl())) { RefPtr<HTMLCollection> items = doc->windowNamedItems(propName); if (!items->isEmpty()) { if (items->hasExactlyOneItem()) { v8SetReturnValue(info, toV8Fast(items->item(0), info, window)); return; } v8SetReturnValue(info, toV8Fast(items.release(), info, window)); return; } } } }