e4239e34a6a8b5102436c8e14d4b51c4c5d5724d
[WebKit-https.git] / Source / WebKit / gtk / WebCoreSupport / ChromeClientGtk.h
1 /*
2  * Copyright (C) 2007 Holger Hans Peter Freyther
3  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #ifndef ChromeClientGtk_h
22 #define ChromeClientGtk_h
23
24 #include "ChromeClient.h"
25 #include "GtkAdjustmentWatcher.h"
26 #include "IntRect.h"
27 #include "IntSize.h"
28 #include "KURL.h"
29 #include "PopupMenu.h"
30 #include "Region.h"
31 #include "SearchPopupMenu.h"
32 #include "Timer.h"
33
34 using namespace WebCore;
35 typedef struct _WebKitWebView WebKitWebView;
36
37 namespace WebCore {
38 class PopupMenuClient;
39 }
40
41 namespace WebKit {
42
43     class ChromeClient : public WebCore::ChromeClient {
44     public:
45         ChromeClient(WebKitWebView*);
46         virtual void* webView() const { return m_webView; }
47         GtkAdjustmentWatcher* adjustmentWatcher() { return &m_adjustmentWatcher; }
48
49         virtual void chromeDestroyed();
50
51         virtual void setWindowRect(const FloatRect&);
52         virtual FloatRect windowRect();
53
54         virtual FloatRect pageRect();
55
56         virtual void focus();
57         virtual void unfocus();
58
59         virtual bool canTakeFocus(FocusDirection);
60         virtual void takeFocus(FocusDirection);
61
62         virtual void focusedNodeChanged(Node*);
63         virtual void focusedFrameChanged(Frame*);
64
65         virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
66         virtual void show();
67
68         virtual bool canRunModal();
69         virtual void runModal();
70
71         virtual void setToolbarsVisible(bool);
72         virtual bool toolbarsVisible();
73
74         virtual void setStatusbarVisible(bool);
75         virtual bool statusbarVisible();
76
77         virtual void setScrollbarsVisible(bool);
78         virtual bool scrollbarsVisible();
79
80         virtual void setMenubarVisible(bool);
81         virtual bool menubarVisible();
82
83         virtual void setResizable(bool);
84
85         virtual void addMessageToConsole(MessageSource source, MessageType type,
86                                          MessageLevel level, const WTF::String& message,
87                                          unsigned int lineNumber, const WTF::String& sourceID);
88
89         virtual bool canRunBeforeUnloadConfirmPanel();
90         virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, Frame* frame);
91
92         virtual void closeWindowSoon();
93
94         virtual void runJavaScriptAlert(Frame*, const WTF::String&);
95         virtual bool runJavaScriptConfirm(Frame*, const WTF::String&);
96         virtual bool runJavaScriptPrompt(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 KeyboardUIMode keyboardUIMode();
100
101         virtual IntRect windowResizerRect() const;
102 #if ENABLE(REGISTER_PROTOCOL_HANDLER) 
103         virtual void registerProtocolHandler(const WTF::String&, const WTF::String&, const WTF::String&, const WTF::String&); 
104 #endif 
105         virtual void invalidateRootView(const IntRect&, bool);
106         virtual void invalidateContentsAndRootView(const IntRect&, bool);
107         virtual void invalidateContentsForSlowScroll(const IntRect&, bool);
108         virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
109
110         virtual IntPoint screenToRootView(const IntPoint&) const;
111         virtual IntRect rootViewToScreen(const IntRect&) const;
112         virtual PlatformPageClient platformPageClient() const;
113         virtual void contentsSizeChanged(Frame*, const IntSize&) const;
114
115         virtual void scrollbarsModeDidChange() const;
116         virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
117
118         virtual void setToolTip(const WTF::String&, TextDirection);
119
120         virtual void dispatchViewportPropertiesDidChange(const ViewportArguments&) const;
121
122         virtual void print(Frame*);
123 #if ENABLE(SQL_DATABASE)
124         virtual void exceededDatabaseQuota(Frame*, const WTF::String&);
125 #endif
126         virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
127         virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t totalSpaceNeeded);
128 #if ENABLE(CONTEXT_MENUS)
129         virtual void showContextMenu() { }
130 #endif
131         virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
132         virtual void loadIconForFiles(const Vector<WTF::String>&, FileIconLoader*);
133
134         virtual void formStateDidChange(const Node*) { }
135
136         virtual void setCursor(const Cursor&);
137         virtual void setCursorHiddenUntilMouseMoves(bool);
138
139         virtual void scrollRectIntoView(const IntRect&) const { }
140         virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*);
141         virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*);
142
143         virtual bool selectItemWritingDirectionIsNatural();
144         virtual bool selectItemAlignmentFollowsMenuWritingDirection();
145         virtual bool hasOpenedPopup() const;
146         virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const;
147         virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const;
148 #if ENABLE(VIDEO)
149         virtual bool supportsFullscreenForNode(const Node*);
150         virtual void enterFullscreenForNode(Node*);
151         virtual void exitFullscreenForNode(Node*);
152 #endif
153
154 #if ENABLE(FULLSCREEN_API)
155         virtual bool supportsFullScreenForElement(const Element*, bool withKeyboard);
156         virtual void enterFullScreenForElement(Element*);
157         virtual void exitFullScreenForElement(Element*);
158 #endif
159
160         virtual bool shouldRubberBandInDirection(ScrollDirection) const { return true; }
161         virtual void numWheelEventHandlersChanged(unsigned) { }
162         virtual void numTouchEventHandlersChanged(unsigned) { }
163
164 #if USE(ACCELERATED_COMPOSITING) 
165         virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
166         virtual void setNeedsOneShotDrawingSynchronization();
167         virtual void scheduleCompositingLayerSync();
168         virtual CompositingTriggerFlags allowedCompositingTriggers() const;
169 #endif 
170
171         void performAllPendingScrolls();
172         void paint(Timer<ChromeClient>*);
173         void widgetSizeChanged(const IntSize& oldWidgetSize, IntSize newSize);
174
175     private:
176         WebKitWebView* m_webView;
177         GtkAdjustmentWatcher m_adjustmentWatcher;
178         KURL m_hoveredLinkURL;
179         unsigned int m_closeSoonTimer;
180
181         Timer <ChromeClient> m_displayTimer;
182         Region m_dirtyRegion;
183         Vector<IntRect> m_rectsToScroll;
184         Vector<IntSize> m_scrollOffsets;
185         double m_lastDisplayTime;
186         unsigned int m_repaintSoonSourceId;
187
188         void invalidateWidgetRect(const IntRect&);
189     };
190 }
191
192 #endif // ChromeClient_h