| 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 reserv
ed. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 #include "core/html/HTMLFormElement.h" | 25 #include "core/html/HTMLFormElement.h" |
| 26 | 26 |
| 27 #include "bindings/core/v8/ScriptController.h" | 27 #include "bindings/core/v8/ScriptController.h" |
| 28 #include "bindings/core/v8/ScriptEventListener.h" | 28 #include "bindings/core/v8/ScriptEventListener.h" |
| 29 #include "bindings/core/v8/UnionTypesCore.h" | 29 #include "bindings/core/v8/UnionTypesCore.h" |
| 30 #include "core/HTMLNames.h" | 30 #include "core/HTMLNames.h" |
| 31 #include "core/dom/Attribute.h" | 31 #include "core/dom/Attribute.h" |
| 32 #include "core/dom/Document.h" | 32 #include "core/dom/Document.h" |
| 33 #include "core/dom/ElementTraversal.h" | 33 #include "core/dom/ElementTraversal.h" |
| 34 #include "core/dom/IdTargetObserverRegistry.h" | |
| 35 #include "core/dom/NodeListsNodeData.h" | 34 #include "core/dom/NodeListsNodeData.h" |
| 36 #include "core/events/AutocompleteErrorEvent.h" | 35 #include "core/events/AutocompleteErrorEvent.h" |
| 37 #include "core/events/Event.h" | 36 #include "core/events/Event.h" |
| 38 #include "core/events/GenericEventQueue.h" | 37 #include "core/events/GenericEventQueue.h" |
| 39 #include "core/events/ScopedEventQueue.h" | 38 #include "core/events/ScopedEventQueue.h" |
| 40 #include "core/frame/LocalDOMWindow.h" | 39 #include "core/frame/LocalDOMWindow.h" |
| 41 #include "core/frame/LocalFrame.h" | 40 #include "core/frame/LocalFrame.h" |
| 42 #include "core/frame/UseCounter.h" | 41 #include "core/frame/UseCounter.h" |
| 43 #include "core/frame/csp/ContentSecurityPolicy.h" | 42 #include "core/frame/csp/ContentSecurityPolicy.h" |
| 44 #include "core/html/HTMLCollection.h" | 43 #include "core/html/HTMLCollection.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 64 using namespace HTMLNames; | 63 using namespace HTMLNames; |
| 65 | 64 |
| 66 HTMLFormElement::HTMLFormElement(Document& document) | 65 HTMLFormElement::HTMLFormElement(Document& document) |
| 67 : HTMLElement(formTag, document) | 66 : HTMLElement(formTag, document) |
| 68 #if !ENABLE(OILPAN) | 67 #if !ENABLE(OILPAN) |
| 69 , m_weakPtrFactory(this) | 68 , m_weakPtrFactory(this) |
| 70 #endif | 69 #endif |
| 71 , m_associatedElementsAreDirty(false) | 70 , m_associatedElementsAreDirty(false) |
| 72 , m_imageElementsAreDirty(false) | 71 , m_imageElementsAreDirty(false) |
| 73 , m_hasElementsAssociatedByParser(false) | 72 , m_hasElementsAssociatedByParser(false) |
| 73 , m_hasElementsAssociatedByFormAttribute(false) |
| 74 , m_didFinishParsingChildren(false) | 74 , m_didFinishParsingChildren(false) |
| 75 , m_wasUserSubmitted(false) | 75 , m_wasUserSubmitted(false) |
| 76 , m_isSubmittingOrInUserJSSubmitEvent(false) | 76 , m_isSubmittingOrInUserJSSubmitEvent(false) |
| 77 , m_shouldSubmit(false) | 77 , m_shouldSubmit(false) |
| 78 , m_isInResetFunction(false) | 78 , m_isInResetFunction(false) |
| 79 , m_wasDemoted(false) | 79 , m_wasDemoted(false) |
| 80 , m_pendingAutocompleteEventsQueue(GenericEventQueue::create(this)) | 80 , m_pendingAutocompleteEventsQueue(GenericEventQueue::create(this)) |
| 81 { | 81 { |
| 82 } | 82 } |
| 83 | 83 |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 setAttributeEventListener(EventTypeNames::autocompleteerror, createAttri
buteEventListener(this, name, value, eventParameterName())); | 522 setAttributeEventListener(EventTypeNames::autocompleteerror, createAttri
buteEventListener(this, name, value, eventParameterName())); |
| 523 } else { | 523 } else { |
| 524 HTMLElement::parseAttribute(name, oldValue, value); | 524 HTMLElement::parseAttribute(name, oldValue, value); |
| 525 } | 525 } |
| 526 } | 526 } |
| 527 | 527 |
| 528 void HTMLFormElement::associate(FormAssociatedElement& e) | 528 void HTMLFormElement::associate(FormAssociatedElement& e) |
| 529 { | 529 { |
| 530 m_associatedElementsAreDirty = true; | 530 m_associatedElementsAreDirty = true; |
| 531 m_associatedElements.clear(); | 531 m_associatedElements.clear(); |
| 532 if (toHTMLElement(e).fastHasAttribute(formAttr)) |
| 533 m_hasElementsAssociatedByFormAttribute = true; |
| 532 } | 534 } |
| 533 | 535 |
| 534 void HTMLFormElement::disassociate(FormAssociatedElement& e) | 536 void HTMLFormElement::disassociate(FormAssociatedElement& e) |
| 535 { | 537 { |
| 536 m_associatedElementsAreDirty = true; | 538 m_associatedElementsAreDirty = true; |
| 537 m_associatedElements.clear(); | 539 m_associatedElements.clear(); |
| 538 removeFromPastNamesMap(toHTMLElement(e)); | 540 removeFromPastNamesMap(toHTMLElement(e)); |
| 539 } | 541 } |
| 540 | 542 |
| 541 bool HTMLFormElement::isURLAttribute(const Attribute& attribute) const | 543 bool HTMLFormElement::isURLAttribute(const Attribute& attribute) const |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 // This function should be const conceptually. However we update some fields | 602 // This function should be const conceptually. However we update some fields |
| 601 // because of lazy evaluation. | 603 // because of lazy evaluation. |
| 602 const FormAssociatedElement::List& HTMLFormElement::associatedElements() const | 604 const FormAssociatedElement::List& HTMLFormElement::associatedElements() const |
| 603 { | 605 { |
| 604 if (!m_associatedElementsAreDirty) | 606 if (!m_associatedElementsAreDirty) |
| 605 return m_associatedElements; | 607 return m_associatedElements; |
| 606 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this); | 608 HTMLFormElement* mutableThis = const_cast<HTMLFormElement*>(this); |
| 607 Node* scope = mutableThis; | 609 Node* scope = mutableThis; |
| 608 if (m_hasElementsAssociatedByParser) | 610 if (m_hasElementsAssociatedByParser) |
| 609 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis); | 611 scope = &NodeTraversal::highestAncestorOrSelf(*mutableThis); |
| 610 if (inDocument() && treeScope().idTargetObserverRegistry().hasObservers(fast
GetAttribute(idAttr))) | 612 if (inDocument() && m_hasElementsAssociatedByFormAttribute) |
| 611 scope = &treeScope().rootNode(); | 613 scope = &treeScope().rootNode(); |
| 612 ASSERT(scope); | 614 ASSERT(scope); |
| 613 collectAssociatedElements(*scope, mutableThis->m_associatedElements); | 615 collectAssociatedElements(*scope, mutableThis->m_associatedElements); |
| 614 mutableThis->m_associatedElementsAreDirty = false; | 616 mutableThis->m_associatedElementsAreDirty = false; |
| 615 return m_associatedElements; | 617 return m_associatedElements; |
| 616 } | 618 } |
| 617 | 619 |
| 618 void HTMLFormElement::collectImageElements(Node& root, WillBeHeapVector<RawPtrWi
llBeMember<HTMLImageElement>>& elements) | 620 void HTMLFormElement::collectImageElements(Node& root, WillBeHeapVector<RawPtrWi
llBeMember<HTMLImageElement>>& elements) |
| 619 { | 621 { |
| 620 elements.clear(); | 622 elements.clear(); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 returnValue.setRadioNodeList(radioNodeList(name, onlyMatchImg)); | 832 returnValue.setRadioNodeList(radioNodeList(name, onlyMatchImg)); |
| 831 } | 833 } |
| 832 | 834 |
| 833 void HTMLFormElement::setDemoted(bool demoted) | 835 void HTMLFormElement::setDemoted(bool demoted) |
| 834 { | 836 { |
| 835 if (demoted) | 837 if (demoted) |
| 836 UseCounter::count(document(), UseCounter::DemotedFormElement); | 838 UseCounter::count(document(), UseCounter::DemotedFormElement); |
| 837 m_wasDemoted = demoted; | 839 m_wasDemoted = demoted; |
| 838 } | 840 } |
| 839 | 841 |
| 842 void HTMLFormElement::invalidateDefaultButtonStyle() const |
| 843 { |
| 844 for (const auto& control : associatedElements()) { |
| 845 if (!control->isFormControlElement()) |
| 846 continue; |
| 847 if (toHTMLFormControlElement(control)->canBeSuccessfulSubmitButton()) |
| 848 toHTMLFormControlElement(control)->pseudoStateChanged(CSSSelector::P
seudoDefault); |
| 849 } |
| 850 } |
| 851 |
| 840 } // namespace blink | 852 } // namespace blink |
| OLD | NEW |