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) 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionMessages.h" 33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptEventListener.h" 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8DOMActivityLogger.h" 365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSPropertyNames.h" 375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/InputTypeNames.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/accessibility/AXObjectCache.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/IdTargetObserver.h" 43e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ElementShadow.h" 44e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/InsertionPoint.h" 45e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h" 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/editing/SpellChecker.h" 481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/BeforeTextInsertedEvent.h" 491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/KeyboardEvent.h" 501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/MouseEvent.h" 511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/ScopedEventQueue.h" 521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/TouchEvent.h" 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/fileapi/FileList.h" 54e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/frame/EventHandlerRegistry.h" 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameHost.h" 56f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/frame/FrameView.h" 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/UseCounter.h" 5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLCollection.h" 6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLDataListElement.h" 619e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/html/HTMLDataListOptionsCollection.h" 6253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 6353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLImageLoader.h" 6453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLOptionElement.h" 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/forms/ColorChooser.h" 6606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/ColorInputType.h" 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/forms/DateTimeChooser.h" 6806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/FileInputType.h" 6906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/FormController.h" 7006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/InputType.h" 7106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/SearchInputType.h" 7253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLParserIdioms.h" 73f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/html/shadow/ShadowElementNames.h" 7451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/page/Chrome.h" 7551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/page/ChromeClient.h" 7653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTextControlSingleLine.h" 7753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTheme.h" 781e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Language.h" 791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformMouseEvent.h" 805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/PlatformLocale.h" 82591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/MathExtras.h" 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)class ListAttributeTargetObserver : public IdTargetObserver { 89f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 91f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) static PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> create(const AtomicString& id, HTMLInputElement*); 92f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void idTargetChanged() OVERRIDE; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ListAttributeTargetObserver(const AtomicString& id, HTMLInputElement*); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) RawPtrWillBeMember<HTMLInputElement> m_element; 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: According to HTML4, the length attribute's value can be arbitrarily 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// large. However, due to https://bugs.webkit.org/show_bug.cgi?id=14536 things 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// get rather sluggish when a text field has a larger number of characters than 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// this, even when just clicking in the text field. 105f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)const int HTMLInputElement::maximumLength = 524288; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int defaultSize = 20; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int maxSavedResults = 256; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)HTMLInputElement::HTMLInputElement(Document& document, HTMLFormElement* form, bool createdByParser) 11051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) : HTMLTextFormControlElement(inputTag, document, form) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_size(defaultSize) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maxLength(maximumLength) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maxResults(-1) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isChecked(false) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_reflectsCheckedAttribute(true) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isIndeterminate(false) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isActivatedSubmit(false) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_autocomplete(Uninitialized) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasNonEmptyList(false) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_stateRestored(false) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_parsingInProgress(createdByParser) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_valueAttributeWasUpdatedAfterParsing(false) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_canReceiveDroppedFiles(false) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasTouchEventHandler(false) 12509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_shouldRevealPassword(false) 126a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch , m_needsToUpdateViewValue(true) 127bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) , m_inputType(InputType::createText(*this)) 128c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) , m_inputTypeView(m_inputType) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setHasCustomStyleCallbacks(); 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)PassRefPtrWillBeRawPtr<HTMLInputElement> HTMLInputElement::create(Document& document, HTMLFormElement* form, bool createdByParser) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> inputElement = adoptRefWillBeNoop(new HTMLInputElement(document, form, createdByParser)); 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) inputElement->ensureUserAgentShadowRoot(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return inputElement.release(); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void HTMLInputElement::trace(Visitor* visitor) 143323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 144323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_inputType); 145323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_inputTypeView); 146f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) visitor->trace(m_listAttributeTargetObserver); 1475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_imageLoader); 148323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) HTMLTextFormControlElement::trace(visitor); 149323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 150323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)HTMLImageLoader* HTMLInputElement::imageLoader() 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!m_imageLoader) 1545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_imageLoader = HTMLImageLoader::create(this); 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_imageLoader.get(); 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::didAddUserAgentShadowRoot(ShadowRoot&) 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 16051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->createShadowSubtree(); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1636f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid HTMLInputElement::willAddFirstAuthorShadowRoot() 1648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 16551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->destroyShadowSubtree(); 166bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_inputTypeView = InputTypeView::create(*this); 16751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) lazyReattachIfAttached(); 1688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 1698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLInputElement::~HTMLInputElement() 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 172f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#if !ENABLE(OILPAN) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Need to remove form association while this is still an HTMLInputElement 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // so that virtual functions are called correctly. 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setForm(0); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // setForm(0) may register this to a document-level radio button group. 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We should unregister it to avoid accessing a deleted object. 1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (type() == InputTypeNames::radio) 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) document().formController().radioButtonGroupScope().removeButton(this); 180e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (m_hasTouchEventHandler && document().frameHost()) 181e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) document().frameHost()->eventHandlerRegistry().didRemoveEventHandler(*this, EventHandlerRegistry::TouchEvent); 182f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#endif 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& HTMLInputElement::name() const 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_name.isNull() ? emptyAtom : m_name; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<FileChooserFileInfo> HTMLInputElement::filesFromFileInputFormControlState(const FormControlState& state) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FileInputType::filesFromFormControlState(state); 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldAutocomplete() const 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_autocomplete != Uninitialized) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_autocomplete == On; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::shouldAutocomplete(); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isValidValue(const String& value) const 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetStringValue()) { 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !m_inputType->typeMismatchFor(value) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->stepMismatch(value) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->rangeUnderflow(value) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->rangeOverflow(value) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !tooLong(value, IgnoreDirtyFlag) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->patternMismatch(value) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_inputType->valueMissing(value); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::tooLong() const 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && tooLong(value(), CheckDirtyFlag); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::typeMismatch() const 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->typeMismatch(); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::valueMissing() const 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->valueMissing(value()); 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::hasBadInput() const 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return willValidate() && m_inputType->hasBadInput(); 235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::patternMismatch() const 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->patternMismatch(value()); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::tooLong(const String& value, NeedsToCheckDirtyFlag check) const 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_inputType->tooLong(value, check); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::rangeUnderflow() const 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->rangeUnderflow(value()); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::rangeOverflow() const 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->rangeOverflow(value()); 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::validationMessage() const 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!willValidate()) 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String(); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (customError()) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return customValidationMessage(); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->validationMessage(); 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::minimum() const 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->minimum(); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::maximum() const 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->maximum(); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::stepMismatch() const 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return willValidate() && m_inputType->stepMismatch(value()); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::getAllowedValueStep(Decimal* step) const 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->getAllowedValueStep(step); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)StepRange HTMLInputElement::createStepRange(AnyStepHandling anyStepHandling) const 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->createStepRange(anyStepHandling); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Decimal HTMLInputElement::findClosestTickMarkValue(const Decimal& value) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->findClosestTickMarkValue(value); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::stepUp(int n, ExceptionState& exceptionState) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 30051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->stepUp(n, exceptionState); 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::stepDown(int n, ExceptionState& exceptionState) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 30551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->stepUp(-n, exceptionState); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::blur() 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 310c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->blur(); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::defaultBlur() 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::blur(); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::hasCustomFocusLogic() const 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 320c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->hasCustomFocusLogic(); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 323f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)bool HTMLInputElement::isKeyboardFocusable() const 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 325f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return m_inputType->isKeyboardFocusable(); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 328591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool HTMLInputElement::shouldShowFocusRingOnMouseFocus() const 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 330591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return m_inputType->shouldShowFocusRingOnMouseFocus(); 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateFocusAppearance(bool restorePreviousSelection) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isTextField()) { 3366f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (!restorePreviousSelection) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) select(); 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) restoreCachedSelection(); 3408abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (document().frame()) 3418abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) document().frame()->selection().revealSelection(); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::updateFocusAppearance(restorePreviousSelection); 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 346f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void HTMLInputElement::beginEditing() 347f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 34809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(document().isActive()); 34909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 35009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 35109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 352f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!isTextField()) 353f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 354f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 35509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) document().frame()->spellChecker().didBeginEditing(this); 356f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 357f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::endEditing() 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 36009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(document().isActive()); 36109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 36209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 36309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!isTextField()) 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 367d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = document().frame(); 36809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->spellChecker().didEndEditingOnTextField(this); 36909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame->host()->chrome().client().didEndEditingOnTextField(*this); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::handleFocusEvent(Element* oldFocusedElement, FocusType type) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 37409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_inputTypeView->handleFocusEvent(oldFocusedElement, type); 375e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->enableSecureTextInput(); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid HTMLInputElement::dispatchFocusInEvent(const AtomicString& eventType, Element* oldFocusedElement, FocusType type) 3797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 3807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (eventType == EventTypeNames::DOMFocusIn) 3817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_inputTypeView->handleFocusInEvent(oldFocusedElement, type); 3827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLFormControlElementWithState::dispatchFocusInEvent(eventType, oldFocusedElement, type); 3837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 3847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::handleBlurEvent() 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 387e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->disableSecureTextInput(); 388c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleBlurEvent(); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 391a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void HTMLInputElement::setType(const AtomicString& type) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 39309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setAttribute(typeAttr, type); 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateType() 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3988abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) const AtomicString& newTypeName = InputType::normalizeTypeName(fastGetAttribute(typeAttr)); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 400a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_inputType->formControlType() == newTypeName) 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 403323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<InputType> newType = InputType::create(*this, newTypeName); 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool didStoreValue = m_inputType->storesValueSeparateFromAttribute(); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool didRespectHeightAndWidth = m_inputType->shouldRespectHeightAndWidthAttributes(); 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 40951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->destroyShadowSubtree(); 410f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) lazyReattachIfAttached(); 411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType = newType.release(); 4138abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (hasAuthorShadowRoot()) 414bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_inputTypeView = InputTypeView::create(*this); 4158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) else 4168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_inputTypeView = m_inputType; 41751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->createShadowSubtree(); 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 419c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool hasTouchEventHandler = m_inputTypeView->hasTouchEventHandler(); 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasTouchEventHandler != m_hasTouchEventHandler) { 421e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // If the Document is being or has been stopped, don't register any handlers. 422e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (document().frameHost() && document().lifecycle().state() < DocumentLifecycle::Stopping) { 423e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) EventHandlerRegistry& registry = document().frameHost()->eventHandlerRegistry(); 424e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (hasTouchEventHandler) 425e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) registry.didAddEventHandler(*this, EventHandlerRegistry::TouchEvent); 426e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) else 427e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) registry.didRemoveEventHandler(*this, EventHandlerRegistry::TouchEvent); 428e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_hasTouchEventHandler = hasTouchEventHandler; 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsWillValidateCheck(); 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool willStoreValue = m_inputType->storesValueSeparateFromAttribute(); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (didStoreValue && !willStoreValue && hasDirtyValue()) { 437a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setAttribute(valueAttr, AtomicString(m_valueIfDirty)); 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = String(); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!didStoreValue && willStoreValue) { 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString valueString = fastGetAttribute(valueAttr); 442e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_inputType->warnIfValueIsInvalid(valueString); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sanitizeValue(valueString); 444e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } else { 4457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!hasDirtyValue()) 4467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_inputType->warnIfValueIsInvalid(fastGetAttribute(valueAttr).string()); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateValueIfNeeded(); 448e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 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()); 455c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) AttributeCollection attributes = attributesWithoutUpdate(); 456197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (const Attribute* height = attributes.find(heightAttr)) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(heightAttr, height->value()); 458197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (const Attribute* width = attributes.find(widthAttr)) 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(widthAttr, width->value()); 460197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (const Attribute* align = attributes.find(alignAttr)) 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) attributeChanged(alignAttr, align->value()); 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 464f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (document().focusedElement() == this) 465f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) document().updateFocusAppearanceSoon(true /* restore selection */); 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChangedSinceLastFormControlChangeEvent(false); 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::subtreeHasChanged() 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 477c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->subtreeHasChanged(); 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // When typing in an input field, childrenChanged is not called, so we need to force the directionality check. 479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) calculateAndAdjustDirectionality(); 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& HTMLInputElement::formControlType() const 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->formControlType(); 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldSaveAndRestoreFormControlState() const 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->shouldSaveAndRestoreFormControlState()) 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::shouldSaveAndRestoreFormControlState(); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FormControlState HTMLInputElement::saveFormControlState() const 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->saveFormControlState(); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::restoreFormControlState(const FormControlState& state) 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->restoreFormControlState(state); 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_stateRestored = true; 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::canStartSelection() const 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isTextField()) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::canStartSelection(); 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)int HTMLInputElement::selectionStartForBinding(ExceptionState& exceptionState) const 51393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 51409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 515a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 51693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return 0; 51793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 51893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionStart(); 51993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 52093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 52151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)int HTMLInputElement::selectionEndForBinding(ExceptionState& exceptionState) const 52293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 52309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 52409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 52593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return 0; 52693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 52793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionEnd(); 52893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 52993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 53051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)String HTMLInputElement::selectionDirectionForBinding(ExceptionState& exceptionState) const 53193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 53209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 533a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 53493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return String(); 53593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 53693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return HTMLTextFormControlElement::selectionDirection(); 53793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 53893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 53951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionStartForBinding(int start, ExceptionState& exceptionState) 54093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 54109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 542a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 54393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 54493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 54593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionStart(start); 54693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 54793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 54851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionEndForBinding(int end, ExceptionState& exceptionState) 54993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 55009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 551a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 55293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 55393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 55493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionEnd(end); 55593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 55693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 55751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionDirectionForBinding(const String& direction, ExceptionState& exceptionState) 55893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 55909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 560a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 56193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 56293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 56393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionDirection(direction); 56493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 56593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 56651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionRangeForBinding(int start, int end, ExceptionState& exceptionState) 56793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 56809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 569a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 57093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 57193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 57293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionRange(start, end); 57393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 57493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 57551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSelectionRangeForBinding(int start, int end, const String& direction, ExceptionState& exceptionState) 57693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 57709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 578a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 57993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 58093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 58193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HTMLTextFormControlElement::setSelectionRange(start, end, direction); 58293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 58393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::accessKeyAction(bool sendMouseEvents) 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->accessKeyAction(sendMouseEvents); 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isPresentationAttribute(const QualifiedName& name) const 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 5927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (name == vspaceAttr || name == hspaceAttr || name == alignAttr || name == widthAttr || name == heightAttr || (name == borderAttr && type() == InputTypeNames::image)) 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::isPresentationAttribute(name); 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 597926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 599926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (name == vspaceAttr) { 600926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); 601926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); 602926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == hspaceAttr) { 603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); 604926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); 605926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == alignAttr) { 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectAlignAttribute()) 607926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) applyAlignmentAttributeToStyle(value, style); 608926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == widthAttr) { 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectHeightAndWidthAttributes()) 610926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyWidth, value); 611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == heightAttr) { 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->shouldRespectHeightAndWidthAttributes()) 613926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addHTMLLengthToStyle(style, CSSPropertyHeight, value); 6147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } else if (name == borderAttr && type() == InputTypeNames::image) // FIXME: Remove type check. 615926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) applyBorderAttributeToStyle(value, style); 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 617926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::collectStyleForPresentationAttribute(name, value, style); 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 620197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid HTMLInputElement::attributeWillChange(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& newValue) 621197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 622197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (name == formactionAttr && inDocument()) { 623197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch V8DOMActivityLogger* activityLogger = V8DOMActivityLogger::currentActivityLoggerIfIsolatedWorld(); 624197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (activityLogger) { 625197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Vector<String> argv; 626197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append("input"); 627197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append(formactionAttr.toString()); 628197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append(oldValue); 629197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append(newValue); 630197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch activityLogger->logEvent("blinkSetAttribute", argv.size(), argv.data()); 631197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 632197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 633197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch HTMLTextFormControlElement::attributeWillChange(name, oldValue, newValue); 634197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 635197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 638926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (name == nameAttr) { 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 640926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_name = value; 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 642926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 643926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == autocompleteAttr) { 64453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (equalIgnoringCase(value, "off")) 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = Off; 64653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) else { 647926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (value.isEmpty()) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = Uninitialized; 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_autocomplete = On; 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == typeAttr) 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateType(); 654926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == valueAttr) { 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We only need to setChanged if the form is looking at the default value right now. 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!hasDirtyValue()) { 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updatePlaceholderVisibility(false); 65809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 660a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueAttributeWasUpdatedAfterParsing = !m_parsingInProgress; 6637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); 664c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->valueAttributeChanged(); 665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == checkedAttr) { 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Another radio button in the same group might be checked by state 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // restore. We shouldn't call setChecked() even if this has the checked 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // attribute. So, delay the setChecked() call until 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // finishParsingChildren() is called if parsing is in progress. 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_parsingInProgress && m_reflectsCheckedAttribute) { 671926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setChecked(!value.isNull()); 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 674926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == maxlengthAttr) 675926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parseMaxLengthAttribute(value); 676926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == sizeAttr) { 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldSize = m_size; 678926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int valueAsInteger = value.toInt(); 679926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_size = valueAsInteger > 0 ? valueAsInteger : defaultSize; 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_size != oldSize && renderer()) 6815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) renderer()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); 682926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == altAttr) 683c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->altAttributeChanged(); 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == srcAttr) 685c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->srcAttributeChanged(); 686926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (name == usemapAttr || name == accesskeyAttr) { 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: ignore for the moment 688926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == onsearchAttr) { 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Search field and slider attributes all just cause updateFromElement to be called through style recalcing. 6905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setAttributeEventListener(EventTypeNames::search, createAttributeEventListener(this, name, value, eventParameterName())); 691926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == resultsAttr) { 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldResults = m_maxResults; 693926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults) : -1; 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Detaching just for maxResults change is not ideal. We should figure out the right 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // time to relayout for this change. 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0)) 69793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) lazyReattachIfAttached(); 69809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 6991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::ResultsAttribute); 700926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == incrementalAttr) { 70109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 7021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::IncrementalAttribute); 703926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == minAttr) { 704c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->minOrMaxAttributeChanged(); 705e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); 706926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setNeedsValidityCheck(); 7071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::MinAttribute); 708926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == maxAttr) { 709c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->minOrMaxAttributeChanged(); 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 7111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::MaxAttribute); 712926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == multipleAttr) { 713c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->multipleAttributeChanged(); 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == stepAttr) { 716c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->stepAttributeChanged(); 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 7181e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::StepAttribute); 719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == patternAttr) { 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 7211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::PatternAttribute); 722926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == disabledAttr) { 723926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 724c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->disabledAttributeChanged(); 725926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (name == readonlyAttr) { 726926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 727c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->readonlyAttributeChanged(); 72893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } else if (name == listAttr) { 729926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_hasNonEmptyList = !value.isEmpty(); 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_hasNonEmptyList) { 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) listAttributeTargetChanged(); 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::ListAttribute); 735323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } else if (name == webkitdirectoryAttr) { 736926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 7371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UseCounter::count(document(), UseCounter::PrefixedDirectoryAttribute); 738926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTextFormControlElement::parseAttribute(name, value); 741c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->attributeChanged(); 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::finishParsingChildren() 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_parsingInProgress = false; 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::finishParsingChildren(); 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_stateRestored) { 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool checked = hasAttribute(checkedAttr); 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (checked) 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(checked); 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool HTMLInputElement::rendererIsNeeded(const RenderStyle& style) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return m_inputType->rendererIsNeeded() && HTMLTextFormControlElement::rendererIsNeeded(style); 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 761591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* HTMLInputElement::createRenderer(RenderStyle* style) 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 763c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->createRenderer(style); 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 766521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)void HTMLInputElement::attach(const AttachContext& context) 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 768521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) HTMLTextFormControlElement::attach(context); 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->startResourceLoading(); 771e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_inputType->countUsage(); 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (document().focusedElement() == this) 7748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) document().updateFocusAppearanceSoon(true /* restore selection */); 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 777521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)void HTMLInputElement::detach(const AttachContext& context) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 779521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) HTMLTextFormControlElement::detach(context); 780a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 78151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->closePopupView(); 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::altText() const 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://www.w3.org/TR/1998/REC-html40-19980424/appendix/notes.html#altgen 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // also heavily discussed by Hixie on bugzilla 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // note this is intentionally different to HTMLImageElement::altText() 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String alt = fastGetAttribute(altAttr); 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // fall back to title attribute 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isNull()) 79209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) alt = fastGetAttribute(titleAttr); 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isNull()) 79409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) alt = fastGetAttribute(valueAttr); 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alt.isEmpty()) 79651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) alt = locale().queryString(blink::WebLocalizedString::InputElementAltText); 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return alt; 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 80051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool HTMLInputElement::canBeSuccessfulSubmitButton() const 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 80251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return m_inputType->canBeSuccessfulSubmitButton(); 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isActivatedSubmit() const 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_isActivatedSubmit; 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setActivatedSubmit(bool flag) 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isActivatedSubmit = flag; 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::appendFormData(FormDataList& encoding, bool multipart) 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isFormDataAppendable() && m_inputType->appendFormData(encoding, multipart); 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 820bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String HTMLInputElement::resultForDialogSubmit() 821bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 822bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->resultForDialogSubmit(); 823bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 824bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 8251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLInputElement::resetImpl() 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 82709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_inputType->storesValueSeparateFromAttribute()) { 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(String()); 82909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsValidityCheck(); 83009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(hasAttribute(checkedAttr)); 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = true; 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTextField() const 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextField(); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setChecked(bool nowChecked, TextFieldEventBehavior eventBehavior) 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (checked() == nowChecked) 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 846323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> protector(this); 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = false; 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isChecked = nowChecked; 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 85109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->updateCheckedState(this); 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer() && renderer()->style()->hasAppearance()) 853d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RenderTheme::theme().stateChanged(renderer(), CheckedControlState); 854c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Ideally we'd do this from the render tree (matching 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // RenderTextView), but it's not possible to do it at the moment 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // because of the way the code is structured. 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (renderer()) { 8618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (AXObjectCache* cache = renderer()->document().existingAXObjectCache()) 862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) cache->checkedStateChanged(this); 863926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Only send a change event for items in the document (avoid firing during 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // parsing) and don't send a change event for a radio button that's getting 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unchecked to match other browsers. DOM is not a useful standard for this 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // because it says only to fire change events at "lose focus" time, which is 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // definitely wrong in practice for these types of elements. 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (eventBehavior != DispatchNoEvent && inDocument() && m_inputType->shouldSendChangeEventAfterCheckedChanged()) { 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTextAsOfLastFormControlChangeEvent(String()); 87207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (eventBehavior == DispatchInputAndChangeEvent) 87307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch dispatchFormControlInputEvent(); 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchFormControlChangeEvent(); 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 876926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pseudoStateChanged(CSSSelector::PseudoChecked); 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setIndeterminate(bool newValue) 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (indeterminate() == newValue) 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isIndeterminate = newValue; 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci pseudoStateChanged(CSSSelector::PseudoIndeterminate); 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer() && renderer()->style()->hasAppearance()) 890d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RenderTheme::theme().stateChanged(renderer(), CheckedControlState); 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLInputElement::size() const 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_size; 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::sizeShouldIncludeDecoration(int& preferredSize) const 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 900c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->sizeShouldIncludeDecoration(defaultSize, preferredSize); 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::copyNonAttributePropertiesFromElement(const Element& source) 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HTMLInputElement& sourceElement = static_cast<const HTMLInputElement&>(source); 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sourceElement.m_valueIfDirty; 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setChecked(sourceElement.m_isChecked); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reflectsCheckedAttribute = sourceElement.m_reflectsCheckedAttribute; 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isIndeterminate = sourceElement.m_isIndeterminate; 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::copyNonAttributePropertiesFromElement(source); 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 914a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 91551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->updateView(); 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::value() const 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String value; 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType->getTypeSpecificValue(value)) 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = m_valueIfDirty; 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString valueString = fastGetAttribute(valueAttr); 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = sanitizeValue(valueString); 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->fallbackValue(); 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::valueWithDefault() const 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String value = this->value(); 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!value.isNull()) 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->defaultValue(); 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueForUser(const String& value) 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Call setValue and make it send a change event. 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(value, DispatchChangeEvent); 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const String& HTMLInputElement::suggestedValue() const 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_suggestedValue; 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setSuggestedValue(const String& value) 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetSuggestedValue()) 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 960a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = sanitizeValue(value); 96209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 96351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputTypeView->updateView(); 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setEditingValue(const String& value) 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!renderer() || !isTextField()) 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 97076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) setInnerEditorValue(value); 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) subtreeHasChanged(); 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned max = value.length(); 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (focused()) 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelectionRange(max, max); 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cacheSelectionInResponseToSetValue(max); 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchInputEvent(); 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void HTMLInputElement::setInnerEditorValue(const String& value) 983a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 98476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) HTMLTextFormControlElement::setInnerEditorValue(value); 985a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = false; 986a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 987a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 98851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValue(const String& value, ExceptionState& exceptionState, TextFieldEventBehavior eventBehavior) 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 9917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (type() == InputTypeNames::file && !value.isEmpty()) { 99209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "This input element accepts a filename, which may only be programmatically set to the empty string."); 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(value, eventBehavior); 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValue(const String& value, TextFieldEventBehavior eventBehavior) 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->canSetValue(value)) 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1004323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> protector(this); 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EventQueueScope scope; 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String sanitizedValue = sanitizeValue(value); 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool valueChanged = sanitizedValue != this->value(); 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setLastChangeWasNotUserEdit(); 1010a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = true; 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = String(); // Prevent TextFieldInputType::setValue from using the suggested value. 10128abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->setValue(sanitizedValue, valueChanged, eventBehavior); 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (valueChanged && eventBehavior == DispatchNoEvent) 10168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) setTextAsOfLastFormControlChangeEvent(sanitizedValue); 10178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!valueChanged) 10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueInternal(const String& sanitizedValue, TextFieldEventBehavior eventBehavior) 10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_valueIfDirty = sanitizedValue; 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 1028a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (document().focusedElement() == this) 1029a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch document().frameHost()->chrome().client().didUpdateTextOfFocusedElementByNonUserInput(); 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1032d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void HTMLInputElement::updateView() 1033d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 1034d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_inputTypeView->updateView(); 1035d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 1036d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1037a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochdouble HTMLInputElement::valueAsDate(bool& isNull) const 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1039a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch double date = m_inputType->valueAsDate(); 1040a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch isNull = !std::isfinite(date); 1041a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return date; 10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 104451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValueAsDate(double value, ExceptionState& exceptionState) 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 104651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->setValueAsDate(value, exceptionState); 10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double HTMLInputElement::valueAsNumber() const 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->valueAsDouble(); 10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setValueAsNumber(double newValue, ExceptionState& exceptionState, TextFieldEventBehavior eventBehavior) 10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1056323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#dom-input-valueasnumber 1057323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // On setting, if the new value is infinite, then throw a TypeError exception. 105809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (std::isinf(newValue)) { 105909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(newValue)); 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 106251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_inputType->setValueAsDouble(newValue, eventBehavior, exceptionState); 10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setValueFromRenderer(const String& value) 10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // File upload controls will never use this. 10687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(type() != InputTypeNames::file); 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_suggestedValue = String(); 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Renderer and our event handler are responsible for sanitizing values. 10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(value == sanitizeValue(value) || sanitizeValue(value).isEmpty()); 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10750019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch m_valueIfDirty = value; 1076a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_needsToUpdateViewValue = false; 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Input event is fired by the Node::defaultEventHandler for editable controls. 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isTextField()) 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchInputEvent(); 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) notifyFormStateChanged(); 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Clear autofill flag (and yellow background) on user edit. 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setAutofilled(false); 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* HTMLInputElement::preDispatchEventHandler(Event* event) 10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::textInput && m_inputTypeView->shouldSubmitImplicitly(event)) { 10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->stopPropagation(); 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() != EventTypeNames::click) 10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1097591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!event->isMouseEvent() || toMouseEvent(event)->button() != LeftButton) 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1099f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if ENABLE(OILPAN) 1100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return m_inputTypeView->willDispatchClick(); 1101f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#else 11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Check whether there are any cases where this actually ends up leaking. 1103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->willDispatchClick().leakPtr(); 1104f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::postDispatchEventHandler(Event* event, void* dataFromPreDispatch) 11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1109f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) OwnPtrWillBeRawPtr<ClickHandlingState> state = adoptPtrWillBeNoop(static_cast<ClickHandlingState*>(dataFromPreDispatch)); 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!state) 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1112c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->didDispatchClick(event, *state); 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::defaultEventHandler(Event* evt) 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isMouseEvent() && evt->type() == EventTypeNames::click && toMouseEvent(evt)->button() == LeftButton) { 1118c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleClickEvent(toMouseEvent(evt)); 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (evt->isTouchEvent() && m_inputTypeView->hasTouchEventHandler()) { 112406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) m_inputTypeView->handleTouchEvent(toTouchEvent(evt)); 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keydown) { 1130c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeydownEvent(toKeyboardEvent(evt)); 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Call the base event handler before any of our own event handling for almost all events in text fields. 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Makes editing keyboard handling take precedence over the keydown and keypress handling in this function. 11371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) bool callBaseClassEarly = isTextField() && (evt->type() == EventTypeNames::keydown || evt->type() == EventTypeNames::keypress); 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (callBaseClassEarly) { 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::defaultEventHandler(evt); 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DOMActivate events cause the input to be "activated" - in the case of image and submit inputs, this means 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // actually submitting the form. For reset inputs, the form is reset. These events are sent when the user clicks 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // on the element, or presses enter while it is the active element. JavaScript code wishing to activate the element 11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // must dispatch a DOMActivate event - a click event will not do the job. 11481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->type() == EventTypeNames::DOMActivate) { 11499bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_inputType->handleDOMActivateEvent(evt); 11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Use key press event here since sending simulated mouse events 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // on key down blocks the proper sending of the key press event. 11561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keypress) { 1157c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeypressEvent(toKeyboardEvent(evt)); 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keyup) { 1163c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleKeyupEvent(toKeyboardEvent(evt)); 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1168c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (m_inputTypeView->shouldSubmitImplicitly(evt)) { 11697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 11707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (type() == InputTypeNames::search) 11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onSearch(); 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Form submission finishes editing, just as loss of focus does. 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If there was a change, send the event now. 11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (wasChangedSinceLastFormControlChangeEvent()) 11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchFormControlChangeEvent(); 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1177f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLFormElement> formForSubmission = m_inputTypeView->formForSubmission(); 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Form may never have been present, or may have been destroyed by code responding to the change event. 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (formForSubmission) 11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) formForSubmission->submitImplicitly(evt, canTriggerImplicitSubmission()); 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) evt->setDefaultHandled(); 11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->isBeforeTextInsertedEvent()) 1187c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleBeforeTextInsertedEvent(static_cast<BeforeTextInsertedEvent*>(evt)); 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11891e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (evt->isMouseEvent() && evt->type() == EventTypeNames::mousedown) { 1190c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->handleMouseDownEvent(toMouseEvent(evt)); 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (evt->defaultHandled()) 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->forwardEvent(evt); 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!callBaseClassEarly && !evt->defaultHandled()) 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::defaultEventHandler(evt); 11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::willRespondToMouseClickEvents() 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Consider implementing willRespondToMouseClickEvents() in InputType if more accurate results are necessary. 120453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!isDisabledFormControl()) 12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return HTMLTextFormControlElement::willRespondToMouseClickEvents(); 12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isURLAttribute(const Attribute& attribute) const 12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return attribute.name() == srcAttr || attribute.name() == formactionAttr || HTMLTextFormControlElement::isURLAttribute(attribute); 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 121543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)bool HTMLInputElement::hasLegalLinkAttribute(const QualifiedName& name) const 121643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 121743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return m_inputType->hasLegalLinkAttribute(name) || HTMLTextFormControlElement::hasLegalLinkAttribute(name); 121843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 121943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 122043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)const QualifiedName& HTMLInputElement::subResourceAttributeName() const 122143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 122243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return m_inputType->subResourceAttributeName(); 122343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 122443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 1225a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& HTMLInputElement::defaultValue() const 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastGetAttribute(valueAttr); 12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static inline bool isRFC2616TokenCharacter(UChar ch) 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isASCII(ch) && ch > ' ' && ch != '"' && ch != '(' && ch != ')' && ch != ',' && ch != '/' && (ch < ':' || ch > '@') && (ch < '[' || ch > ']') && ch != '{' && ch != '}' && ch != 0x7f; 12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool isValidMIMEType(const String& type) 12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t slashPosition = type.find('/'); 123806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (slashPosition == kNotFound || !slashPosition || slashPosition == type.length() - 1) 12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < type.length(); ++i) { 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isRFC2616TokenCharacter(type[i]) && i != slashPosition) 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool isValidFileExtension(const String& type) 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (type.length() < 2) 12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return type[0] == '.'; 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static Vector<String> parseAcceptAttribute(const String& acceptString, bool (*predicate)(const String&)) 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> types; 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (acceptString.isEmpty()) 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return types; 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> splitTypes; 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) acceptString.split(',', false, splitTypes); 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < splitTypes.size(); ++i) { 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String trimmedType = stripLeadingAndTrailingHTMLSpaces(splitTypes[i]); 12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (trimmedType.isEmpty()) 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!predicate(trimmedType)) 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) types.append(trimmedType.lower()); 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return types; 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> HTMLInputElement::acceptMIMETypes() 12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidMIMEType); 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Vector<String> HTMLInputElement::acceptFileExtensions() 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidFileExtension); 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1284a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& HTMLInputElement::alt() const 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastGetAttribute(altAttr); 12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int HTMLInputElement::maxLength() const 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_maxLength; 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 129451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setMaxLength(int maxLength, ExceptionState& exceptionState) 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (maxLength < 0) 1297a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(IndexSizeError, "The value provided (" + String::number(maxLength) + ") is negative."); 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 129951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setIntegralAttribute(maxlengthAttr, maxLength); 13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::multiple() const 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fastHasAttribute(multipleAttr); 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setSize(unsigned size) 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 130951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(sizeAttr, size); 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 131251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setSize(unsigned size, ExceptionState& exceptionState) 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!size) 1315a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(IndexSizeError, "The value provided is 0, which is an invalid size."); 13165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSize(size); 13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)KURL HTMLInputElement::src() const 13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13228abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return document().completeURL(fastGetAttribute(srcAttr)); 13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325197021e6b966cfb06891637935ef33fff06433d1Ben MurdochFileList* HTMLInputElement::files() 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->files(); 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1330d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void HTMLInputElement::setFiles(PassRefPtrWillBeRawPtr<FileList> files) 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inputType->setFiles(files); 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::receiveDroppedFiles(const DragData* dragData) 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->receiveDroppedFiles(dragData); 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::droppedFileSystemId() 13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->droppedFileSystemId(); 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::canReceiveDroppedFiles() const 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_canReceiveDroppedFiles; 13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setCanReceiveDroppedFiles(bool canReceiveDroppedFiles) 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_canReceiveDroppedFiles == canReceiveDroppedFiles) 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_canReceiveDroppedFiles = canReceiveDroppedFiles; 13555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (renderer()) 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer()->updateFromElement(); 13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::sanitizeValue(const String& proposedValue) const 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proposedValue.isNull()) 13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proposedValue; 13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->sanitizeValue(proposedValue); 13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::localizeValue(const String& proposedValue) const 13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (proposedValue.isNull()) 13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return proposedValue; 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->localizeValue(proposedValue); 13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isInRange() const 13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isInRange(value()); 13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isOutOfRange() const 13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isOutOfRange(value()); 13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isRequiredFormControl() const 13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_inputType->supportsRequired() && isRequired(); 1386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::matchesReadOnlyPseudoClass() const 1389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 139053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_inputType->supportsReadOnly() && isReadOnly(); 1391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::matchesReadWritePseudoClass() const 1394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 139553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_inputType->supportsReadOnly() && !isReadOnly(); 13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::onSearch() 13995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check, and static_cast. 14017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(type() == InputTypeNames::search); 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_inputType) 14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<SearchInputType*>(m_inputType.get())->stopSearchEventTimer(); 14041e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) dispatchEvent(Event::createBubble(EventTypeNames::search)); 14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1407926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::updateClearButtonVisibility() 1408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1409c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->updateClearButtonVisibility(); 1410926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::willChangeForm() 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 14155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::willChangeForm(); 14165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::didChangeForm() 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::didChangeForm(); 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addToRadioButtonGroup(); 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node::InsertionNotificationRequest HTMLInputElement::insertedInto(ContainerNode* insertionPoint) 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1426197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (insertionPoint->inDocument()) { 1427197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch V8DOMActivityLogger* activityLogger = V8DOMActivityLogger::currentActivityLoggerIfIsolatedWorld(); 1428197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (activityLogger) { 1429197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Vector<String> argv; 1430197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append("input"); 1431197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append(fastGetAttribute(typeAttr)); 1432197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch argv.append(fastGetAttribute(formactionAttr)); 1433197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch activityLogger->logEvent("blinkAddElement", argv.size(), argv.data()); 1434197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1435197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::insertedInto(insertionPoint); 1437521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (insertionPoint->inDocument() && !form()) 1438521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) addToRadioButtonGroup(); 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 1440c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return InsertionShouldCallDidNotifySubtreeInsertions; 14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::removedFrom(ContainerNode* insertionPoint) 14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (insertionPoint->inDocument() && !form()) 14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeFromRadioButtonGroup(); 14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::removedFrom(insertionPoint); 14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!inDocument()); 14495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resetListAttributeTargetObserver(); 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLInputElement::didMoveToNewDocument(Document& oldDocument) 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (hasImageLoader()) 1455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) imageLoader()->elementDidMoveToNewDocument(); 1456926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 14587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (type() == InputTypeNames::radio) 1459d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) oldDocument.formController().radioButtonGroupScope().removeButton(this); 1460926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::didMoveToNewDocument(oldDocument); 14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::removeAllEventListeners() 14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 146609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLTextFormControlElement::removeAllEventListeners(); 146709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_hasTouchEventHandler = false; 14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::recalcWillValidate() const 14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->supportsValidation() && HTMLTextFormControlElement::recalcWillValidate(); 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::requiredAttributeChanged() 14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTextFormControlElement::requiredAttributeChanged(); 147809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 147909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->requiredAttributeChanged(this); 1480c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->requiredAttributeChanged(); 14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::selectColorInColorChooser(const Color& color) 14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (ColorChooserClient* client = m_inputType->colorChooserClient()) 14867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci client->didChooseColor(color); 14877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 14887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 14897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid HTMLInputElement::endColorChooser() 14907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 14917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (ColorChooserClient* client = m_inputType->colorChooserClient()) 14927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci client->didEndChooser(); 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 149453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLElement* HTMLInputElement::list() const 14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return dataList(); 14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLDataListElement* HTMLInputElement::dataList() const 15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_hasNonEmptyList) 15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->shouldRespectListAttribute()) 15065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15088abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Element* element = treeScope().getElementById(fastGetAttribute(listAttr)); 15095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element) 15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1511d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!isHTMLDataListElement(*element)) 15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15148abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return toHTMLDataListElement(element); 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 151709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool HTMLInputElement::hasValidDataListOptions() const 151809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 151909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLDataListElement* dataList = this->dataList(); 152009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!dataList) 152109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 15229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLDataListOptionsCollection> options = dataList->options(); 15239e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) for (unsigned i = 0; HTMLOptionElement* option = options->item(i); ++i) { 152409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (isValidValue(option->value())) 152509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return true; 152609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 152709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 152809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 152909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1530f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)void HTMLInputElement::setListAttributeTargetObserver(PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> newObserver) 1531323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 1532323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (m_listAttributeTargetObserver) 1533323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) m_listAttributeTargetObserver->unregister(); 1534323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) m_listAttributeTargetObserver = newObserver; 1535323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 1536323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::resetListAttributeTargetObserver() 15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inDocument()) 1540323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) setListAttributeTargetObserver(ListAttributeTargetObserver::create(fastGetAttribute(listAttr), this)); 15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1542323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) setListAttributeTargetObserver(nullptr); 15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::listAttributeTargetChanged() 15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1547c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) m_inputTypeView->listAttributeTargetChanged(); 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isSteppable() const 15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isSteppable(); 15535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isTextButton() const 15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isTextButton(); 15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::isEnumeratable() const 15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->isEnumeratable(); 15635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::supportLabels() const 15665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1567bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->isInteractiveContent(); 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::shouldAppearChecked() const 15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return checked() && m_inputType->isCheckable(); 15735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::supportsPlaceholder() const 15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->supportsPlaceholder(); 15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updatePlaceholderText() 15815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1582d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return m_inputTypeView->updatePlaceholderText(); 15835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLInputElement::parseMaxLengthAttribute(const AtomicString& value) 15865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int maxLength; 1588926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!parseHTMLInteger(value, maxLength)) 15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxLength = maximumLength; 15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (maxLength < 0 || maxLength > maximumLength) 15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxLength = maximumLength; 15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int oldMaxLength = m_maxLength; 15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_maxLength = maxLength; 15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (oldMaxLength != maxLength) 15955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateValueIfNeeded(); 159609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsStyleRecalc(SubtreeStyleChange); 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsValidityCheck(); 15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::updateValueIfNeeded() 16015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String newValue = sanitizeValue(m_valueIfDirty); 16035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_valueIfDirty.isNull() || newValue.isNull()); 16045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (newValue != m_valueIfDirty) 16055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(newValue); 16065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String HTMLInputElement::defaultToolTip() const 16095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->defaultToolTip(); 16115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 161353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool HTMLInputElement::shouldAppearIndeterminate() const 16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_inputType->shouldAppearIndeterminate(); 16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1618926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLInputElement::isInRequiredRadioButtonGroup() 16195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 16217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(type() == InputTypeNames::radio); 162209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 162309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return scope->isInRequiredGroup(this); 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciHTMLInputElement* HTMLInputElement::checkedRadioButtonForGroup() 16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (checked()) 16307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this; 163109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 163209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return scope->checkedButtonForGroup(name()); 16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 16345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 163609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)RadioButtonGroupScope* HTMLInputElement::radioButtonGroupScope() const 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove type check. 16397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (type() != InputTypeNames::radio) 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (HTMLFormElement* formElement = form()) 164209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return &formElement->radioButtonGroupScope(); 16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inDocument()) 1644d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return &document().formController().radioButtonGroupScope(); 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void HTMLInputElement::addToRadioButtonGroup() 16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 165009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 165109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->addButton(this); 16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void HTMLInputElement::removeFromRadioButtonGroup() 16555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 165609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (RadioButtonGroupScope* scope = radioButtonGroupScope()) 165709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) scope->removeButton(this); 16585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned HTMLInputElement::height() const 16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->height(); 16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned HTMLInputElement::width() const 16665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inputType->width(); 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setHeight(unsigned height) 16715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 167251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(heightAttr, height); 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void HTMLInputElement::setWidth(unsigned width) 16765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 167751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setUnsignedIntegralAttribute(widthAttr, width); 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1680f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)PassOwnPtrWillBeRawPtr<ListAttributeTargetObserver> ListAttributeTargetObserver::create(const AtomicString& id, HTMLInputElement* element) 16815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1682f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) return adoptPtrWillBeNoop(new ListAttributeTargetObserver(id, element)); 16835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ListAttributeTargetObserver::ListAttributeTargetObserver(const AtomicString& id, HTMLInputElement* element) 16868abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : IdTargetObserver(element->treeScope().idTargetObserverRegistry(), id) 16875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_element(element) 16885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1691f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)void ListAttributeTargetObserver::trace(Visitor* visitor) 1692f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles){ 1693f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) visitor->trace(m_element); 1694f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) IdTargetObserver::trace(visitor); 1695f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)} 1696f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles) 16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ListAttributeTargetObserver::idTargetChanged() 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_element->listAttributeTargetChanged(); 17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 170251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setRangeText(const String& replacement, ExceptionState& exceptionState) 17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 1705a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 17065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 170951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) HTMLTextFormControlElement::setRangeText(replacement, exceptionState); 17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 171251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void HTMLInputElement::setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionState& exceptionState) 17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_inputType->supportsSelectionAPI()) { 1715a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) exceptionState.throwDOMException(InvalidStateError, "The input element's type ('" + m_inputType->formControlType() + "') does not support selection."); 17165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 171951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) HTMLTextFormControlElement::setRangeText(replacement, start, end, selectionMode, exceptionState); 17205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLInputElement::setupDateTimeChooserParameters(DateTimeChooserParameters& parameters) 17235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (!document().view()) 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.type = type(); 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.minimum = minimum(); 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.maximum = maximum(); 1730926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parameters.required = isRequired(); 1731926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled()) 1732926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) parameters.locale = defaultLanguage(); 1733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else { 1734926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) AtomicString computedLocale = computeInheritedLanguage(); 173509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) parameters.locale = computedLocale.isEmpty() ? defaultLanguage() : computedLocale; 1736926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StepRange stepRange = createStepRange(RejectAny); 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (stepRange.hasStep()) { 17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.step = stepRange.step().toDouble(); 17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.stepBase = stepRange.stepBase().toDouble(); 17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.step = 1.0; 17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.stepBase = 0; 17455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17478abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) parameters.anchorRectInRootView = document().view()->contentsToRootView(pixelSnappedBoundingBox()); 17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parameters.currentValue = value(); 174951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) parameters.doubleValue = m_inputType->valueAsDouble(); 1750c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) parameters.isAnchorElementRTL = m_inputType->computedTextDirection() == RTL; 175109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (HTMLDataListElement* dataList = this->dataList()) { 17529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLDataListOptionsCollection> options = dataList->options(); 17539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) for (unsigned i = 0; HTMLOptionElement* option = options->item(i); ++i) { 175409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!isValidValue(option->value())) 175509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) continue; 175609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) DateTimeSuggestion suggestion; 175709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.value = m_inputType->parseToNumber(option->value(), Decimal::nan()).toDouble(); 175809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (std::isnan(suggestion.value)) 175909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) continue; 176009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.localizedValue = localizeValue(option->value()); 176109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) suggestion.label = option->value() == option->label() ? String() : option->label(); 176209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) parameters.suggestions.append(suggestion); 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1768e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochbool HTMLInputElement::supportsInputModeAttribute() const 1769e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 1770e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_inputType->supportsInputModeAttribute(); 1771e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 1772e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 177309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void HTMLInputElement::setShouldRevealPassword(bool value) 177409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 177509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_shouldRevealPassword == value) 177609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 177709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_shouldRevealPassword = value; 177809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) lazyReattachIfAttached(); 177909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 178009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1781bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)bool HTMLInputElement::isInteractiveContent() const 1782bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 1783bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return m_inputType->isInteractiveContent(); 1784bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 1785bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 178609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool HTMLInputElement::supportsAutofocus() const 178709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 178809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_inputType->isInteractiveContent(); 178909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 179009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1791926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 1792926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<RenderStyle> HTMLInputElement::customStyleForRenderer() 1793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1794c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return m_inputTypeView->customStyleForRenderer(originalStyleForRenderer()); 1795926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1796926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 1797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1798323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)bool HTMLInputElement::shouldDispatchFormControlChangeEvent(String& oldValue, String& newValue) 1799323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 1800323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return m_inputType->shouldDispatchFormControlChangeEvent(oldValue, newValue); 1801323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 1802323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 1803c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void HTMLInputElement::didNotifySubtreeInsertionsToDocument() 1804c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 1805c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) listAttributeTargetChanged(); 1806c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 1807c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 18087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciAXObject* HTMLInputElement::popupRootAXObject() 18097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_inputTypeView->popupRootAXObject(); 18117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace 1814