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