Reviewed by Darin Adler.
[WebKit-https.git] / Source / WebKit / win / WebCoreSupport / WebChromeClient.h
1 /*
2  * Copyright (C) 2006, 2007, 2008, 2009 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 COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #include <WebCore/ChromeClient.h>
28 #include <WebCore/COMPtr.h>
29 #include <WebCore/GraphicsContext.h>
30 #include <WebCore/FocusDirection.h>
31 #include <WebCore/ScrollTypes.h>
32 #include <WebCore/WebCoreKeyboardUIMode.h>
33 #include <wtf/Forward.h>
34 #include <wtf/PassRefPtr.h>
35
36 class WebView;
37 class WebDesktopNotificationsDelegate;
38
39 interface IWebUIDelegate;
40
41 class WebChromeClient : public WebCore::ChromeClient {
42 public:
43     WebChromeClient(WebView*);
44
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     virtual void focusedFrameChanged(WebCore::Frame*);
62
63     virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&, const WebCore::NavigationAction&);
64     virtual void show();
65
66     virtual bool canRunModal();
67     virtual void runModal();
68
69     virtual void setToolbarsVisible(bool);
70     virtual bool toolbarsVisible();
71     
72     virtual void setStatusbarVisible(bool);
73     virtual bool statusbarVisible();
74     
75     virtual void setScrollbarsVisible(bool);
76     virtual bool scrollbarsVisible();
77     
78     virtual void setMenubarVisible(bool);
79     virtual bool menubarVisible();
80
81     virtual void setResizable(bool);
82
83     virtual void addMessageToConsole(WebCore::MessageSource source, WebCore::MessageType type, WebCore::MessageLevel level, const WTF::String& message, unsigned line, const WTF::String& url);
84
85     virtual bool canRunBeforeUnloadConfirmPanel();
86     virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame);
87
88     virtual void closeWindowSoon();
89
90     virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&);
91     virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&);
92     virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result);
93     virtual void setStatusbarText(const WTF::String&);
94     virtual bool shouldInterruptJavaScript();
95
96     virtual WebCore::KeyboardUIMode keyboardUIMode();
97     virtual WebCore::IntRect windowResizerRect() const;
98
99     virtual void invalidateWindow(const WebCore::IntRect&, bool);
100     virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
101     virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
102     virtual void scroll(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, const WebCore::IntRect& clipRect);
103
104     virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint& p) const;
105     virtual WebCore::IntRect windowToScreen(const WebCore::IntRect& r) const;
106     virtual PlatformPageClient platformPageClient() const;
107     virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
108
109     virtual void scrollbarsModeDidChange() const { }
110     virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
111     virtual bool shouldMissingPluginMessageBeButton() const;
112     virtual void missingPluginButtonClicked(WebCore::Element*) const;
113
114     virtual void setToolTip(const WTF::String&, WebCore::TextDirection);
115
116     virtual void print(WebCore::Frame*);
117
118 #if ENABLE(DATABASE)
119     virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String&);
120 #endif
121
122 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
123     virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
124     virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*);
125 #endif
126
127 #if ENABLE(CONTEXT_MENUS)
128     virtual void showContextMenu() { }
129 #endif
130
131     virtual void populateVisitedLinks();
132
133     virtual bool paintCustomScrollbar(WebCore::GraphicsContext*, const WebCore::FloatRect&, WebCore::ScrollbarControlSize, 
134                                         WebCore::ScrollbarControlState, WebCore::ScrollbarPart pressedPart, bool vertical,
135                                         float value, float proportion, WebCore::ScrollbarControlPartMask);
136     virtual bool paintCustomScrollCorner(WebCore::GraphicsContext*, const WebCore::FloatRect&);
137
138     virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
139     virtual void chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*);
140
141     virtual void setCursor(const WebCore::Cursor&);
142     virtual void setLastSetCursorToCurrentCursor();
143
144     WebView* webView() const { return m_webView; }
145
146     virtual void formStateDidChange(const WebCore::Node*) { }
147
148 #if USE(ACCELERATED_COMPOSITING)
149         // Pass 0 as the GraphicsLayer to detatch the root layer.
150         virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
151         // Sets a flag to specify that the next time content is drawn to the window,
152         // the changes appear on the screen in synchrony with updates to GraphicsLayers.
153         virtual void setNeedsOneShotDrawingSynchronization() { }
154         // Sets a flag to specify that the view needs to be updated, so we need
155         // to do an eager layout before the drawing.
156         virtual void scheduleCompositingLayerSync();
157 #endif
158
159     virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const {}
160
161     // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373
162     // For client-based geolocation, these two methods have been moved to WebGeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061
163     virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*) { }
164     virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*) { }
165
166 #if ENABLE(VIDEO)
167     virtual bool supportsFullscreenForNode(const WebCore::Node*);
168     virtual void enterFullscreenForNode(WebCore::Node*);
169     virtual void exitFullscreenForNode(WebCore::Node*);
170 #endif
171
172 #if ENABLE(NOTIFICATIONS)
173     virtual WebCore::NotificationPresenter* notificationPresenter() const { return reinterpret_cast<WebCore::NotificationPresenter*>(m_notificationsDelegate.get()); }
174 #endif
175
176     virtual bool selectItemWritingDirectionIsNatural();
177     virtual bool selectItemAlignmentFollowsMenuWritingDirection();
178     virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
179     virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
180
181 private:
182     COMPtr<IWebUIDelegate> uiDelegate();
183
184     WebView* m_webView;
185
186 #if ENABLE(NOTIFICATIONS)
187     OwnPtr<WebDesktopNotificationsDelegate> m_notificationsDelegate;
188 #endif
189 };