2 * Copyright (C) 2007 Holger Hans Peter Freyther
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
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.
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.
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.
21 #ifndef ChromeClientGtk_h
22 #define ChromeClientGtk_h
24 #include "ChromeClient.h"
25 #include "GtkAdjustmentWatcher.h"
29 #include "PopupMenu.h"
31 #include "SearchPopupMenu.h"
34 using namespace WebCore;
35 typedef struct _WebKitWebView WebKitWebView;
38 class PopupMenuClient;
43 class ChromeClient : public WebCore::ChromeClient {
45 ChromeClient(WebKitWebView*);
46 virtual void* webView() const { return m_webView; }
47 GtkAdjustmentWatcher* adjustmentWatcher() { return &m_adjustmentWatcher; }
49 virtual void chromeDestroyed();
51 virtual void setWindowRect(const FloatRect&);
52 virtual FloatRect windowRect();
54 virtual FloatRect pageRect();
57 virtual void unfocus();
59 virtual bool canTakeFocus(FocusDirection);
60 virtual void takeFocus(FocusDirection);
62 virtual void focusedNodeChanged(Node*);
63 virtual void focusedFrameChanged(Frame*);
65 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
68 virtual bool canRunModal();
69 virtual void runModal();
71 virtual void setToolbarsVisible(bool);
72 virtual bool toolbarsVisible();
74 virtual void setStatusbarVisible(bool);
75 virtual bool statusbarVisible();
77 virtual void setScrollbarsVisible(bool);
78 virtual bool scrollbarsVisible();
80 virtual void setMenubarVisible(bool);
81 virtual bool menubarVisible();
83 virtual void setResizable(bool);
85 virtual void addMessageToConsole(MessageSource source, MessageType type,
86 MessageLevel level, const WTF::String& message,
87 unsigned int lineNumber, const WTF::String& sourceID);
89 virtual bool canRunBeforeUnloadConfirmPanel();
90 virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, Frame* frame);
92 virtual void closeWindowSoon();
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();
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&);
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);
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;
115 virtual void scrollbarsModeDidChange() const;
116 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
118 virtual void setToolTip(const WTF::String&, TextDirection);
120 virtual void dispatchViewportPropertiesDidChange(const ViewportArguments&) const;
122 virtual void print(Frame*);
123 #if ENABLE(SQL_DATABASE)
124 virtual void exceededDatabaseQuota(Frame*, const WTF::String&);
126 virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
127 virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t totalSpaceNeeded);
128 #if ENABLE(CONTEXT_MENUS)
129 virtual void showContextMenu() { }
131 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
132 virtual void loadIconForFiles(const Vector<WTF::String>&, FileIconLoader*);
134 virtual void formStateDidChange(const Node*) { }
136 virtual void setCursor(const Cursor&);
137 virtual void setCursorHiddenUntilMouseMoves(bool);
139 virtual void scrollRectIntoView(const IntRect&) const { }
140 virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*);
141 virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*);
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;
149 virtual bool supportsFullscreenForNode(const Node*);
150 virtual void enterFullscreenForNode(Node*);
151 virtual void exitFullscreenForNode(Node*);
154 #if ENABLE(FULLSCREEN_API)
155 virtual bool supportsFullScreenForElement(const Element*, bool withKeyboard);
156 virtual void enterFullScreenForElement(Element*);
157 virtual void exitFullScreenForElement(Element*);
160 virtual bool shouldRubberBandInDirection(ScrollDirection) const { return true; }
161 virtual void numWheelEventHandlersChanged(unsigned) { }
162 virtual void numTouchEventHandlersChanged(unsigned) { }
164 #if USE(ACCELERATED_COMPOSITING)
165 virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
166 virtual void setNeedsOneShotDrawingSynchronization();
167 virtual void scheduleCompositingLayerSync();
168 virtual CompositingTriggerFlags allowedCompositingTriggers() const;
171 void performAllPendingScrolls();
172 void paint(Timer<ChromeClient>*);
173 void widgetSizeChanged(const IntSize& oldWidgetSize, IntSize newSize);
176 WebKitWebView* m_webView;
177 GtkAdjustmentWatcher m_adjustmentWatcher;
178 KURL m_hoveredLinkURL;
179 unsigned int m_closeSoonTimer;
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;
188 void invalidateWidgetRect(const IntRect&);
192 #endif // ChromeClient_h