void HTMLFormControlsCollection::updateIdNameCache() const { if (hasValidIdNameCache()) return; NamedItemCache* cache = NamedItemCache::create(); HashSet<StringImpl*> foundInputElements; const FormAssociatedElement::List& elementsArray = formControlElements(); for (unsigned i = 0; i < elementsArray.size(); ++i) { FormAssociatedElement* associatedElement = elementsArray[i]; if (associatedElement->isEnumeratable()) { HTMLElement* element = toHTMLElement(associatedElement); const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty()) { cache->addElementWithId(idAttrVal, element); foundInputElements.add(idAttrVal.impl()); } if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal) { cache->addElementWithName(nameAttrVal, element); foundInputElements.add(nameAttrVal.impl()); } } } if (isHTMLFormElement(ownerNode())) { // HTMLFormControlsCollection doesn't support named getter for IMG // elements. However we still need to handle IMG elements here because // HTMLFormElement named getter relies on this. const HeapVector<Member<HTMLImageElement>>& imageElementsArray = formImageElements(); for (unsigned i = 0; i < imageElementsArray.size(); ++i) { HTMLImageElement* element = imageElementsArray[i]; const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty() && !foundInputElements.contains(idAttrVal.impl())) cache->addElementWithId(idAttrVal, element); if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal && !foundInputElements.contains(nameAttrVal.impl())) cache->addElementWithName(nameAttrVal, element); } } // Set the named item cache last as traversing the tree may cause cache invalidation. setNamedItemCache(cache); }
void HTMLFormControlsCollection::updateIdNameCache() const { if (hasValidIdNameCache()) return; OwnPtr<NamedItemCache> cache = NamedItemCache::create(); HashSet<StringImpl*> foundInputElements; const FormAssociatedElement::List& elementsArray = formControlElements(); for (unsigned i = 0; i < elementsArray.size(); ++i) { FormAssociatedElement* associatedElement = elementsArray[i]; if (associatedElement->isEnumeratable()) { HTMLElement* element = toHTMLElement(associatedElement); const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty()) { cache->addElementWithId(idAttrVal, element); foundInputElements.add(idAttrVal.impl()); } if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal) { cache->addElementWithName(nameAttrVal, element); foundInputElements.add(nameAttrVal.impl()); } } } if (isHTMLFormElement(ownerNode())) { const Vector<HTMLImageElement*>& imageElementsArray = formImageElements(); for (unsigned i = 0; i < imageElementsArray.size(); ++i) { HTMLImageElement* element = imageElementsArray[i]; const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty() && !foundInputElements.contains(idAttrVal.impl())) cache->addElementWithId(idAttrVal, element); if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal && !foundInputElements.contains(nameAttrVal.impl())) cache->addElementWithName(nameAttrVal, element); } } // Set the named item cache last as traversing the tree may cause cache invalidation. setNamedItemCache(cache.release()); }
void HTMLFormControlsCollection::updateNameCache() const { if (hasNameCache()) return; HashSet<AtomicStringImpl*> foundInputElements; const Vector<FormAssociatedElement*>& elementsArray = formControlElements(); for (unsigned i = 0; i < elementsArray.size(); ++i) { FormAssociatedElement* associatedElement = elementsArray[i]; if (associatedElement->isEnumeratable()) { HTMLElement* element = toHTMLElement(associatedElement); const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty()) { appendIdCache(idAttrVal, element); foundInputElements.add(idAttrVal.impl()); } if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal) { appendNameCache(nameAttrVal, element); foundInputElements.add(nameAttrVal.impl()); } } } if (isHTMLFormElement(ownerNode())) { const Vector<HTMLImageElement*>& imageElementsArray = formImageElements(); for (unsigned i = 0; i < imageElementsArray.size(); ++i) { HTMLImageElement* element = imageElementsArray[i]; const AtomicString& idAttrVal = element->getIdAttribute(); const AtomicString& nameAttrVal = element->getNameAttribute(); if (!idAttrVal.isEmpty() && !foundInputElements.contains(idAttrVal.impl())) appendIdCache(idAttrVal, element); if (!nameAttrVal.isEmpty() && idAttrVal != nameAttrVal && !foundInputElements.contains(nameAttrVal.impl())) appendNameCache(nameAttrVal, element); } } setHasNameCache(); }