| Index: third_party/WebKit/Source/core/html/FormAssociatedElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/FormAssociatedElement.cpp b/third_party/WebKit/Source/core/html/FormAssociatedElement.cpp
|
| deleted file mode 100644
|
| index 124df2b96f16292ff57ea317c284eacb4644a9ed..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/html/FormAssociatedElement.cpp
|
| +++ /dev/null
|
| @@ -1,329 +0,0 @@
|
| -/*
|
| - * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
|
| - * (C) 1999 Antti Koivisto (koivisto@kde.org)
|
| - * (C) 2001 Dirk Mueller (mueller@kde.org)
|
| - * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
|
| - * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
|
| - *
|
| - * This library is free software; you can redistribute it and/or
|
| - * modify it under the terms of the GNU Library General Public
|
| - * License as published by the Free Software Foundation; either
|
| - * version 2 of the License, or (at your option) any later version.
|
| - *
|
| - * This library is distributed in the hope that it will be useful,
|
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| - * Library General Public License for more details.
|
| - *
|
| - * You should have received a copy of the GNU Library General Public License
|
| - * along with this library; see the file COPYING.LIB. If not, write to
|
| - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
| - * Boston, MA 02110-1301, USA.
|
| - *
|
| - */
|
| -
|
| -#include "core/html/FormAssociatedElement.h"
|
| -
|
| -#include "core/HTMLNames.h"
|
| -#include "core/dom/IdTargetObserver.h"
|
| -#include "core/dom/NodeTraversal.h"
|
| -#include "core/html/HTMLFormControlElement.h"
|
| -#include "core/html/HTMLFormElement.h"
|
| -#include "core/html/HTMLObjectElement.h"
|
| -#include "core/html/ValidityState.h"
|
| -
|
| -namespace blink {
|
| -
|
| -using namespace HTMLNames;
|
| -
|
| -class FormAttributeTargetObserver : public IdTargetObserver {
|
| - public:
|
| - static FormAttributeTargetObserver* create(const AtomicString& id,
|
| - FormAssociatedElement*);
|
| - DECLARE_VIRTUAL_TRACE();
|
| - void idTargetChanged() override;
|
| -
|
| - private:
|
| - FormAttributeTargetObserver(const AtomicString& id, FormAssociatedElement*);
|
| -
|
| - Member<FormAssociatedElement> m_element;
|
| -};
|
| -
|
| -FormAssociatedElement::FormAssociatedElement() : m_formWasSetByParser(false) {}
|
| -
|
| -FormAssociatedElement::~FormAssociatedElement() {
|
| - // We can't call setForm here because it contains virtual calls.
|
| -}
|
| -
|
| -DEFINE_TRACE(FormAssociatedElement) {
|
| - visitor->trace(m_formAttributeTargetObserver);
|
| - visitor->trace(m_form);
|
| - visitor->trace(m_validityState);
|
| -}
|
| -
|
| -ValidityState* FormAssociatedElement::validity() {
|
| - if (!m_validityState)
|
| - m_validityState = ValidityState::create(this);
|
| -
|
| - return m_validityState.get();
|
| -}
|
| -
|
| -void FormAssociatedElement::didMoveToNewDocument(Document& oldDocument) {
|
| - HTMLElement* element = toHTMLElement(this);
|
| - if (element->fastHasAttribute(formAttr))
|
| - setFormAttributeTargetObserver(nullptr);
|
| -}
|
| -
|
| -void FormAssociatedElement::insertedInto(ContainerNode* insertionPoint) {
|
| - if (!m_formWasSetByParser || !m_form ||
|
| - NodeTraversal::highestAncestorOrSelf(*insertionPoint) !=
|
| - NodeTraversal::highestAncestorOrSelf(*m_form.get()))
|
| - resetFormOwner();
|
| -
|
| - if (!insertionPoint->isConnected())
|
| - return;
|
| -
|
| - HTMLElement* element = toHTMLElement(this);
|
| - if (element->fastHasAttribute(formAttr))
|
| - resetFormAttributeTargetObserver();
|
| -}
|
| -
|
| -void FormAssociatedElement::removedFrom(ContainerNode* insertionPoint) {
|
| - HTMLElement* element = toHTMLElement(this);
|
| - if (insertionPoint->isConnected() && element->fastHasAttribute(formAttr)) {
|
| - setFormAttributeTargetObserver(nullptr);
|
| - resetFormOwner();
|
| - return;
|
| - }
|
| - // If the form and element are both in the same tree, preserve the connection
|
| - // to the form. Otherwise, null out our form and remove ourselves from the
|
| - // form's list of elements.
|
| - if (m_form &&
|
| - NodeTraversal::highestAncestorOrSelf(*element) !=
|
| - NodeTraversal::highestAncestorOrSelf(*m_form.get()))
|
| - resetFormOwner();
|
| -}
|
| -
|
| -HTMLFormElement* FormAssociatedElement::findAssociatedForm(
|
| - const HTMLElement* element) {
|
| - const AtomicString& formId(element->fastGetAttribute(formAttr));
|
| - // 3. If the element is reassociateable, has a form content attribute, and
|
| - // is itself in a Document, then run these substeps:
|
| - if (!formId.isNull() && element->isConnected()) {
|
| - // 3.1. If the first element in the Document to have an ID that is
|
| - // case-sensitively equal to the element's form content attribute's
|
| - // value is a form element, then associate the form-associated element
|
| - // with that form element.
|
| - // 3.2. Abort the "reset the form owner" steps.
|
| - Element* newFormCandidate = element->treeScope().getElementById(formId);
|
| - return isHTMLFormElement(newFormCandidate)
|
| - ? toHTMLFormElement(newFormCandidate)
|
| - : 0;
|
| - }
|
| - // 4. Otherwise, if the form-associated element in question has an ancestor
|
| - // form element, then associate the form-associated element with the nearest
|
| - // such ancestor form element.
|
| - return element->findFormAncestor();
|
| -}
|
| -
|
| -void FormAssociatedElement::formRemovedFromTree(const Node& formRoot) {
|
| - DCHECK(m_form);
|
| - if (NodeTraversal::highestAncestorOrSelf(toHTMLElement(*this)) == formRoot)
|
| - return;
|
| - resetFormOwner();
|
| -}
|
| -
|
| -void FormAssociatedElement::associateByParser(HTMLFormElement* form) {
|
| - if (form && form->isConnected()) {
|
| - m_formWasSetByParser = true;
|
| - setForm(form);
|
| - form->didAssociateByParser();
|
| - }
|
| -}
|
| -
|
| -void FormAssociatedElement::setForm(HTMLFormElement* newForm) {
|
| - if (m_form.get() == newForm)
|
| - return;
|
| - willChangeForm();
|
| - if (m_form)
|
| - m_form->disassociate(*this);
|
| - if (newForm) {
|
| - m_form = newForm;
|
| - m_form->associate(*this);
|
| - } else {
|
| - m_form = nullptr;
|
| - }
|
| - didChangeForm();
|
| -}
|
| -
|
| -void FormAssociatedElement::willChangeForm() {}
|
| -
|
| -void FormAssociatedElement::didChangeForm() {
|
| - if (!m_formWasSetByParser && m_form && m_form->isConnected()) {
|
| - HTMLElement* element = toHTMLElement(this);
|
| - element->document().didAssociateFormControl(element);
|
| - }
|
| -}
|
| -
|
| -void FormAssociatedElement::resetFormOwner() {
|
| - m_formWasSetByParser = false;
|
| - HTMLElement* element = toHTMLElement(this);
|
| - const AtomicString& formId(element->fastGetAttribute(formAttr));
|
| - HTMLFormElement* nearestForm = element->findFormAncestor();
|
| - // 1. If the element's form owner is not null, and either the element is not
|
| - // reassociateable or its form content attribute is not present, and the
|
| - // element's form owner is its nearest form element ancestor after the
|
| - // change to the ancestor chain, then do nothing, and abort these steps.
|
| - if (m_form && formId.isNull() && m_form.get() == nearestForm)
|
| - return;
|
| -
|
| - setForm(findAssociatedForm(element));
|
| -}
|
| -
|
| -void FormAssociatedElement::formAttributeChanged() {
|
| - resetFormOwner();
|
| - resetFormAttributeTargetObserver();
|
| -}
|
| -
|
| -bool FormAssociatedElement::customError() const {
|
| - const HTMLElement* element = toHTMLElement(this);
|
| - return element->willValidate() && !m_customValidationMessage.isEmpty();
|
| -}
|
| -
|
| -bool FormAssociatedElement::hasBadInput() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::patternMismatch() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::rangeOverflow() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::rangeUnderflow() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::stepMismatch() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::tooLong() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::tooShort() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::typeMismatch() const {
|
| - return false;
|
| -}
|
| -
|
| -bool FormAssociatedElement::valid() const {
|
| - bool someError = typeMismatch() || stepMismatch() || rangeUnderflow() ||
|
| - rangeOverflow() || tooLong() || tooShort() ||
|
| - patternMismatch() || valueMissing() || hasBadInput() ||
|
| - customError();
|
| - return !someError;
|
| -}
|
| -
|
| -bool FormAssociatedElement::valueMissing() const {
|
| - return false;
|
| -}
|
| -
|
| -String FormAssociatedElement::customValidationMessage() const {
|
| - return m_customValidationMessage;
|
| -}
|
| -
|
| -String FormAssociatedElement::validationMessage() const {
|
| - return customError() ? m_customValidationMessage : String();
|
| -}
|
| -
|
| -String FormAssociatedElement::validationSubMessage() const {
|
| - return String();
|
| -}
|
| -
|
| -void FormAssociatedElement::setCustomValidity(const String& error) {
|
| - m_customValidationMessage = error;
|
| -}
|
| -
|
| -void FormAssociatedElement::setFormAttributeTargetObserver(
|
| - FormAttributeTargetObserver* newObserver) {
|
| - if (m_formAttributeTargetObserver)
|
| - m_formAttributeTargetObserver->unregister();
|
| - m_formAttributeTargetObserver = newObserver;
|
| -}
|
| -
|
| -void FormAssociatedElement::resetFormAttributeTargetObserver() {
|
| - HTMLElement* element = toHTMLElement(this);
|
| - const AtomicString& formId(element->fastGetAttribute(formAttr));
|
| - if (!formId.isNull() && element->isConnected())
|
| - setFormAttributeTargetObserver(
|
| - FormAttributeTargetObserver::create(formId, this));
|
| - else
|
| - setFormAttributeTargetObserver(nullptr);
|
| -}
|
| -
|
| -void FormAssociatedElement::formAttributeTargetChanged() {
|
| - resetFormOwner();
|
| -}
|
| -
|
| -const AtomicString& FormAssociatedElement::name() const {
|
| - const AtomicString& name = toHTMLElement(this)->getNameAttribute();
|
| - return name.isNull() ? emptyAtom : name;
|
| -}
|
| -
|
| -bool FormAssociatedElement::isFormControlElementWithState() const {
|
| - return false;
|
| -}
|
| -
|
| -const HTMLElement& toHTMLElement(
|
| - const FormAssociatedElement& associatedElement) {
|
| - if (associatedElement.isFormControlElement())
|
| - return toHTMLFormControlElement(associatedElement);
|
| - return toHTMLObjectElement(associatedElement);
|
| -}
|
| -
|
| -const HTMLElement* toHTMLElement(
|
| - const FormAssociatedElement* associatedElement) {
|
| - DCHECK(associatedElement);
|
| - return &toHTMLElement(*associatedElement);
|
| -}
|
| -
|
| -HTMLElement* toHTMLElement(FormAssociatedElement* associatedElement) {
|
| - return const_cast<HTMLElement*>(toHTMLElement(
|
| - static_cast<const FormAssociatedElement*>(associatedElement)));
|
| -}
|
| -
|
| -HTMLElement& toHTMLElement(FormAssociatedElement& associatedElement) {
|
| - return const_cast<HTMLElement&>(toHTMLElement(
|
| - static_cast<const FormAssociatedElement&>(associatedElement)));
|
| -}
|
| -
|
| -FormAttributeTargetObserver* FormAttributeTargetObserver::create(
|
| - const AtomicString& id,
|
| - FormAssociatedElement* element) {
|
| - return new FormAttributeTargetObserver(id, element);
|
| -}
|
| -
|
| -FormAttributeTargetObserver::FormAttributeTargetObserver(
|
| - const AtomicString& id,
|
| - FormAssociatedElement* element)
|
| - : IdTargetObserver(
|
| - toHTMLElement(element)->treeScope().idTargetObserverRegistry(),
|
| - id),
|
| - m_element(element) {}
|
| -
|
| -DEFINE_TRACE(FormAttributeTargetObserver) {
|
| - visitor->trace(m_element);
|
| - IdTargetObserver::trace(visitor);
|
| -}
|
| -
|
| -void FormAttributeTargetObserver::idTargetChanged() {
|
| - m_element->formAttributeTargetChanged();
|
| -}
|
| -
|
| -} // namespace blink
|
|
|