1c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/* 2c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 3c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved. 4c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2012 Samsung Electronics. All rights reserved. 5c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 6c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 7c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * modification, are permitted provided that the following conditions are 8c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * met: 9c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 10c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 11c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 12c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 13c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 14c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * in the documentation and/or other materials provided with the 15c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * distribution. 16c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 17c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 18c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * this software without specific prior written permission. 19c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 20c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */ 32c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 33c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#ifndef InputTypeView_h 34c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#define InputTypeView_h 35c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 36c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/page/FocusDirection.h" 37c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/FastAllocBase.h" 38c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/Forward.h" 39c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/Noncopyable.h" 40c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/RefCounted.h" 41c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/RefPtr.h" 42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 43c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)namespace WebCore { 44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 45c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class BeforeTextInsertedEvent; 46c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class Element; 47c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class Event; 48c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class HTMLFormElement; 49c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class HTMLInputElement; 50c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class KeyboardEvent; 51c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class MouseEvent; 52c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class RenderObject; 53c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class RenderStyle; 54c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class TouchEvent; 55c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 56c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)struct ClickHandlingState { 57c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 58c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 59c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)public: 60c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool checked; 61c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool indeterminate; 62c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) RefPtr<HTMLInputElement> checkedRadioButton; 63c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}; 64c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 65c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// An InputTypeView object represents the UI-specific part of an 66c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// HTMLInputElement. Do not expose instances of InputTypeView and classes 67c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// derived from it to classes other than HTMLInputElement. 68c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class InputTypeView : public RefCounted<InputTypeView> { 69c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(InputTypeView); 70c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 71c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 72c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)public: 73bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) static PassRefPtr<InputTypeView> create(HTMLInputElement&); 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual ~InputTypeView(); 75c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 76c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual bool sizeShouldIncludeDecoration(int defaultSize, int& preferredSize) const; 77c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleClickEvent(MouseEvent*); 78c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleMouseDownEvent(MouseEvent*); 79c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual PassOwnPtr<ClickHandlingState> willDispatchClick(); 80c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void didDispatchClick(Event*, const ClickHandlingState&); 81c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleKeydownEvent(KeyboardEvent*); 82c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleKeypressEvent(KeyboardEvent*); 83c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleKeyupEvent(KeyboardEvent*); 84c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleBeforeTextInsertedEvent(BeforeTextInsertedEvent*); 85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleTouchEvent(TouchEvent*); 86c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void forwardEvent(Event*); 87c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual bool shouldSubmitImplicitly(Event*); 88c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual PassRefPtr<HTMLFormElement> formForSubmission() const; 89c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual bool hasCustomFocusLogic() const; 90c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleFocusEvent(Element* oldFocusedElement, FocusDirection); 91c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void handleBlurEvent(); 92c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void subtreeHasChanged(); 93c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual bool hasTouchEventHandler() const; 94c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void blur(); 95c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual RenderObject* createRenderer(RenderStyle*) const; 96c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual PassRefPtr<RenderStyle> customStyleForRenderer(PassRefPtr<RenderStyle>); 9751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void startResourceLoading(); 9851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void closePopupView(); 9951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void createShadowSubtree(); 10051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void destroyShadowSubtree(); 101c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void minOrMaxAttributeChanged(); 102c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void stepAttributeChanged(); 103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void altAttributeChanged(); 104c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void srcAttributeChanged(); 10551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void updateView(); 106c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void attributeChanged(); 107c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void multipleAttributeChanged(); 108c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void disabledAttributeChanged(); 109c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void readonlyAttributeChanged(); 110c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void requiredAttributeChanged(); 111c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void valueAttributeChanged(); 112c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void listAttributeTargetChanged(); 113c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void updateClearButtonVisibility(); 114c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 115c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)protected: 116bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) InputTypeView(HTMLInputElement& element) : m_element(element) { } 117bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) HTMLInputElement& element() const { return m_element; } 118c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 119c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)private: 120bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // Not a RefPtr because the HTMLInputElement object owns this InputTypeView 121c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // object. 122bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) HTMLInputElement& m_element; 123c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}; 124c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 125c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} // namespace WebCore 126c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#endif 127