1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebInputElement_h
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebInputElement_h
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WebFormControlElement.h"
35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if WEBKIT_IMPLEMENTATION
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { class HTMLInputElement; }
38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Provides readonly access to some properties of a DOM input element node.
43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    class WebInputElement : public WebFormControlElement {
44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    public:
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebInputElement() : WebFormControlElement() { }
46cad810f21b803229eb11403f9209855525a25d57Steve Block        WebInputElement(const WebInputElement& element) : WebFormControlElement(element) { }
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
48cad810f21b803229eb11403f9209855525a25d57Steve Block        WebInputElement& operator=(const WebInputElement& element)
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        {
50cad810f21b803229eb11403f9209855525a25d57Steve Block            WebFormControlElement::assign(element);
51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            return *this;
52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        }
53cad810f21b803229eb11403f9209855525a25d57Steve Block        void assign(const WebInputElement& element) { WebFormControlElement::assign(element); }
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
5568513a70bcd92384395513322f1b801e7bf9c729Steve Block        // This returns true for all of textfield-looking types such as text,
5668513a70bcd92384395513322f1b801e7bf9c729Steve Block        // password, search, email, url, and number.
5768513a70bcd92384395513322f1b801e7bf9c729Steve Block        WEBKIT_API bool isTextField() const;
5868513a70bcd92384395513322f1b801e7bf9c729Steve Block        // This returns true only for type=text.
5968513a70bcd92384395513322f1b801e7bf9c729Steve Block        WEBKIT_API bool isText() const;
6068513a70bcd92384395513322f1b801e7bf9c729Steve Block        WEBKIT_API bool isPasswordField() const;
6168513a70bcd92384395513322f1b801e7bf9c729Steve Block        WEBKIT_API bool isImageButton() const;
62d0825bca7fe65beaee391d30da42e937db621564Steve Block        WEBKIT_API bool autoComplete() const;
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WEBKIT_API int maxLength() const;
648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        WEBKIT_API bool isActivatedSubmit() const;
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WEBKIT_API void setActivatedSubmit(bool);
666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        WEBKIT_API int size() const;
6728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        WEBKIT_API void setValue(const WebString&, bool sendChangeEvent = false);
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WEBKIT_API WebString value() const;
69e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        WEBKIT_API void setSuggestedValue(const WebString&);
70e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        WEBKIT_API WebString suggestedValue() const;
71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        WEBKIT_API void setPlaceholder(const WebString&);
72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        WEBKIT_API WebString placeholder() const;
73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        WEBKIT_API bool isAutofilled() const;
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WEBKIT_API void setAutofilled(bool);
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WEBKIT_API void setSelectionRange(int, int);
7628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        WEBKIT_API int selectionStart() const;
7728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        WEBKIT_API int selectionEnd() const;
785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        WEBKIT_API bool isValidValue(const WebString&) const;
7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        WEBKIT_API bool isChecked() const;
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        // Exposes the default value of the maxLength attribute.
822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        WEBKIT_API static int defaultMaxLength();
834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if WEBKIT_IMPLEMENTATION
85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebInputElement(const WTF::PassRefPtr<WebCore::HTMLInputElement>&);
86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebInputElement& operator=(const WTF::PassRefPtr<WebCore::HTMLInputElement>&);
87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        operator WTF::PassRefPtr<WebCore::HTMLInputElement>() const;
88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    };
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WEBKIT_API WebInputElement* toWebInputElement(WebElement*);
922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    inline const WebInputElement* toWebInputElement(const WebElement* element)
942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    {
952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return toWebInputElement(const_cast<WebElement*>(element));
962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
101