15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2001 Dirk Mueller (mueller@kde.org) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormControlElementWithState.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameHost.h" 29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 3106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/FormController.h" 3210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/loader/FrameLoaderClient.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Chrome.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/ChromeClient.h" 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 388abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)HTMLFormControlElementWithState::HTMLFormControlElementWithState(const QualifiedName& tagName, Document& doc, HTMLFormElement* f) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : HTMLFormControlElement(tagName, doc, f) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLFormControlElementWithState::~HTMLFormControlElementWithState() 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)Node::InsertionNotificationRequest HTMLFormControlElementWithState::insertedInto(ContainerNode* insertionPoint) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (insertionPoint->inDocument() && !containingShadowRoot()) 50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) document().formController().registerStatefulFormControl(*this); 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLFormControlElement::insertedInto(insertionPoint); 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)void HTMLFormControlElementWithState::removedFrom(ContainerNode* insertionPoint) 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (insertionPoint->inDocument() && !containingShadowRoot() && !insertionPoint->containingShadowRoot()) 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) document().formController().unregisterStatefulFormControl(*this); 5893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLFormControlElement::removedFrom(insertionPoint); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLFormControlElementWithState::shouldAutocomplete() const 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!form()) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return form()->shouldAutocomplete(); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLFormControlElementWithState::notifyFormStateChanged() 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // This can be called during fragment parsing as a result of option 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // selection before the document is active (or even in a frame). 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch document().frame()->loader().client()->didUpdateCurrentHistoryItem(); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState() const 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We don't save/restore control state in a form with autocomplete=off. 8010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return inDocument() && shouldAutocomplete(); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FormControlState HTMLFormControlElementWithState::saveFormControlState() const 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FormControlState(); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLFormControlElementWithState::finishParsingChildren() 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLFormControlElement::finishParsingChildren(); 91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) document().formController().restoreControlStateFor(*this); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLFormControlElementWithState::isFormControlElementWithState() const 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 100