2010-08-12 Maciej Stachowiak <mjs@apple.com>
[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     WebPage* page() const { return m_page; }
45 private:
46     virtual void chromeDestroyed();
47     
48     virtual void setWindowRect(const WebCore::FloatRect&);
49     virtual WebCore::FloatRect windowRect();
50     
51     virtual WebCore::FloatRect pageRect();
52     
53     virtual float scaleFactor();
54     
55     virtual void focus();
56     virtual void unfocus();
57     
58     virtual bool canTakeFocus(WebCore::FocusDirection);
59     virtual void takeFocus(WebCore::FocusDirection);
60
61     virtual void focusedNodeChanged(WebCore::Node*);
62
63     // The Frame pointer provides the ChromeClient with context about which
64     // Frame wants to create the new Page.  Also, the newly created window
65     // should not be shown to the user until the ChromeClient of the newly
66     // created Page has its show method called.
67     virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);
68     virtual void show();
69     
70     virtual bool canRunModal();
71     virtual void runModal();
72     
73     virtual void setToolbarsVisible(bool);
74     virtual bool toolbarsVisible();
75     
76     virtual void setStatusbarVisible(bool);
77     virtual bool statusbarVisible();
78     
79     virtual void setScrollbarsVisible(bool);
80     virtual bool scrollbarsVisible();
81     
82     virtual void setMenubarVisible(bool);
83     virtual bool menubarVisible();
84     
85     virtual void setResizable(bool);
86     
87     virtual void addMessageToConsole(WebCore::MessageSource, WebCore::MessageType, WebCore::MessageLevel, const WTF::String& message, unsigned int lineNumber, const WTF::String& sourceID);
88     
89     virtual bool canRunBeforeUnloadConfirmPanel();
90     virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame);
91     
92     virtual void closeWindowSoon();
93     
94     virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&);
95     virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&);
96     virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result);
97     virtual void setStatusbarText(const WTF::String&);
98     virtual bool shouldInterruptJavaScript();
99     virtual bool tabsToLinks() const;
100     
101     virtual WebCore::IntRect windowResizerRect() const;
102     
103     // Methods used by HostWindow.
104     virtual void invalidateWindow(const WebCore::IntRect&, bool);
105     virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
106     virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
107     virtual void scroll(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, const WebCore::IntRect& clipRect);
108     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
109     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
110     virtual PlatformPageClient platformPageClient() const;
111     virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
112     virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; // Currently only Mac has a non empty implementation.
113     // End methods used by HostWindow.
114
115     virtual void scrollbarsModeDidChange() const;
116     virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
117     
118     virtual void setToolTip(const WTF::String&, WebCore::TextDirection);
119     
120     virtual void print(WebCore::Frame*);
121     
122 #if ENABLE(DATABASE)
123     virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String& databaseName);
124 #endif
125
126 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
127     virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
128     virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*);
129 #endif
130
131 #if ENABLE(DASHBOARD_SUPPORT)
132     virtual void dashboardRegionsChanged();
133 #endif
134
135     virtual void populateVisitedLinks();
136     
137     virtual WebCore::FloatRect customHighlightRect(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& lineRect);
138     virtual void paintCustomHighlight(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& boxRect, const WebCore::FloatRect& lineRect,
139                                       bool behindText, bool entireLine);
140     
141     virtual bool shouldReplaceWithGeneratedFileForUpload(const WTF::String& path, WTF::String& generatedFilename);
142     virtual WTF::String generateReplacementFile(const WTF::String& path);
143     
144     virtual bool paintCustomScrollbar(WebCore::GraphicsContext*, const WebCore::FloatRect&, WebCore::ScrollbarControlSize, 
145                                       WebCore::ScrollbarControlState, WebCore::ScrollbarPart pressedPart, bool vertical,
146                                       float value, float proportion, WebCore::ScrollbarControlPartMask);
147     virtual bool paintCustomScrollCorner(WebCore::GraphicsContext*, const WebCore::FloatRect&);
148     
149     // This is an asynchronous call. The ChromeClient can display UI asking the user for permission
150     // to use Geolococation. The ChromeClient must call Geolocation::setShouldClearCache() appropriately.
151     virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*);
152     virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*);
153     
154     virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
155     virtual void chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*);
156
157     virtual void setCursor(const WebCore::Cursor&);
158     
159     // Notification that the given form element has changed. This function
160     // will be called frequently, so handling should be very fast.
161     virtual void formStateDidChange(const WebCore::Node*);
162     
163     virtual void formDidFocus(const WebCore::Node*);
164     virtual void formDidBlur(const WebCore::Node*);
165     
166     virtual PassOwnPtr<WebCore::HTMLParserQuirks> createHTMLParserQuirks();
167
168     virtual bool selectItemWritingDirectionIsNatural();
169     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
170     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
171
172 #if USE(ACCELERATED_COMPOSITING)
173     virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
174     virtual void setNeedsOneShotDrawingSynchronization();
175     virtual void scheduleCompositingLayerSync();
176 #endif
177
178 #if ENABLE(NOTIFICATIONS)
179     virtual WebCore::NotificationPresenter* notificationPresenter() const;
180 #endif
181
182 #if ENABLE(TOUCH_EVENTS)
183     virtual void needTouchEvents(bool);
184 #endif
185
186 #if PLATFORM(WIN)
187     virtual void setLastSetCursorToCurrentCursor();
188 #endif
189
190     WTF::String m_cachedToolTip;
191     WebPage* m_page;
192 };
193
194 } // namespace WebKit
195
196 #endif // WebChromeClient_h