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, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Samsung Electronics. All rights reserved. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "bindings/v8/ExceptionMessages.h" 33df95704c49daea886ddad70775bda23618d6274dBen Murdoch#include "bindings/v8/ExceptionState.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptEventListener.h" 355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSPropertyNames.h" 365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/accessibility/AXObjectCache.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/IdTargetObserver.h" 41e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ElementShadow.h" 42e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/InsertionPoint.h" 43e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h" 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/editing/SpellChecker.h" 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/BeforeTextInsertedEvent.h" 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/KeyboardEvent.h" 481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/MouseEvent.h" 491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/ScopedEventQueue.h" 501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/TouchEvent.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/fileapi/FileList.h" 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameHost.h" 53f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/frame/FrameView.h" 54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/UseCounter.h" 5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLCollection.h" 5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLDataListElement.h" 5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLImageLoader.h" 6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLOptionElement.h" 6106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/ColorInputType.h" 6206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/FileInputType.h" 6306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/FormController.h" 6406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/InputType.h" 6506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/SearchInputType.h" 6653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLParserIdioms.h" 67f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/html/shadow/ShadowElementNames.h" 6851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/page/Chrome.h" 6951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/page/ChromeClient.h" 7053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTextControlSingleLine.h" 7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTheme.h" 725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/ColorChooser.h" 7319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/DateTimeChooser.h" 741e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Language.h" 751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformMouseEvent.h" 765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 771e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/PlatformLocale.h" 78591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/MathExtras.h" 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)class ListAttributeTargetObserver : public IdTargetObserver { 85f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 87f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) static PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> create(const AtomicString& id, HTMLInputElement*); 88f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void idTargetChanged() OVERRIDE; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ListAttributeTargetObserver(const AtomicString& id, HTMLInputElement*); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 94f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) RawPtrWillBeMember<HTMLInputElement> m_element; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: According to HTML4, the length attribute's value can be arbitrarily 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// large. However, due to https://bugs.webkit.org/show_bug.cgi?id=14536 things 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// get rather sluggish when a text field has a larger number of characters than 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// this, even when just clicking in the text field. 101f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)const int HTMLInputElement::maximumLength = 524288; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int defaultSize = 20; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int maxSavedResults = 256; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)HTMLInputElement::HTMLInputElement(Document& document, HTMLFormElement* form, bool createdByParser) 10651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) : HTMLTextFormControlElement(inputTag, document, form) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_size(defaultSize) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maxLength(maximumLength) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maxResults(-1) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isChecked(false) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_reflectsCheckedAttribute(true) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isIndeterminate(false) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isActivatedSubmit(false) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_autocomplete(Uninitialized) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasNonEmptyList(false) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_stateRestored(false) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_parsingInProgress(createdByParser) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_valueAttributeWasUpdatedAfterParsing(false) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_canReceiveDroppedFiles(false) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasTouchEventHandler(false) 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_shouldRevealPassword(false) 122a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch , m_needsToUpdateViewValue(true) 123bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) , m_inputType(InputType::createText(*this)) 124c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) , m_inputTypeView(m_inputType) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setHasCustomStyleCallbacks(); 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ScriptWrappable::init(this); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 132323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)PassRefPtrWillBeRawPtr<HTMLInputElement> HTMLInputElement::create(Document& document, HTMLFormElement* form, bool createdByParser) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> inputElement = adoptRefWillBeNoop(new HTMLInputElement(document, form, createdByParser)); 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) inputElement->ensureUserAgentShadowRoot(); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return inputElement.release(); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void HTMLInputElement::trace(Visitor* visitor) 140323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 141323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_inputType); 142323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_inputTypeView); 143f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) visitor->trace(m_listAttributeTargetObserver); 1445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_imageLoader); 145323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) HTMLTextFormControlElement::trace(visitor); 146323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 147323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)HTMLImageLoader* HTMLInputElement::imageLoader() 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!m_imageLoader) 1515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_imageLoader = HTMLImageLoader::create(this); 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_imageLoader.get(); 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::didAddUserAgentShadowRoot(ShadowRoot&) 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 15751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->createShadowSubtree(); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1606f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid HTMLInputElement::willAddFirstAuthorShadowRoot() 1618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 16251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->destroyShadowSubtree(); 163bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_inputTypeView = InputTypeView::create(*this); 16451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) lazyReattachIfAttached(); 1658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 1668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLInputElement::~HTMLInputElement() 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 169f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#if !ENABLE(OILPAN) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Need to remove form association while this is still an HTMLInputElement 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // so that virtual functions are called correctly. 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setForm(0); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // setForm(0) may register this to a document-level radio button group. 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We should unregister it to avoid accessing a deleted object. 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isRadioButton()) 176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) document().formController().radioButtonGroupScope().removeButton(this); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hasTouchEventHandler) 17809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) document().didRemoveTouchEventHandler(this); 179f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#endif 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& HTMLInputElement::name() const 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_name.isNull() ? emptyAtom : m_name; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<FileChooserFileInfo> HTMLInputElement::filesFromFileInputFormControlState(const FormControlState& state) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FileInputType::filesFromFormControlState(state); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldAutocomplete() const 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_autocomplete != Uninitialized) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_autocomplete == On; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::shouldAutocomplete(); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isValidValue(const String& value) const 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetStringValue()) { 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !m_inputType->typeMismatchFor(value) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->stepMismatch(value) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->rangeUnderflow(value) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->rangeOverflow(value) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !tooLong(value, IgnoreDirtyFlag) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->patternMismatch(value) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->valueMissing(value); 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::tooLong() const 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && tooLong(value(), CheckDirtyFlag); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::typeMismatch() const 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->typeMismatch(); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::valueMissing() const 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->valueMissing(value()); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::hasBadInput() const 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return willValidate() && m_inputType->hasBadInput(); 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::patternMismatch() const 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->patternMismatch(value()); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::tooLong(const String& value, NeedsToCheckDirtyFlag check) const 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We use isTextType() instead of supportsMaxLength() because of the 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 'virtual' overhead. 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isTextType()) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int max = maxLength(); 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (max < 0) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (check == CheckDirtyFlag) { 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Return false for the default value or a value set by a script even if 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it is longer than maxLength. 251a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!hasDirtyValue() || !lastChangeWasUserEdit()) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 25406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return value.length() > static_cast<unsigned>(max); 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::rangeUnderflow() const 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->rangeUnderflow(value()); 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::rangeOverflow() const 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->rangeOverflow(value()); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::validationMessage() const 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!willValidate()) 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String(); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (customError()) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return customValidationMessage(); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->validationMessage(); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::minimum() const 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->minimum(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::maximum() const 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->maximum(); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::stepMismatch() const 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->stepMismatch(value()); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::getAllowedValueStep(Decimal* step) const 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->getAllowedValueStep(step); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)StepRange HTMLInputElement::createStepRange(AnyStepHandling anyStepHandling) const 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->createStepRange(anyStepHandling); 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Decimal HTMLInputElement::findClosestTickMarkValue(const Decimal& value) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->findClosestTickMarkValue(value); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::stepUp(int n, ExceptionState& exceptionState) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 31051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->stepUp(n, exceptionState); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::stepDown(int n, ExceptionState& exceptionState) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 31551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->stepUp(-n, exceptionState); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::blur() 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 320c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->blur(); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::defaultBlur() 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::blur(); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::hasCustomFocusLogic() const 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 330c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->hasCustomFocusLogic(); 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 333f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)bool HTMLInputElement::isKeyboardFocusable() const 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 335f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return m_inputType->isKeyboardFocusable(); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 338591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool HTMLInputElement::shouldShowFocusRingOnMouseFocus() const 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 340591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return m_inputType->shouldShowFocusRingOnMouseFocus(); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateFocusAppearance(bool restorePreviousSelection) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isTextField()) { 3466f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!restorePreviousSelection) 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) select(); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) restoreCachedSelection(); 3508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (document().frame()) 3518abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) document().frame()->selection().revealSelection(); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::updateFocusAppearance(restorePreviousSelection); 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 356f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void HTMLInputElement::beginEditing() 357f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 35809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(document().isActive()); 35909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 36009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 36109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 362f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!isTextField()) 363f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 364f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 36509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) document().frame()->spellChecker().didBeginEditing(this); 366f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 367f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::endEditing() 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 37009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(document().isActive()); 37109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 37209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 37309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!isTextField()) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 377d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = document().frame(); 37809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->spellChecker().didEndEditingOnTextField(this); 37909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->host()->chrome().client().didEndEditingOnTextField(*this); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldUseInputMethod() 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->shouldUseInputMethod(); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::handleFocusEvent(Element* oldFocusedElement, FocusType type) 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 38909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_inputTypeView->handleFocusEvent(oldFocusedElement, type); 390e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->enableSecureTextInput(); 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::handleBlurEvent() 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 395e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->disableSecureTextInput(); 396c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleBlurEvent(); 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 399a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void HTMLInputElement::setType(const AtomicString& type) 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 40109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setAttribute(typeAttr, type); 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateType() 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4068abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) const AtomicString& newTypeName = InputType::normalizeTypeName(fastGetAttribute(typeAttr)); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 408a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_inputType->formControlType() == newTypeName) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 411323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<InputType> newType = InputType::create(*this, newTypeName); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool didStoreValue = m_inputType->storesValueSeparateFromAttribute(); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool didRespectHeightAndWidth = m_inputType->shouldRespectHeightAndWidthAttributes(); 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->destroyShadowSubtree(); 418f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) lazyReattachIfAttached(); 419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType = newType.release(); 4218abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (hasAuthorShadowRoot()) 422bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_inputTypeView = InputTypeView::create(*this); 4238abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) else 4248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_inputTypeView = m_inputType; 42551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->createShadowSubtree(); 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 427c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool hasTouchEventHandler = m_inputTypeView->hasTouchEventHandler(); 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasTouchEventHandler != m_hasTouchEventHandler) { 429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (hasTouchEventHandler) 4301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) document().didAddTouchEventHandler(this); 431926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 4321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) document().didRemoveTouchEventHandler(this); 433926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_hasTouchEventHandler = hasTouchEventHandler; 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsWillValidateCheck(); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool willStoreValue = m_inputType->storesValueSeparateFromAttribute(); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (didStoreValue && !willStoreValue && hasDirtyValue()) { 441a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setAttribute(valueAttr, AtomicString(m_valueIfDirty)); 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = String(); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!didStoreValue && willStoreValue) { 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString valueString = fastGetAttribute(valueAttr); 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sanitizeValue(valueString); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateValueIfNeeded(); 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 450a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 45151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->updateView(); 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (didRespectHeightAndWidth != m_inputType->shouldRespectHeightAndWidthAttributes()) { 454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(elementData()); 455f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (const Attribute* height = findAttributeByName(heightAttr)) 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(heightAttr, height->value()); 457f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (const Attribute* width = findAttributeByName(widthAttr)) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(widthAttr, width->value()); 459f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (const Attribute* align = findAttributeByName(alignAttr)) 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(alignAttr, align->value()); 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 463f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (document().focusedElement() == this) 464f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) document().updateFocusAppearanceSoon(true /* restore selection */); 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChangedSinceLastFormControlChangeEvent(false); 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::subtreeHasChanged() 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 476c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->subtreeHasChanged(); 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // When typing in an input field, childrenChanged is not called, so we need to force the directionality check. 478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) calculateAndAdjustDirectionality(); 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& HTMLInputElement::formControlType() const 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->formControlType(); 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldSaveAndRestoreFormControlState() const 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->shouldSaveAndRestoreFormControlState()) 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::shouldSaveAndRestoreFormControlState(); 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FormControlState HTMLInputElement::saveFormControlState() const 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->saveFormControlState(); 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::restoreFormControlState(const FormControlState& state) 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->restoreFormControlState(state); 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_stateRestored = true; 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::canStartSelection() const 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isTextField()) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::canStartSelection(); 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)int HTMLInputElement::selectionStartForBinding(ExceptionState& exceptionState) const 51293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 51309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 514a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 51593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return 0; 51693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 51793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionStart(); 51893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 51993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 52051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)int HTMLInputElement::selectionEndForBinding(ExceptionState& exceptionState) const 52193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 52209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 52309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 52493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return 0; 52593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 52693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionEnd(); 52793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 52893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 52951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)String HTMLInputElement::selectionDirectionForBinding(ExceptionState& exceptionState) const 53093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 53109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 532a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 53393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return String(); 53493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 53593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionDirection(); 53693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 53793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 53851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionStartForBinding(int start, ExceptionState& exceptionState) 53993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 54009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 541a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 54293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 54393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 54493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionStart(start); 54593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 54693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 54751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionEndForBinding(int end, ExceptionState& exceptionState) 54893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 54909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 550a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 55193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 55293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 55393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionEnd(end); 55493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 55593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 55651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionDirectionForBinding(const String& direction, ExceptionState& exceptionState) 55793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 55809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 559a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 56093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 56193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 56293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionDirection(direction); 56393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 56493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 56551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionRangeForBinding(int start, int end, ExceptionState& exceptionState) 56693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 56709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 568a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 56993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 57093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 57193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionRange(start, end); 57293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 57393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 57451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionRangeForBinding(int start, int end, const String& direction, ExceptionState& exceptionState) 57593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 57609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 577a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 57893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 57993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 58093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionRange(start, end, direction); 58193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 58293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::accessKeyAction(bool sendMouseEvents) 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->accessKeyAction(sendMouseEvents); 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isPresentationAttribute(const QualifiedName& name) const 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (name == vspaceAttr || name == hspaceAttr || name == alignAttr || name == widthAttr || name == heightAttr || (name == borderAttr && isImageButton())) 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::isPresentationAttribute(name); 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 597926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (name == vspaceAttr) { 598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); 599926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); 600926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == hspaceAttr) { 601926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); 602926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); 603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == alignAttr) { 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectAlignAttribute()) 605926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) applyAlignmentAttributeToStyle(value, style); 606926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == widthAttr) { 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectHeightAndWidthAttributes()) 608926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyWidth, value); 609926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == heightAttr) { 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectHeightAndWidthAttributes()) 611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyHeight, value); 612926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == borderAttr && isImageButton()) 613926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) applyBorderAttributeToStyle(value, style); 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 615926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::collectStyleForPresentationAttribute(name, value, style); 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 618926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 620926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (name == nameAttr) { 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 622926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_name = value; 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 624926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 625926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == autocompleteAttr) { 62653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (equalIgnoringCase(value, "off")) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = Off; 62853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) else { 629926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (value.isEmpty()) 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = Uninitialized; 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = On; 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 634926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == typeAttr) 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateType(); 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == valueAttr) { 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We only need to setChanged if the form is looking at the default value right now. 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!hasDirtyValue()) { 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updatePlaceholderVisibility(false); 64009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 642a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueAttributeWasUpdatedAfterParsing = !m_parsingInProgress; 645c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->valueAttributeChanged(); 646926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == checkedAttr) { 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Another radio button in the same group might be checked by state 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // restore. We shouldn't call setChecked() even if this has the checked 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // attribute. So, delay the setChecked() call until 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // finishParsingChildren() is called if parsing is in progress. 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_parsingInProgress && m_reflectsCheckedAttribute) { 652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setChecked(!value.isNull()); 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 655926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == maxlengthAttr) 656926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parseMaxLengthAttribute(value); 657926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == sizeAttr) { 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldSize = m_size; 659926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int valueAsInteger = value.toInt(); 660926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_size = valueAsInteger > 0 ? valueAsInteger : defaultSize; 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_size != oldSize && renderer()) 6625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) renderer()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); 663926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == altAttr) 664c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->altAttributeChanged(); 665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == srcAttr) 666c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->srcAttributeChanged(); 667926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == usemapAttr || name == accesskeyAttr) { 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: ignore for the moment 669926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == onsearchAttr) { 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Search field and slider attributes all just cause updateFromElement to be called through style recalcing. 6715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setAttributeEventListener(EventTypeNames::search, createAttributeEventListener(this, name, value, eventParameterName())); 672926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == resultsAttr) { 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldResults = m_maxResults; 674926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults) : -1; 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Detaching just for maxResults change is not ideal. We should figure out the right 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // time to relayout for this change. 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0)) 67893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) lazyReattachIfAttached(); 67909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 6801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::ResultsAttribute); 681926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == incrementalAttr) { 68209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 6831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::IncrementalAttribute); 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == minAttr) { 685c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->minOrMaxAttributeChanged(); 686e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); 687926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setNeedsValidityCheck(); 6881e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::MinAttribute); 689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == maxAttr) { 690c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->minOrMaxAttributeChanged(); 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 6921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::MaxAttribute); 693926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == multipleAttr) { 694c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->multipleAttributeChanged(); 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 696926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == stepAttr) { 697c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->stepAttributeChanged(); 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 6991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::StepAttribute); 700926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == patternAttr) { 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 7021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::PatternAttribute); 703926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == disabledAttr) { 704926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 705c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->disabledAttributeChanged(); 706926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == readonlyAttr) { 707926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 708c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->readonlyAttributeChanged(); 70993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } else if (name == listAttr) { 710926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_hasNonEmptyList = !value.isEmpty(); 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hasNonEmptyList) { 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) listAttributeTargetChanged(); 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7151e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::ListAttribute); 716323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } else if (name == webkitdirectoryAttr) { 717926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 7181e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::PrefixedDirectoryAttribute); 719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 721926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 722c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->attributeChanged(); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::finishParsingChildren() 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_parsingInProgress = false; 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::finishParsingChildren(); 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_stateRestored) { 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool checked = hasAttribute(checkedAttr); 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (checked) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(checked); 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool HTMLInputElement::rendererIsNeeded(const RenderStyle& style) 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return m_inputType->rendererIsNeeded() && HTMLTextFormControlElement::rendererIsNeeded(style); 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 742591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* HTMLInputElement::createRenderer(RenderStyle* style) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 744c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->createRenderer(style); 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 747521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)void HTMLInputElement::attach(const AttachContext& context) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 749521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) HTMLTextFormControlElement::attach(context); 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->startResourceLoading(); 752e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->countUsage(); 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (document().focusedElement() == this) 7558abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) document().updateFocusAppearanceSoon(true /* restore selection */); 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 758521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)void HTMLInputElement::detach(const AttachContext& context) 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 760521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) HTMLTextFormControlElement::detach(context); 761a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 76251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->closePopupView(); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::altText() const 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://www.w3.org/TR/1998/REC-html40-19980424/appendix/notes.html#altgen 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // also heavily discussed by Hixie on bugzilla 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // note this is intentionally different to HTMLImageElement::altText() 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String alt = fastGetAttribute(altAttr); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // fall back to title attribute 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isNull()) 77309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) alt = fastGetAttribute(titleAttr); 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isNull()) 77509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) alt = fastGetAttribute(valueAttr); 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isEmpty()) 77751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) alt = locale().queryString(blink::WebLocalizedString::InputElementAltText); 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return alt; 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 78151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool HTMLInputElement::canBeSuccessfulSubmitButton() const 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 78351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return m_inputType->canBeSuccessfulSubmitButton(); 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isActivatedSubmit() const 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_isActivatedSubmit; 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setActivatedSubmit(bool flag) 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isActivatedSubmit = flag; 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::appendFormData(FormDataList& encoding, bool multipart) 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isFormDataAppendable() && m_inputType->appendFormData(encoding, multipart); 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 801bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String HTMLInputElement::resultForDialogSubmit() 802bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 803bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->resultForDialogSubmit(); 804bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 805bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 8061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLInputElement::resetImpl() 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 80809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_inputType->storesValueSeparateFromAttribute()) { 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(String()); 81009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsValidityCheck(); 81109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(hasAttribute(checkedAttr)); 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTextField() const 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextField(); 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTextType() const 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextType(); 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setChecked(bool nowChecked, TextFieldEventBehavior eventBehavior) 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (checked() == nowChecked) 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 832323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> protector(this); 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = false; 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isChecked = nowChecked; 83509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 83709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 83809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->updateCheckedState(this); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer() && renderer()->style()->hasAppearance()) 840d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RenderTheme::theme().stateChanged(renderer(), CheckedControlState); 841c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Ideally we'd do this from the render tree (matching 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // RenderTextView), but it's not possible to do it at the moment 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // because of the way the code is structured. 847926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (renderer()) { 8488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (AXObjectCache* cache = renderer()->document().existingAXObjectCache()) 849926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) cache->checkedStateChanged(this); 850926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Only send a change event for items in the document (avoid firing during 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // parsing) and don't send a change event for a radio button that's getting 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unchecked to match other browsers. DOM is not a useful standard for this 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // because it says only to fire change events at "lose focus" time, which is 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // definitely wrong in practice for these types of elements. 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (eventBehavior != DispatchNoEvent && inDocument() && m_inputType->shouldSendChangeEventAfterCheckedChanged()) { 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTextAsOfLastFormControlChangeEvent(String()); 85907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (eventBehavior == DispatchInputAndChangeEvent) 86007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch dispatchFormControlInputEvent(); 8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchFormControlChangeEvent(); 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 864926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) didAffectSelector(AffectedSelectorChecked); 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setIndeterminate(bool newValue) 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (indeterminate() == newValue) 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isIndeterminate = newValue; 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 874926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) didAffectSelector(AffectedSelectorIndeterminate); 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer() && renderer()->style()->hasAppearance()) 877d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RenderTheme::theme().stateChanged(renderer(), CheckedControlState); 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLInputElement::size() const 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_size; 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::sizeShouldIncludeDecoration(int& preferredSize) const 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 887c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->sizeShouldIncludeDecoration(defaultSize, preferredSize); 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::copyNonAttributePropertiesFromElement(const Element& source) 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HTMLInputElement& sourceElement = static_cast<const HTMLInputElement&>(source); 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sourceElement.m_valueIfDirty; 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(sourceElement.m_isChecked); 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = sourceElement.m_reflectsCheckedAttribute; 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isIndeterminate = sourceElement.m_isIndeterminate; 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::copyNonAttributePropertiesFromElement(source); 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 901a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 90251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->updateView(); 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::value() const 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String value; 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->getTypeSpecificValue(value)) 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = m_valueIfDirty; 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString valueString = fastGetAttribute(valueAttr); 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = sanitizeValue(valueString); 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->fallbackValue(); 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::valueWithDefault() const 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String value = this->value(); 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->defaultValue(); 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueForUser(const String& value) 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Call setValue and make it send a change event. 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(value, DispatchChangeEvent); 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const String& HTMLInputElement::suggestedValue() const 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_suggestedValue; 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setSuggestedValue(const String& value) 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetSuggestedValue()) 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 947a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = sanitizeValue(value); 94909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 95051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->updateView(); 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setEditingValue(const String& value) 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!renderer() || !isTextField()) 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 95776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) setInnerEditorValue(value); 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) subtreeHasChanged(); 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned max = value.length(); 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (focused()) 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelectionRange(max, max); 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cacheSelectionInResponseToSetValue(max); 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchInputEvent(); 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 96976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void HTMLInputElement::setInnerEditorValue(const String& value) 970a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 97176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) HTMLTextFormControlElement::setInnerEditorValue(value); 972a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = false; 973a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 974a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 97551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValue(const String& value, ExceptionState& exceptionState, TextFieldEventBehavior eventBehavior) 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isFileUpload() && !value.isEmpty()) { 97809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "This input element accepts a filename, which may only be programmatically set to the empty string."); 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(value, eventBehavior); 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValue(const String& value, TextFieldEventBehavior eventBehavior) 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetValue(value)) 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 989323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> protector(this); 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EventQueueScope scope; 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String sanitizedValue = sanitizeValue(value); 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool valueChanged = sanitizedValue != this->value(); 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setLastChangeWasNotUserEdit(); 995a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = String(); // Prevent TextFieldInputType::setValue from using the suggested value. 9978abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->setValue(sanitizedValue, valueChanged, eventBehavior); 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (valueChanged && eventBehavior == DispatchNoEvent) 10018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) setTextAsOfLastFormControlChangeEvent(sanitizedValue); 10028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!valueChanged) 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueInternal(const String& sanitizedValue, TextFieldEventBehavior eventBehavior) 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sanitizedValue; 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 1013a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (document().focusedElement() == this) 1014a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch document().frameHost()->chrome().client().didUpdateTextOfFocusedElementByNonUserInput(); 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1017d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void HTMLInputElement::updateView() 1018d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 1019d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_inputTypeView->updateView(); 1020d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 1021d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1022a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochdouble HTMLInputElement::valueAsDate(bool& isNull) const 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1024a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch double date = m_inputType->valueAsDate(); 1025a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch isNull = !std::isfinite(date); 1026a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return date; 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 102951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValueAsDate(double value, ExceptionState& exceptionState) 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 103151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->setValueAsDate(value, exceptionState); 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::valueAsNumber() const 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->valueAsDouble(); 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 103951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValueAsNumber(double newValue, ExceptionState& exceptionState, TextFieldEventBehavior eventBehavior) 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1041323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#dom-input-valueasnumber 1042323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // On setting, if the new value is infinite, then throw a TypeError exception. 104309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (std::isinf(newValue)) { 104409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(newValue)); 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 104751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->setValueAsDouble(newValue, eventBehavior, exceptionState); 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueFromRenderer(const String& value) 10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // File upload controls will never use this. 10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!isFileUpload()); 10545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = String(); 10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Renderer and our event handler are responsible for sanitizing values. 10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(value == sanitizeValue(value) || sanitizeValue(value).isEmpty()); 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10600019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch m_valueIfDirty = value; 1061a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = false; 10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Input event is fired by the Node::defaultEventHandler for editable controls. 10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isTextField()) 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchInputEvent(); 10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Clear autofill flag (and yellow background) on user edit. 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setAutofilled(false); 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* HTMLInputElement::preDispatchEventHandler(Event* event) 10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::textInput && m_inputTypeView->shouldSubmitImplicitly(event)) { 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->stopPropagation(); 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() != EventTypeNames::click) 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1082591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!event->isMouseEvent() || toMouseEvent(event)->button() != LeftButton) 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1084f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if ENABLE(OILPAN) 1085f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return m_inputTypeView->willDispatchClick(); 1086f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#else 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Check whether there are any cases where this actually ends up leaking. 1088c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->willDispatchClick().leakPtr(); 1089f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::postDispatchEventHandler(Event* event, void* dataFromPreDispatch) 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1094f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) OwnPtrWillBeRawPtr<ClickHandlingState> state = adoptPtrWillBeNoop(static_cast<ClickHandlingState*>(dataFromPreDispatch)); 10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!state) 10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1097c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->didDispatchClick(event, *state); 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::defaultEventHandler(Event* evt) 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isMouseEvent() && evt->type() == EventTypeNames::click && toMouseEvent(evt)->button() == LeftButton) { 1103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleClickEvent(toMouseEvent(evt)); 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 110809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (evt->isTouchEvent() && m_inputTypeView->hasTouchEventHandler()) { 110906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) m_inputTypeView->handleTouchEvent(toTouchEvent(evt)); 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keydown) { 1115c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeydownEvent(toKeyboardEvent(evt)); 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Call the base event handler before any of our own event handling for almost all events in text fields. 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Makes editing keyboard handling take precedence over the keydown and keypress handling in this function. 11221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) bool callBaseClassEarly = isTextField() && (evt->type() == EventTypeNames::keydown || evt->type() == EventTypeNames::keypress); 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (callBaseClassEarly) { 11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::defaultEventHandler(evt); 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DOMActivate events cause the input to be "activated" - in the case of image and submit inputs, this means 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // actually submitting the form. For reset inputs, the form is reset. These events are sent when the user clicks 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // on the element, or presses enter while it is the active element. JavaScript code wishing to activate the element 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // must dispatch a DOMActivate event - a click event will not do the job. 11331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->type() == EventTypeNames::DOMActivate) { 11349bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_inputType->handleDOMActivateEvent(evt); 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Use key press event here since sending simulated mouse events 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // on key down blocks the proper sending of the key press event. 11411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keypress) { 1142c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeypressEvent(toKeyboardEvent(evt)); 11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keyup) { 1148c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeyupEvent(toKeyboardEvent(evt)); 11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1153c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (m_inputTypeView->shouldSubmitImplicitly(evt)) { 115481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) if (isSearchField()) 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onSearch(); 11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Form submission finishes editing, just as loss of focus does. 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If there was a change, send the event now. 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (wasChangedSinceLastFormControlChangeEvent()) 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchFormControlChangeEvent(); 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1161f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLFormElement> formForSubmission = m_inputTypeView->formForSubmission(); 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Form may never have been present, or may have been destroyed by code responding to the change event. 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (formForSubmission) 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) formForSubmission->submitImplicitly(evt, canTriggerImplicitSubmission()); 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) evt->setDefaultHandled(); 11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->isBeforeTextInsertedEvent()) 1171c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleBeforeTextInsertedEvent(static_cast<BeforeTextInsertedEvent*>(evt)); 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isMouseEvent() && evt->type() == EventTypeNames::mousedown) { 1174c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleMouseDownEvent(toMouseEvent(evt)); 11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1179c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->forwardEvent(evt); 11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!callBaseClassEarly && !evt->defaultHandled()) 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::defaultEventHandler(evt); 11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::willRespondToMouseClickEvents() 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Consider implementing willRespondToMouseClickEvents() in InputType if more accurate results are necessary. 118853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!isDisabledFormControl()) 11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::willRespondToMouseClickEvents(); 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isURLAttribute(const Attribute& attribute) const 11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return attribute.name() == srcAttr || attribute.name() == formactionAttr || HTMLTextFormControlElement::isURLAttribute(attribute); 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 119943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)bool HTMLInputElement::hasLegalLinkAttribute(const QualifiedName& name) const 120043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 120143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return m_inputType->hasLegalLinkAttribute(name) || HTMLTextFormControlElement::hasLegalLinkAttribute(name); 120243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 120343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 120443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)const QualifiedName& HTMLInputElement::subResourceAttributeName() const 120543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 120643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return m_inputType->subResourceAttributeName(); 120743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 120843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 1209a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& HTMLInputElement::defaultValue() const 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastGetAttribute(valueAttr); 12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1214a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void HTMLInputElement::setDefaultValue(const AtomicString& value) 12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setAttribute(valueAttr, value); 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static inline bool isRFC2616TokenCharacter(UChar ch) 12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isASCII(ch) && ch > ' ' && ch != '"' && ch != '(' && ch != ')' && ch != ',' && ch != '/' && (ch < ':' || ch > '@') && (ch < '[' || ch > ']') && ch != '{' && ch != '}' && ch != 0x7f; 12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool isValidMIMEType(const String& type) 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t slashPosition = type.find('/'); 122706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (slashPosition == kNotFound || !slashPosition || slashPosition == type.length() - 1) 12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < type.length(); ++i) { 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isRFC2616TokenCharacter(type[i]) && i != slashPosition) 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool isValidFileExtension(const String& type) 12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (type.length() < 2) 12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return type[0] == '.'; 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static Vector<String> parseAcceptAttribute(const String& acceptString, bool (*predicate)(const String&)) 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> types; 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (acceptString.isEmpty()) 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return types; 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> splitTypes; 12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) acceptString.split(',', false, splitTypes); 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < splitTypes.size(); ++i) { 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String trimmedType = stripLeadingAndTrailingHTMLSpaces(splitTypes[i]); 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (trimmedType.isEmpty()) 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!predicate(trimmedType)) 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) types.append(trimmedType.lower()); 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return types; 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> HTMLInputElement::acceptMIMETypes() 12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidMIMEType); 12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> HTMLInputElement::acceptFileExtensions() 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidFileExtension); 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1273a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& HTMLInputElement::alt() const 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastGetAttribute(altAttr); 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLInputElement::maxLength() const 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_maxLength; 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setMaxLength(int maxLength, ExceptionState& exceptionState) 12845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (maxLength < 0) 1286a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(IndexSizeError, "The value provided (" + String::number(maxLength) + ") is negative."); 12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 128851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setIntegralAttribute(maxlengthAttr, maxLength); 12895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::multiple() const 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastHasAttribute(multipleAttr); 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setSize(unsigned size) 12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 129851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(sizeAttr, size); 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 130151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSize(unsigned size, ExceptionState& exceptionState) 13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!size) 1304a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(IndexSizeError, "The value provided is 0, which is an invalid size."); 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSize(size); 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)KURL HTMLInputElement::src() const 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return document().completeURL(fastGetAttribute(srcAttr)); 13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1314c664b83e7394be007e9ef2430bed7d73b50e0da7Bo LiuFileList* HTMLInputElement::files() 13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->files(); 13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1319d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void HTMLInputElement::setFiles(PassRefPtrWillBeRawPtr<FileList> files) 13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->setFiles(files); 13225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::receiveDroppedFiles(const DragData* dragData) 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->receiveDroppedFiles(dragData); 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::droppedFileSystemId() 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->droppedFileSystemId(); 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::canReceiveDroppedFiles() const 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_canReceiveDroppedFiles; 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setCanReceiveDroppedFiles(bool canReceiveDroppedFiles) 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_canReceiveDroppedFiles == canReceiveDroppedFiles) 13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_canReceiveDroppedFiles = canReceiveDroppedFiles; 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer()) 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer()->updateFromElement(); 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::sanitizeValue(const String& proposedValue) const 13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proposedValue.isNull()) 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proposedValue; 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->sanitizeValue(proposedValue); 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::localizeValue(const String& proposedValue) const 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proposedValue.isNull()) 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proposedValue; 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->localizeValue(proposedValue); 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isInRange() const 13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isInRange(value()); 13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isOutOfRange() const 13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isOutOfRange(value()); 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isRequiredFormControl() const 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_inputType->supportsRequired() && isRequired(); 1375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::matchesReadOnlyPseudoClass() const 1378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 137953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_inputType->supportsReadOnly() && isReadOnly(); 1380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::matchesReadWritePseudoClass() const 1383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 138453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_inputType->supportsReadOnly() && !isReadOnly(); 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::onSearch() 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(isSearchField()); 13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType) 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<SearchInputType*>(m_inputType.get())->stopSearchEventTimer(); 13921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) dispatchEvent(Event::createBubble(EventTypeNames::search)); 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::updateClearButtonVisibility() 1396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1397c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->updateClearButtonVisibility(); 1398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::willChangeForm() 14015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::willChangeForm(); 14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::didChangeForm() 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::didChangeForm(); 14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node::InsertionNotificationRequest HTMLInputElement::insertedInto(ContainerNode* insertionPoint) 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::insertedInto(insertionPoint); 1415521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (insertionPoint->inDocument() && !form()) 1416521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) addToRadioButtonGroup(); 14175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return InsertionDone; 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::removedFrom(ContainerNode* insertionPoint) 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (insertionPoint->inDocument() && !form()) 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::removedFrom(insertionPoint); 14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!inDocument()); 14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLInputElement::didMoveToNewDocument(Document& oldDocument) 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1432926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (hasImageLoader()) 1433926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) imageLoader()->elementDidMoveToNewDocument(); 1434926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (isRadioButton()) 1436d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) oldDocument.formController().radioButtonGroupScope().removeButton(this); 14371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (m_hasTouchEventHandler) 143809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) oldDocument.didRemoveTouchEventHandler(this); 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_hasTouchEventHandler) 14411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) document().didAddTouchEventHandler(this); 1442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::didMoveToNewDocument(oldDocument); 14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::removeAllEventListeners() 14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 144809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLTextFormControlElement::removeAllEventListeners(); 144909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_hasTouchEventHandler = false; 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::recalcWillValidate() const 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->supportsValidation() && HTMLTextFormControlElement::recalcWillValidate(); 14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::requiredAttributeChanged() 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::requiredAttributeChanged(); 146009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 146109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->requiredAttributeChanged(this); 1462c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->requiredAttributeChanged(); 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::selectColorInColorChooser(const Color& color) 14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->isColorControl()) 14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<ColorInputType*>(m_inputType.get())->didChooseColor(color); 14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 147153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLElement* HTMLInputElement::list() const 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dataList(); 14755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLDataListElement* HTMLInputElement::dataList() const 14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_hasNonEmptyList) 14805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->shouldRespectListAttribute()) 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Element* element = treeScope().getElementById(fastGetAttribute(listAttr)); 14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element) 14875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1488d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!isHTMLDataListElement(*element)) 14895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 14905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return toHTMLDataListElement(element); 14925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 149409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool HTMLInputElement::hasValidDataListOptions() const 149509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 149609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLDataListElement* dataList = this->dataList(); 149709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!dataList) 149809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 1499d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLCollection> options = dataList->options(); 150009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options->item(i)); ++i) { 150109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (isValidValue(option->value())) 150209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return true; 150309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 150409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 150509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 150609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1507f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)void HTMLInputElement::setListAttributeTargetObserver(PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> newObserver) 1508323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 1509323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (m_listAttributeTargetObserver) 1510323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) m_listAttributeTargetObserver->unregister(); 1511323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) m_listAttributeTargetObserver = newObserver; 1512323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 1513323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::resetListAttributeTargetObserver() 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inDocument()) 1517323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) setListAttributeTargetObserver(ListAttributeTargetObserver::create(fastGetAttribute(listAttr), this)); 15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1519323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) setListAttributeTargetObserver(nullptr); 15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::listAttributeTargetChanged() 15235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1524c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->listAttributeTargetChanged(); 15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isSteppable() const 15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isSteppable(); 15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTextButton() const 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextButton(); 15355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isRadioButton() const 15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isRadioButton(); 15405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isSearchField() const 15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isSearchField(); 15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isInputTypeHidden() const 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isHiddenType(); 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isPasswordField() const 15535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isPasswordField(); 15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isCheckbox() const 15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isCheckbox(); 15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isRangeControl() const 15635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isRangeControl(); 15655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isText() const 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextType(); 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isEmailField() const 15735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isEmailField(); 15755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isFileUpload() const 15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isFileUpload(); 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isImageButton() const 15835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isImageButton(); 15855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isNumberField() const 15885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isNumberField(); 15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTelephoneField() const 15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTelephoneField(); 15955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isURLField() const 15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isURLField(); 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isDateField() const 16035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isDateField(); 16055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isDateTimeLocalField() const 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isDateTimeLocalField(); 16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isMonthField() const 16135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isMonthField(); 16155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTimeField() const 16185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTimeField(); 16205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isWeekField() const 16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isWeekField(); 16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isEnumeratable() const 16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isEnumeratable(); 16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::supportLabels() const 16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1634bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->isInteractiveContent(); 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldAppearChecked() const 16385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return checked() && m_inputType->isCheckable(); 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::supportsPlaceholder() const 16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->supportsPlaceholder(); 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updatePlaceholderText() 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1649d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return m_inputTypeView->updatePlaceholderText(); 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::parseMaxLengthAttribute(const AtomicString& value) 16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int maxLength; 1655926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!parseHTMLInteger(value, maxLength)) 16565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxLength = maximumLength; 16575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (maxLength < 0 || maxLength > maximumLength) 16585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxLength = maximumLength; 16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldMaxLength = m_maxLength; 16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_maxLength = maxLength; 16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (oldMaxLength != maxLength) 16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateValueIfNeeded(); 166309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 16655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateValueIfNeeded() 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String newValue = sanitizeValue(m_valueIfDirty); 16705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_valueIfDirty.isNull() || newValue.isNull()); 16715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (newValue != m_valueIfDirty) 16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(newValue); 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::defaultToolTip() const 16765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->defaultToolTip(); 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 168053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool HTMLInputElement::shouldAppearIndeterminate() const 16815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->supportsIndeterminateAppearance() && indeterminate(); 16835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1685926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::isInRequiredRadioButtonGroup() 16865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(isRadioButton()); 168809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 168909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return scope->isInRequiredGroup(this); 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 16915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLInputElement* HTMLInputElement::checkedRadioButtonForGroup() const 16945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 169509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 169609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return scope->checkedButtonForGroup(name()); 16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 170009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)RadioButtonGroupScope* HTMLInputElement::radioButtonGroupScope() const 17015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isRadioButton()) 17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (HTMLFormElement* formElement = form()) 170509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return &formElement->radioButtonGroupScope(); 17065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inDocument()) 1707d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return &document().formController().radioButtonGroupScope(); 17085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 17095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void HTMLInputElement::addToRadioButtonGroup() 17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 171309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 171409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->addButton(this); 17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void HTMLInputElement::removeFromRadioButtonGroup() 17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 171909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 172009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->removeButton(this); 17215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned HTMLInputElement::height() const 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->height(); 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned HTMLInputElement::width() const 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->width(); 17315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setHeight(unsigned height) 17345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 173551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(heightAttr, height); 17365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setWidth(unsigned width) 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 174051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(widthAttr, width); 17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1743f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> ListAttributeTargetObserver::create(const AtomicString& id, HTMLInputElement* element) 17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1745f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) return adoptPtrWillBeNoop(new ListAttributeTargetObserver(id, element)); 17465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ListAttributeTargetObserver::ListAttributeTargetObserver(const AtomicString& id, HTMLInputElement* element) 17498abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : IdTargetObserver(element->treeScope().idTargetObserverRegistry(), id) 17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_element(element) 17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1754f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)void ListAttributeTargetObserver::trace(Visitor* visitor) 1755f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles){ 1756f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) visitor->trace(m_element); 1757f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) IdTargetObserver::trace(visitor); 1758f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)} 1759f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) 17605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ListAttributeTargetObserver::idTargetChanged() 17615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->listAttributeTargetChanged(); 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 176551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setRangeText(const String& replacement, ExceptionState& exceptionState) 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 1768a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 17695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) HTMLTextFormControlElement::setRangeText(replacement, exceptionState); 17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionState& exceptionState) 17765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 1778a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 17795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 178251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) HTMLTextFormControlElement::setRangeText(replacement, start, end, selectionMode, exceptionState); 17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::setupDateTimeChooserParameters(DateTimeChooserParameters& parameters) 17865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17878abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!document().view()) 17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 17895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.type = type(); 17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.minimum = minimum(); 17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.maximum = maximum(); 1793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parameters.required = isRequired(); 1794926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled()) 1795926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parameters.locale = defaultLanguage(); 1796926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else { 1797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) AtomicString computedLocale = computeInheritedLanguage(); 179809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) parameters.locale = computedLocale.isEmpty() ? defaultLanguage() : computedLocale; 1799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 18005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StepRange stepRange = createStepRange(RejectAny); 18025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (stepRange.hasStep()) { 18035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.step = stepRange.step().toDouble(); 18045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.stepBase = stepRange.stepBase().toDouble(); 18055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 18065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.step = 1.0; 18075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.stepBase = 0; 18085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) parameters.anchorRectInRootView = document().view()->contentsToRootView(pixelSnappedBoundingBox()); 18115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.currentValue = value(); 181251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) parameters.doubleValue = m_inputType->valueAsDouble(); 18135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.isAnchorElementRTL = computedStyle()->direction() == RTL; 181409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (HTMLDataListElement* dataList = this->dataList()) { 1815d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLCollection> options = dataList->options(); 181609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement(options->item(i)); ++i) { 181709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!isValidValue(option->value())) 181809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) continue; 181909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) DateTimeSuggestion suggestion; 182009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.value = m_inputType->parseToNumber(option->value(), Decimal::nan()).toDouble(); 182109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (std::isnan(suggestion.value)) 182209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) continue; 182309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.localizedValue = localizeValue(option->value()); 182409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.label = option->value() == option->label() ? String() : option->label(); 182509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) parameters.suggestions.append(suggestion); 18265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 18295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1831e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochbool HTMLInputElement::supportsInputModeAttribute() const 1832e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 1833e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_inputType->supportsInputModeAttribute(); 1834e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 1835e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 183609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::setShouldRevealPassword(bool value) 183709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 183809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_shouldRevealPassword == value) 183909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 184009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_shouldRevealPassword = value; 184109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) lazyReattachIfAttached(); 184209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 184309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1844bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)bool HTMLInputElement::isInteractiveContent() const 1845bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 1846bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->isInteractiveContent(); 1847bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 1848bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 184909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool HTMLInputElement::supportsAutofocus() const 185009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 185109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_inputType->isInteractiveContent(); 185209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 185309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1854926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 1855926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<RenderStyle> HTMLInputElement::customStyleForRenderer() 1856926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1857c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->customStyleForRenderer(originalStyleForRenderer()); 1858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 1860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1861323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)bool HTMLInputElement::shouldDispatchFormControlChangeEvent(String& oldValue, String& newValue) 1862323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 1863323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return m_inputType->shouldDispatchFormControlChangeEvent(oldValue, newValue); 1864323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 1865323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 18665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace 1867