| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights |
| 6 * reserved. | 6 * reserved. |
| 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 elements.clear(); | 555 elements.clear(); |
| 556 for (HTMLElement& element : Traversal<HTMLElement>::startsAfter(root)) { | 556 for (HTMLElement& element : Traversal<HTMLElement>::startsAfter(root)) { |
| 557 ListedElement* listedElement = 0; | 557 ListedElement* listedElement = 0; |
| 558 if (element.isFormControlElement()) | 558 if (element.isFormControlElement()) |
| 559 listedElement = toHTMLFormControlElement(&element); | 559 listedElement = toHTMLFormControlElement(&element); |
| 560 else if (isHTMLObjectElement(element)) | 560 else if (isHTMLObjectElement(element)) |
| 561 listedElement = toHTMLObjectElement(&element); | 561 listedElement = toHTMLObjectElement(&element); |
| 562 else | 562 else |
| 563 continue; | 563 continue; |
| 564 if (listedElement->form() == this) | 564 if (listedElement->form() == this) |
| 565 elements.append(listedElement); | 565 elements.push_back(listedElement); |
| 566 } | 566 } |
| 567 } | 567 } |
| 568 | 568 |
| 569 // This function should be const conceptually. However we update some fields | 569 // This function should be const conceptually. However we update some fields |
| 570 // because of lazy evaluation. | 570 // because of lazy evaluation. |
| 571 const ListedElement::List& HTMLFormElement::listedElements() const { | 571 const ListedElement::List& HTMLFormElement::listedElements() const { |
| 572 if (!m_listedElementsAreDirty) | 572 if (!m_listedElementsAreDirty) |
| 573 return m_listedElements; | 573 return m_listedElements; |
| 574 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this); | 574 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this); |
| 575 Node* scope = mutableThis; | 575 Node* scope = mutableThis; |
| 576 if (m_hasElementsAssociatedByParser) | 576 if (m_hasElementsAssociatedByParser) |
| 577 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis); | 577 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis); |
| 578 if (isConnected() && m_hasElementsAssociatedByFormAttribute) | 578 if (isConnected() && m_hasElementsAssociatedByFormAttribute) |
| 579 scope = &treeScope().rootNode(); | 579 scope = &treeScope().rootNode(); |
| 580 DCHECK(scope); | 580 DCHECK(scope); |
| 581 collectListedElements(*scope, mutableThis->m_listedElements); | 581 collectListedElements(*scope, mutableThis->m_listedElements); |
| 582 mutableThis->m_listedElementsAreDirty = false; | 582 mutableThis->m_listedElementsAreDirty = false; |
| 583 return m_listedElements; | 583 return m_listedElements; |
| 584 } | 584 } |
| 585 | 585 |
| 586 void HTMLFormElement::collectImageElements( | 586 void HTMLFormElement::collectImageElements( |
| 587 Node& root, | 587 Node& root, |
| 588 HeapVector<Member<HTMLImageElement>>& elements) { | 588 HeapVector<Member<HTMLImageElement>>& elements) { |
| 589 elements.clear(); | 589 elements.clear(); |
| 590 for (HTMLImageElement& image : | 590 for (HTMLImageElement& image : |
| 591 Traversal<HTMLImageElement>::startsAfter(root)) { | 591 Traversal<HTMLImageElement>::startsAfter(root)) { |
| 592 if (image.formOwner() == this) | 592 if (image.formOwner() == this) |
| 593 elements.append(&image); | 593 elements.push_back(&image); |
| 594 } | 594 } |
| 595 } | 595 } |
| 596 | 596 |
| 597 const HeapVector<Member<HTMLImageElement>>& HTMLFormElement::imageElements() { | 597 const HeapVector<Member<HTMLImageElement>>& HTMLFormElement::imageElements() { |
| 598 if (!m_imageElementsAreDirty) | 598 if (!m_imageElementsAreDirty) |
| 599 return m_imageElements; | 599 return m_imageElements; |
| 600 collectImageElements(m_hasElementsAssociatedByParser | 600 collectImageElements(m_hasElementsAssociatedByParser |
| 601 ? NodeTraversal::highestAncestorOrSelf(*this) | 601 ? NodeTraversal::highestAncestorOrSelf(*this) |
| 602 : *this, | 602 : *this, |
| 603 m_imageElements); | 603 m_imageElements); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 | 651 |
| 652 bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled( | 652 bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled( |
| 653 HeapVector<Member<HTMLFormControlElement>>* unhandledInvalidControls, | 653 HeapVector<Member<HTMLFormControlElement>>* unhandledInvalidControls, |
| 654 CheckValidityEventBehavior eventBehavior) { | 654 CheckValidityEventBehavior eventBehavior) { |
| 655 // Copy listedElements because event handlers called from | 655 // Copy listedElements because event handlers called from |
| 656 // HTMLFormControlElement::checkValidity() might change listedElements. | 656 // HTMLFormControlElement::checkValidity() might change listedElements. |
| 657 const ListedElement::List& listedElements = this->listedElements(); | 657 const ListedElement::List& listedElements = this->listedElements(); |
| 658 HeapVector<Member<ListedElement>> elements; | 658 HeapVector<Member<ListedElement>> elements; |
| 659 elements.reserveCapacity(listedElements.size()); | 659 elements.reserveCapacity(listedElements.size()); |
| 660 for (const auto& element : listedElements) | 660 for (const auto& element : listedElements) |
| 661 elements.append(element); | 661 elements.push_back(element); |
| 662 int invalidControlsCount = 0; | 662 int invalidControlsCount = 0; |
| 663 for (const auto& element : elements) { | 663 for (const auto& element : elements) { |
| 664 if (element->form() == this && element->isFormControlElement()) { | 664 if (element->form() == this && element->isFormControlElement()) { |
| 665 HTMLFormControlElement* control = toHTMLFormControlElement(element); | 665 HTMLFormControlElement* control = toHTMLFormControlElement(element); |
| 666 if (control->isSubmittableElement() && | 666 if (control->isSubmittableElement() && |
| 667 !control->checkValidity(unhandledInvalidControls, eventBehavior) && | 667 !control->checkValidity(unhandledInvalidControls, eventBehavior) && |
| 668 control->formOwner() == this) { | 668 control->formOwner() == this) { |
| 669 ++invalidControlsCount; | 669 ++invalidControlsCount; |
| 670 if (!unhandledInvalidControls && | 670 if (!unhandledInvalidControls && |
| 671 eventBehavior == CheckValidityDispatchNoEvent) | 671 eventBehavior == CheckValidityDispatchNoEvent) |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 void HTMLFormElement::getNamedElements( | 725 void HTMLFormElement::getNamedElements( |
| 726 const AtomicString& name, | 726 const AtomicString& name, |
| 727 HeapVector<Member<Element>>& namedItems) { | 727 HeapVector<Member<Element>>& namedItems) { |
| 728 // http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-
form-nameditem | 728 // http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-
form-nameditem |
| 729 elements()->namedItems(name, namedItems); | 729 elements()->namedItems(name, namedItems); |
| 730 | 730 |
| 731 Element* elementFromPast = elementFromPastNamesMap(name); | 731 Element* elementFromPast = elementFromPastNamesMap(name); |
| 732 if (namedItems.size() && namedItems.front() != elementFromPast) { | 732 if (namedItems.size() && namedItems.front() != elementFromPast) { |
| 733 addToPastNamesMap(namedItems.front().get(), name); | 733 addToPastNamesMap(namedItems.front().get(), name); |
| 734 } else if (elementFromPast && namedItems.isEmpty()) { | 734 } else if (elementFromPast && namedItems.isEmpty()) { |
| 735 namedItems.append(elementFromPast); | 735 namedItems.push_back(elementFromPast); |
| 736 UseCounter::count(document(), UseCounter::FormNameAccessForPastNamesMap); | 736 UseCounter::count(document(), UseCounter::FormNameAccessForPastNamesMap); |
| 737 } | 737 } |
| 738 } | 738 } |
| 739 | 739 |
| 740 bool HTMLFormElement::shouldAutocomplete() const { | 740 bool HTMLFormElement::shouldAutocomplete() const { |
| 741 return !equalIgnoringCase(fastGetAttribute(autocompleteAttr), "off"); | 741 return !equalIgnoringCase(fastGetAttribute(autocompleteAttr), "off"); |
| 742 } | 742 } |
| 743 | 743 |
| 744 void HTMLFormElement::finishParsingChildren() { | 744 void HTMLFormElement::finishParsingChildren() { |
| 745 HTMLElement::finishParsingChildren(); | 745 HTMLElement::finishParsingChildren(); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 for (const auto& control : listedElements()) { | 804 for (const auto& control : listedElements()) { |
| 805 if (!control->isFormControlElement()) | 805 if (!control->isFormControlElement()) |
| 806 continue; | 806 continue; |
| 807 if (toHTMLFormControlElement(control)->canBeSuccessfulSubmitButton()) | 807 if (toHTMLFormControlElement(control)->canBeSuccessfulSubmitButton()) |
| 808 toHTMLFormControlElement(control)->pseudoStateChanged( | 808 toHTMLFormControlElement(control)->pseudoStateChanged( |
| 809 CSSSelector::PseudoDefault); | 809 CSSSelector::PseudoDefault); |
| 810 } | 810 } |
| 811 } | 811 } |
| 812 | 812 |
| 813 } // namespace blink | 813 } // namespace blink |
| OLD | NEW |