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 34using namespace WebCore; 35typedef struct _WebKitWebView WebKitWebView; 36 37namespace WebCore { 38class PopupMenuClient; 39} 40 41namespace WebKit { 42 43 class ChromeClient : public WebCore::ChromeClient { 44 public: 45 ChromeClient(WebKitWebView*); 46 GtkAdjustmentWatcher* adjustmentWatcher() { return &m_adjustmentWatcher; } 47 48 virtual void chromeDestroyed(); 49 50 virtual void setWindowRect(const FloatRect&); 51 virtual FloatRect windowRect(); 52 53 virtual FloatRect pageRect(); 54 55 virtual void focus(); 56 virtual void unfocus(); 57 58 virtual bool canTakeFocus(FocusDirection); 59 virtual void takeFocus(FocusDirection); 60 61 virtual void focusedNodeChanged(Node*); 62 virtual void focusedFrameChanged(Frame*); 63 64 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&); 65 virtual void show(); 66 67 virtual bool canRunModal(); 68 virtual void runModal(); 69 70 virtual void setToolbarsVisible(bool); 71 virtual bool toolbarsVisible(); 72 73 virtual void setStatusbarVisible(bool); 74 virtual bool statusbarVisible(); 75 76 virtual void setScrollbarsVisible(bool); 77 virtual bool scrollbarsVisible(); 78 79 virtual void setMenubarVisible(bool); 80 virtual bool menubarVisible(); 81 82 virtual void setResizable(bool); 83 84 virtual void addMessageToConsole(MessageSource, MessageLevel, const WTF::String& message, unsigned lineNumber, unsigned columnNumber, const WTF::String& sourceID); 85 86 virtual bool canRunBeforeUnloadConfirmPanel(); 87 virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, Frame* frame); 88 89 virtual void closeWindowSoon(); 90 91 virtual void runJavaScriptAlert(Frame*, const WTF::String&); 92 virtual bool runJavaScriptConfirm(Frame*, const WTF::String&); 93 virtual bool runJavaScriptPrompt(Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result); 94 virtual void setStatusbarText(const WTF::String&); 95 virtual bool shouldInterruptJavaScript(); 96 virtual KeyboardUIMode keyboardUIMode(); 97 98 virtual IntRect windowResizerRect() const; 99 virtual void invalidateRootView(const IntRect&, bool); 100 virtual void invalidateContentsAndRootView(const IntRect&, bool); 101 virtual void invalidateContentsForSlowScroll(const IntRect&, bool); 102 virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect); 103 104 virtual IntPoint screenToRootView(const IntPoint&) const; 105 virtual IntRect rootViewToScreen(const IntRect&) const; 106 virtual PlatformPageClient platformPageClient() const; 107 virtual void contentsSizeChanged(Frame*, const IntSize&) const; 108 109 virtual void scrollbarsModeDidChange() const; 110 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags); 111 112 virtual void setToolTip(const WTF::String&, TextDirection); 113 114 virtual void dispatchViewportPropertiesDidChange(const ViewportArguments&) const; 115 116 virtual void print(Frame*); 117#if ENABLE(SQL_DATABASE) 118 virtual void exceededDatabaseQuota(Frame*, const WTF::String&, DatabaseDetails); 119#endif 120 virtual void reachedMaxAppCacheSize(int64_t spaceNeeded); 121 virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t totalSpaceNeeded); 122 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>); 123 virtual void loadIconForFiles(const Vector<WTF::String>&, FileIconLoader*); 124 125 virtual void formStateDidChange(const Node*) { } 126 127 virtual void setCursor(const Cursor&); 128 virtual void setCursorHiddenUntilMouseMoves(bool); 129 130 virtual void scrollRectIntoView(const IntRect&) const { } 131 132 virtual bool selectItemWritingDirectionIsNatural(); 133 virtual bool selectItemAlignmentFollowsMenuWritingDirection(); 134 virtual bool hasOpenedPopup() const; 135 virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const; 136 virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const; 137#if ENABLE(VIDEO) && USE(NATIVE_FULLSCREEN_VIDEO) 138 virtual bool supportsFullscreenForNode(const Node*); 139 virtual void enterFullscreenForNode(Node*); 140 virtual void exitFullscreenForNode(Node*); 141#endif 142 143#if ENABLE(FULLSCREEN_API) 144 virtual bool supportsFullScreenForElement(const Element*, bool withKeyboard); 145 virtual void enterFullScreenForElement(Element*); 146 virtual void exitFullScreenForElement(Element*); 147 void cancelFullScreen(); 148#endif 149 150 virtual bool shouldRubberBandInDirection(ScrollDirection) const { return true; } 151 virtual void numWheelEventHandlersChanged(unsigned) { } 152 153#if USE(ACCELERATED_COMPOSITING) 154 virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*); 155 virtual void setNeedsOneShotDrawingSynchronization(); 156 virtual void scheduleCompositingLayerFlush(); 157 virtual CompositingTriggerFlags allowedCompositingTriggers() const; 158#endif 159 160 void performAllPendingScrolls(); 161 void paint(Timer<ChromeClient>*); 162 void forcePaint(); 163 void widgetSizeChanged(const IntSize& oldWidgetSize, IntSize newSize); 164 165 WebKitWebView* webView() { return m_webView; } 166 167 private: 168 WebKitWebView* m_webView; 169 GtkAdjustmentWatcher m_adjustmentWatcher; 170 KURL m_hoveredLinkURL; 171 unsigned int m_closeSoonTimer; 172 173 Timer <ChromeClient> m_displayTimer; 174 bool m_forcePaint; 175 Region m_dirtyRegion; 176 Vector<IntRect> m_rectsToScroll; 177 Vector<IntSize> m_scrollOffsets; 178 double m_lastDisplayTime; 179 unsigned int m_repaintSoonSourceId; 180 181#if ENABLE(FULLSCREEN_API) 182 RefPtr<Element> m_fullScreenElement; 183#endif 184 }; 185} 186 187#endif // ChromeClient_h 188