a369f49cb9d51df159149821d75bf9d0094a59fb
[WebKit-https.git] / WebKit / chromium / src / ChromeClientImpl.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef ChromeClientImpl_h
32 #define ChromeClientImpl_h
33
34 #include "ChromeClientChromium.h"
35
36 namespace WebCore {
37 class AccessibilityObject;
38 class HTMLParserQuirks;
39 class PopupContainer;
40 class SecurityOrigin;
41 struct WindowFeatures;
42 }
43
44 namespace WebKit {
45 class WebViewImpl;
46 struct WebCursorInfo;
47 struct WebPopupMenuInfo;
48
49 // Handles window-level notifications from WebCore on behalf of a WebView.
50 class ChromeClientImpl : public WebCore::ChromeClientChromium {
51 public:
52     explicit ChromeClientImpl(WebViewImpl* webView);
53     virtual ~ChromeClientImpl();
54
55     WebViewImpl* webView() const { return m_webView; }
56
57     // ChromeClient methods:
58     virtual void chromeDestroyed();
59     virtual void setWindowRect(const WebCore::FloatRect&);
60     virtual WebCore::FloatRect windowRect();
61     virtual WebCore::FloatRect pageRect();
62     virtual float scaleFactor();
63     virtual void focus();
64     virtual void unfocus();
65     virtual bool canTakeFocus(WebCore::FocusDirection);
66     virtual void takeFocus(WebCore::FocusDirection);
67     virtual void focusedNodeChanged(WebCore::Node*);
68     virtual WebCore::Page* createWindow(
69         WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);
70     virtual void show();
71     virtual bool canRunModal();
72     virtual void runModal();
73     virtual void setToolbarsVisible(bool);
74     virtual bool toolbarsVisible();
75     virtual void setStatusbarVisible(bool);
76     virtual bool statusbarVisible();
77     virtual void setScrollbarsVisible(bool);
78     virtual bool scrollbarsVisible();
79     virtual void setMenubarVisible(bool);
80     virtual bool menubarVisible();
81     virtual void setResizable(bool);
82     virtual void addMessageToConsole(
83         WebCore::MessageSource, WebCore::MessageType, WebCore::MessageLevel,
84         const WebCore::String& message, unsigned lineNumber,
85         const WebCore::String& sourceID);
86     virtual bool canRunBeforeUnloadConfirmPanel();
87     virtual bool runBeforeUnloadConfirmPanel(
88         const WebCore::String& message, WebCore::Frame*);
89     virtual void closeWindowSoon();
90     virtual void runJavaScriptAlert(WebCore::Frame*, const WebCore::String&);
91     virtual bool runJavaScriptConfirm(WebCore::Frame*, const WebCore::String&);
92     virtual bool runJavaScriptPrompt(
93         WebCore::Frame*, const WebCore::String& message,
94         const WebCore::String& defaultValue, WebCore::String& result);
95     virtual void setStatusbarText(const WebCore::String& message);
96     virtual bool shouldInterruptJavaScript();
97     virtual bool tabsToLinks() const;
98     virtual WebCore::IntRect windowResizerRect() const;
99     virtual void invalidateContents(const WebCore::IntRect&, bool);
100     virtual void invalidateWindow(const WebCore::IntRect&, bool);
101     virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
102     virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
103     virtual void scroll(
104         const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll,
105         const WebCore::IntRect& clipRect);
106     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
107     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
108     virtual PlatformPageClient platformPageClient() const { return 0; }
109     virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
110     virtual void scrollRectIntoView(
111         const WebCore::IntRect&, const WebCore::ScrollView*) const { }
112     virtual void scrollbarsModeDidChange() const;
113     virtual void mouseDidMoveOverElement(
114         const WebCore::HitTestResult& result, unsigned modifierFlags);
115     virtual void setToolTip(const WebCore::String& tooltipText, WebCore::TextDirection);
116     virtual void print(WebCore::Frame*);
117     virtual void exceededDatabaseQuota(
118         WebCore::Frame*, const WebCore::String& databaseName);
119 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
120     virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
121 #endif
122 #if ENABLE(NOTIFICATIONS)
123     virtual WebCore::NotificationPresenter* notificationPresenter() const;
124 #endif
125     virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*);
126     virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*) { }
127     virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
128     virtual void iconForFiles(const Vector<WebCore::String>&, PassRefPtr<WebCore::FileChooser>);
129     virtual bool setCursor(WebCore::PlatformCursorHandle) { return false; }
130     virtual void formStateDidChange(const WebCore::Node*);
131     virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
132 #if ENABLE(TOUCH_EVENTS)
133     // FIXME: All touch events are forwarded regardless of whether or not they are needed.
134     virtual void needTouchEvents(bool needTouchEvents) { }
135 #endif
136
137     // ChromeClientChromium methods:
138     virtual void popupOpened(WebCore::PopupContainer* popupContainer,
139                              const WebCore::IntRect& bounds,
140                              bool activatable,
141                              bool handleExternally);
142     virtual void didChangeAccessibilityObjectState(WebCore::AccessibilityObject*);
143
144     // ChromeClientImpl:
145     void setCursor(const WebCursorInfo& cursor);
146     void setCursorForPlugin(const WebCursorInfo& cursor);
147
148 private:
149     void getPopupMenuInfo(WebCore::PopupContainer*, WebPopupMenuInfo*);
150
151     WebViewImpl* m_webView;  // weak pointer
152     bool m_toolbarsVisible;
153     bool m_statusbarVisible;
154     bool m_scrollbarsVisible;
155     bool m_menubarVisible;
156     bool m_resizable;
157     // Set to true if the next SetCursor is to be ignored.
158     bool m_ignoreNextSetCursor;
159 };
160
161 } // namespace WebKit
162
163 #endif