Reviewed by Darin Adler.
[WebKit-https.git] / Source / WebKit / qt / WebCoreSupport / ChromeClientQt.h
1 /*
2  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4  *
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef ChromeClientQt_H
30 #define ChromeClientQt_H
31
32 #include "ChromeClient.h"
33 #include "FloatRect.h"
34 #include "RefCounted.h"
35 #include "KURL.h"
36 #include "PlatformString.h"
37 #include "QtPlatformPlugin.h"
38 #include "WebCoreKeyboardUIMode.h"
39
40 QT_BEGIN_NAMESPACE
41 class QEventLoop;
42 QT_END_NAMESPACE
43
44 class QWebPage;
45
46 namespace WebCore {
47
48     class FileChooser;
49     class FloatRect;
50     class Page;
51     struct FrameLoadRequest;
52     class QtAbstractWebPopup;
53     struct ViewportArguments;
54 #if ENABLE(VIDEO) && ENABLE(QT_MULTIMEDIA)
55     class FullScreenVideoQt;
56 #endif
57
58     class ChromeClientQt : public ChromeClient
59     {
60     public:
61         ChromeClientQt(QWebPage* webPage);
62         virtual ~ChromeClientQt();
63         virtual void chromeDestroyed();
64
65         virtual void setWindowRect(const FloatRect&);
66         virtual FloatRect windowRect();
67
68         virtual FloatRect pageRect();
69
70         virtual float scaleFactor();
71
72         virtual void focus();
73         virtual void unfocus();
74
75         virtual bool canTakeFocus(FocusDirection);
76         virtual void takeFocus(FocusDirection);
77
78         virtual void focusedNodeChanged(Node*);
79         virtual void focusedFrameChanged(Frame*);
80
81         virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
82         virtual void show();
83
84         virtual bool canRunModal();
85         virtual void runModal();
86
87         virtual void setToolbarsVisible(bool);
88         virtual bool toolbarsVisible();
89
90         virtual void setStatusbarVisible(bool);
91         virtual bool statusbarVisible();
92
93         virtual void setScrollbarsVisible(bool);
94         virtual bool scrollbarsVisible();
95
96         virtual void setMenubarVisible(bool);
97         virtual bool menubarVisible();
98
99         virtual void setResizable(bool);
100
101         virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message,
102                                          unsigned int lineNumber, const String& sourceID);
103
104         virtual bool canRunBeforeUnloadConfirmPanel();
105         virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame);
106
107         virtual void closeWindowSoon();
108
109         virtual void runJavaScriptAlert(Frame*, const String&);
110         virtual bool runJavaScriptConfirm(Frame*, const String&);
111         virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result);
112         virtual bool shouldInterruptJavaScript();
113
114         virtual void setStatusbarText(const String&);
115
116         virtual WebCore::KeyboardUIMode keyboardUIMode();
117         virtual IntRect windowResizerRect() const;
118
119         virtual void invalidateWindow(const IntRect&, bool);
120         virtual void invalidateContentsAndWindow(const IntRect&, bool);
121         virtual void invalidateContentsForSlowScroll(const IntRect&, bool);
122         virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
123 #if ENABLE(TILED_BACKING_STORE)
124         virtual void delegatedScrollRequested(const IntSize& scrollDelta);
125 #endif
126
127         virtual IntPoint screenToWindow(const IntPoint&) const;
128         virtual IntRect windowToScreen(const IntRect&) const;
129         virtual PlatformPageClient platformPageClient() const;
130         virtual void contentsSizeChanged(Frame*, const IntSize&) const;
131
132         virtual void scrollbarsModeDidChange() const { }
133         virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
134
135         virtual void setToolTip(const String&, TextDirection);
136
137         virtual void print(Frame*);
138 #if ENABLE(DATABASE)
139         virtual void exceededDatabaseQuota(Frame*, const String&);
140 #endif
141 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
142         virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
143         virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*);
144 #endif
145 #if ENABLE(CONTEXT_MENUS)
146     virtual void showContextMenu() { }
147 #endif
148
149 #if ENABLE(NOTIFICATIONS)
150         virtual NotificationPresenter* notificationPresenter() const;
151 #endif
152
153 #if USE(ACCELERATED_COMPOSITING)
154         // see ChromeClient.h
155         // this is a hook for WebCore to tell us what we need to do with the GraphicsLayers
156         virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
157         virtual void setNeedsOneShotDrawingSynchronization();
158         virtual void scheduleCompositingLayerSync();
159         virtual CompositingTriggerFlags allowedCompositingTriggers() const;
160 #endif
161
162 #if ENABLE(TILED_BACKING_STORE)
163         virtual IntRect visibleRectForTiledBackingStore() const;
164 #endif
165
166 #if ENABLE(TOUCH_EVENTS)
167         virtual void needTouchEvents(bool) { }
168 #endif
169  
170 #if ENABLE(VIDEO) && ENABLE(QT_MULTIMEDIA)
171         virtual bool supportsFullscreenForNode(const Node*);
172         virtual void enterFullscreenForNode(Node*);
173         virtual void exitFullscreenForNode(Node*);
174         virtual bool requiresFullscreenForVideoPlayback();
175         FullScreenVideoQt* fullScreenVideo();
176 #endif
177
178         virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
179         virtual void chooseIconForFiles(const Vector<String>&, FileChooser*);
180
181         virtual void formStateDidChange(const Node*) { }
182
183         virtual void setCursor(const Cursor&);
184
185         virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const { }
186
187         virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) { }
188         virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) { }
189
190         virtual bool selectItemWritingDirectionIsNatural();
191         virtual bool selectItemAlignmentFollowsMenuWritingDirection();
192         virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
193         virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
194         virtual void populateVisitedLinks();
195
196         QWebSelectMethod* createSelectPopup() const;
197
198         virtual void dispatchViewportDataDidChange(const ViewportArguments&) const;
199
200         QWebPage* m_webPage;
201         WebCore::KURL lastHoverURL;
202         WTF::String lastHoverTitle;
203         WTF::String lastHoverContent;
204
205         bool toolBarsVisible;
206         bool statusBarVisible;
207         bool menuBarVisible;
208         QEventLoop* m_eventLoop;
209
210 #if ENABLE(VIDEO) && ENABLE(QT_MULTIMEDIA)
211         FullScreenVideoQt* m_fullScreenVideo;
212 #endif
213
214         static bool dumpVisitedLinksCallbacks;
215
216         mutable QtPlatformPlugin m_platformPlugin;
217     };
218 }
219
220 #endif