cc7a35c4a6f898e6d54dc1664ba28546935bc6cb
[WebKit.git] / WebKit2 / WebProcess / WebCoreSupport / WebChromeClient.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef WebChromeClient_h
28 #define WebChromeClient_h
29
30 #include <WebCore/ChromeClient.h>
31 #include <WebCore/PlatformString.h>
32
33 namespace WebKit {
34
35 class WebPage;
36
37 class WebChromeClient : public WebCore::ChromeClient {
38 public:
39     WebChromeClient(WebPage* page)
40         : m_page(page)
41     {
42     }
43     
44 private:
45     virtual void chromeDestroyed();
46     
47     virtual void setWindowRect(const WebCore::FloatRect&);
48     virtual WebCore::FloatRect windowRect();
49     
50     virtual WebCore::FloatRect pageRect();
51     
52     virtual float scaleFactor();
53     
54     virtual void focus();
55     virtual void unfocus();
56     
57     virtual bool canTakeFocus(WebCore::FocusDirection);
58     virtual void takeFocus(WebCore::FocusDirection);
59
60     virtual void focusedNodeChanged(WebCore::Node*);
61
62     // The Frame pointer provides the ChromeClient with context about which
63     // Frame wants to create the new Page.  Also, the newly created window
64     // should not be shown to the user until the ChromeClient of the newly
65     // created Page has its show method called.
66     virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);
67     virtual void show();
68     
69     virtual bool canRunModal();
70     virtual void runModal();
71     
72     virtual void setToolbarsVisible(bool);
73     virtual bool toolbarsVisible();
74     
75     virtual void setStatusbarVisible(bool);
76     virtual bool statusbarVisible();
77     
78     virtual void setScrollbarsVisible(bool);
79     virtual bool scrollbarsVisible();
80     
81     virtual void setMenubarVisible(bool);
82     virtual bool menubarVisible();
83     
84     virtual void setResizable(bool);
85     
86     virtual void addMessageToConsole(WebCore::MessageSource, WebCore::MessageType, WebCore::MessageLevel, const WTF::String& message, unsigned int lineNumber, const WTF::String& sourceID);
87     
88     virtual bool canRunBeforeUnloadConfirmPanel();
89     virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame);
90     
91     virtual void closeWindowSoon();
92     
93     virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&);
94     virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&);
95     virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result);
96     virtual void setStatusbarText(const WTF::String&);
97     virtual bool shouldInterruptJavaScript();
98     virtual bool tabsToLinks() const;
99     
100     virtual WebCore::IntRect windowResizerRect() const;
101     
102     // Methods used by HostWindow.
103     virtual void invalidateWindow(const WebCore::IntRect&, bool);
104     virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
105     virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
106     virtual void scroll(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, const WebCore::IntRect& clipRect);
107     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
108     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
109     virtual PlatformPageClient platformPageClient() const;
110     virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
111     virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; // Currently only Mac has a non empty implementation.
112     // End methods used by HostWindow.
113
114     virtual void scrollbarsModeDidChange() const;
115     virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
116     
117     virtual void setToolTip(const WTF::String&, WebCore::TextDirection);
118     
119     virtual void print(WebCore::Frame*);
120     
121 #if ENABLE(DATABASE)
122     virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String& databaseName);
123 #endif
124
125 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
126     virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
127     virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*);
128 #endif
129
130 #if ENABLE(DASHBOARD_SUPPORT)
131     virtual void dashboardRegionsChanged();
132 #endif
133
134     virtual void populateVisitedLinks();
135     
136     virtual WebCore::FloatRect customHighlightRect(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& lineRect);
137     virtual void paintCustomHighlight(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& boxRect, const WebCore::FloatRect& lineRect,
138                                       bool behindText, bool entireLine);
139     
140     virtual bool shouldReplaceWithGeneratedFileForUpload(const WTF::String& path, WTF::String& generatedFilename);
141     virtual WTF::String generateReplacementFile(const WTF::String& path);
142     
143     virtual bool paintCustomScrollbar(WebCore::GraphicsContext*, const WebCore::FloatRect&, WebCore::ScrollbarControlSize, 
144                                       WebCore::ScrollbarControlState, WebCore::ScrollbarPart pressedPart, bool vertical,
145                                       float value, float proportion, WebCore::ScrollbarControlPartMask);
146     virtual bool paintCustomScrollCorner(WebCore::GraphicsContext*, const WebCore::FloatRect&);
147     
148     // This is an asynchronous call. The ChromeClient can display UI asking the user for permission
149     // to use Geolococation. The ChromeClient must call Geolocation::setShouldClearCache() appropriately.
150     virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*);
151     virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*);
152     
153     virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
154     virtual void chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*);
155
156     virtual void setCursor(const WebCore::Cursor&);
157     
158     // Notification that the given form element has changed. This function
159     // will be called frequently, so handling should be very fast.
160     virtual void formStateDidChange(const WebCore::Node*);
161     
162     virtual void formDidFocus(const WebCore::Node*);
163     virtual void formDidBlur(const WebCore::Node*);
164     
165     virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks();
166
167     virtual bool selectItemWritingDirectionIsNatural();
168     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
169     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
170
171 #if USE(ACCELERATED_COMPOSITING)
172     virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
173     virtual void setNeedsOneShotDrawingSynchronization();
174     virtual void scheduleCompositingLayerSync();
175 #endif
176
177 #if ENABLE(NOTIFICATIONS)
178     virtual WebCore::NotificationPresenter* notificationPresenter() const;
179 #endif
180
181 #if ENABLE(TOUCH_EVENTS)
182     virtual void needTouchEvents(bool);
183 #endif
184
185 #if PLATFORM(WIN)
186     virtual void setLastSetCursorToCurrentCursor();
187 #endif
188
189     WTF::String m_cachedToolTip;
190     WebPage* m_page;
191 };
192
193 } // namespace WebKit
194
195 #endif // WebChromeClient_h