2011-01-17 Yi Shen <yi.4.shen@nokia.com>
[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
39 QT_BEGIN_NAMESPACE
40 class QEventLoop;
41 QT_END_NAMESPACE
42
43 class QWebPage;
44
45 namespace WebCore {
46
47     class FileChooser;
48     class FloatRect;
49     class Page;
50     struct FrameLoadRequest;
51     class QtAbstractWebPopup;
52     struct ViewportArguments;
53 #if ENABLE(VIDEO) && ENABLE(QT_MULTIMEDIA)
54     class FullScreenVideoQt;
55 #endif
56
57     class ChromeClientQt : public ChromeClient
58     {
59     public:
60         ChromeClientQt(QWebPage* webPage);
61         virtual ~ChromeClientQt();
62         virtual void chromeDestroyed();
63
64         virtual void setWindowRect(const FloatRect&);
65         virtual FloatRect windowRect();
66
67         virtual FloatRect pageRect();
68
69         virtual float scaleFactor();
70
71         virtual void focus();
72         virtual void unfocus();
73
74         virtual bool canTakeFocus(FocusDirection);
75         virtual void takeFocus(FocusDirection);
76
77         virtual void focusedNodeChanged(Node*);
78         virtual void focusedFrameChanged(Frame*);
79
80         virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
81         virtual void show();
82
83         virtual bool canRunModal();
84         virtual void runModal();
85
86         virtual void setToolbarsVisible(bool);
87         virtual bool toolbarsVisible();
88
89         virtual void setStatusbarVisible(bool);
90         virtual bool statusbarVisible();
91
92         virtual void setScrollbarsVisible(bool);
93         virtual bool scrollbarsVisible();
94
95         virtual void setMenubarVisible(bool);
96         virtual bool menubarVisible();
97
98         virtual void setResizable(bool);
99
100         virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message,
101                                          unsigned int lineNumber, const String& sourceID);
102
103         virtual bool canRunBeforeUnloadConfirmPanel();
104         virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame);
105
106         virtual void closeWindowSoon();
107
108         virtual void runJavaScriptAlert(Frame*, const String&);
109         virtual bool runJavaScriptConfirm(Frame*, const String&);
110         virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result);
111         virtual bool shouldInterruptJavaScript();
112
113         virtual void setStatusbarText(const String&);
114
115         virtual bool tabsToLinks() const;
116         virtual IntRect windowResizerRect() const;
117
118         virtual void invalidateWindow(const IntRect&, bool);
119         virtual void invalidateContentsAndWindow(const IntRect&, bool);
120         virtual void invalidateContentsForSlowScroll(const IntRect&, bool);
121         virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
122 #if ENABLE(TILED_BACKING_STORE)
123         virtual void delegatedScrollRequested(const IntSize& scrollDelta);
124 #endif
125
126         virtual IntPoint screenToWindow(const IntPoint&) const;
127         virtual IntRect windowToScreen(const IntRect&) const;
128         virtual PlatformPageClient platformPageClient() const;
129         virtual void contentsSizeChanged(Frame*, const IntSize&) const;
130
131         virtual void scrollbarsModeDidChange() const { }
132         virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
133
134         virtual void setToolTip(const String&, TextDirection);
135
136         virtual void print(Frame*);
137 #if ENABLE(DATABASE)
138         virtual void exceededDatabaseQuota(Frame*, const String&);
139 #endif
140 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
141         virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
142         virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*);
143 #endif
144 #if ENABLE(CONTEXT_MENUS)
145     virtual void showContextMenu() { }
146 #endif
147
148 #if ENABLE(NOTIFICATIONS)
149         virtual NotificationPresenter* notificationPresenter() const;
150 #endif
151
152 #if USE(ACCELERATED_COMPOSITING)
153         // see ChromeClient.h
154         // this is a hook for WebCore to tell us what we need to do with the GraphicsLayers
155         virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
156         virtual void setNeedsOneShotDrawingSynchronization();
157         virtual void scheduleCompositingLayerSync();
158         virtual CompositingTriggerFlags allowedCompositingTriggers() const;
159 #endif
160
161 #if ENABLE(TILED_BACKING_STORE)
162         virtual IntRect visibleRectForTiledBackingStore() const;
163 #endif
164
165 #if ENABLE(TOUCH_EVENTS)
166         virtual void needTouchEvents(bool) { }
167 #endif
168  
169 #if ENABLE(VIDEO) && ENABLE(QT_MULTIMEDIA)
170         virtual bool supportsFullscreenForNode(const Node*);
171         virtual void enterFullscreenForNode(Node*);
172         virtual void exitFullscreenForNode(Node*);
173         virtual bool requiresFullscreenForVideoPlayback();
174         FullScreenVideoQt* fullScreenVideo();
175 #endif
176
177         virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
178         virtual void chooseIconForFiles(const Vector<String>&, FileChooser*);
179
180         virtual void formStateDidChange(const Node*) { }
181
182         virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
183
184         virtual void setCursor(const Cursor&);
185
186         virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
187
188         virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*);
189         virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*);
190
191         virtual bool selectItemWritingDirectionIsNatural();
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