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 |