1 /* 2 * Copyright (C) 2010 Apple Inc. All rights reserved. 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 18 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 24 * THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #ifndef WebChromeClient_h 28 #define WebChromeClient_h 29 30 #include <WebCore/ChromeClient.h> 31 #include <WebCore/ViewportArguments.h> 32 #include <wtf/text/WTFString.h> 33 34 namespace WebKit { 35 36 class WebFrame; 37 class WebPage; 38 39 class WebChromeClient : public WebCore::ChromeClient { 40 public: WebChromeClient(WebPage * page)41 WebChromeClient(WebPage* page) 42 : m_cachedMainFrameHasHorizontalScrollbar(false) 43 , m_cachedMainFrameHasVerticalScrollbar(false) 44 , m_page(page) 45 { 46 } 47 page()48 WebPage* page() const { return m_page; } 49 webView()50 virtual void* webView() const { return 0; } 51 52 private: 53 virtual void chromeDestroyed(); 54 55 virtual void setWindowRect(const WebCore::FloatRect&); 56 virtual WebCore::FloatRect windowRect(); 57 58 virtual WebCore::FloatRect pageRect(); 59 60 virtual float scaleFactor(); 61 62 virtual void focus(); 63 virtual void unfocus(); 64 65 virtual bool canTakeFocus(WebCore::FocusDirection); 66 virtual void takeFocus(WebCore::FocusDirection); 67 68 virtual void focusedNodeChanged(WebCore::Node*); 69 virtual void focusedFrameChanged(WebCore::Frame*); 70 71 // The Frame pointer provides the ChromeClient with context about which 72 // Frame wants to create the new Page. Also, the newly created window 73 // should not be shown to the user until the ChromeClient of the newly 74 // created Page has its show method called. 75 virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&, const WebCore::NavigationAction&); 76 virtual void show(); 77 78 virtual bool canRunModal(); 79 virtual void runModal(); 80 81 virtual void setToolbarsVisible(bool); 82 virtual bool toolbarsVisible(); 83 84 virtual void setStatusbarVisible(bool); 85 virtual bool statusbarVisible(); 86 87 virtual void setScrollbarsVisible(bool); 88 virtual bool scrollbarsVisible(); 89 90 virtual void setMenubarVisible(bool); 91 virtual bool menubarVisible(); 92 93 virtual void setResizable(bool); 94 95 virtual void addMessageToConsole(WebCore::MessageSource, WebCore::MessageType, WebCore::MessageLevel, const String& message, unsigned int lineNumber, const String& sourceID); 96 97 virtual bool canRunBeforeUnloadConfirmPanel(); 98 virtual bool runBeforeUnloadConfirmPanel(const String& message, WebCore::Frame* frame); 99 100 virtual void closeWindowSoon(); 101 102 virtual void runJavaScriptAlert(WebCore::Frame*, const String&); 103 virtual bool runJavaScriptConfirm(WebCore::Frame*, const String&); 104 virtual bool runJavaScriptPrompt(WebCore::Frame*, const String& message, const String& defaultValue, String& result); 105 virtual void setStatusbarText(const String&); 106 virtual bool shouldInterruptJavaScript(); 107 108 virtual WebCore::KeyboardUIMode keyboardUIMode(); 109 110 virtual WebCore::IntRect windowResizerRect() const; 111 112 // Methods used by HostWindow. 113 virtual void invalidateWindow(const WebCore::IntRect&, bool); 114 virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool); 115 virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool); 116 virtual void scroll(const WebCore::IntSize& scrollOffset, const WebCore::IntRect& scrollRect, const WebCore::IntRect& clipRect); 117 #if ENABLE(TILED_BACKING_STORE) 118 virtual void delegatedScrollRequested(const WebCore::IntPoint& scrollOffset); 119 #endif 120 virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const; 121 virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const; 122 virtual PlatformPageClient platformPageClient() const; 123 virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const; 124 virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; // Currently only Mac has a non empty implementation. 125 // End methods used by HostWindow. 126 127 virtual bool shouldMissingPluginMessageBeButton() const; 128 virtual void missingPluginButtonClicked(WebCore::Element*) const; 129 130 virtual void scrollbarsModeDidChange() const; 131 virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags); 132 133 virtual void setToolTip(const String&, WebCore::TextDirection); 134 135 virtual void print(WebCore::Frame*); 136 137 #if ENABLE(DATABASE) 138 virtual void exceededDatabaseQuota(WebCore::Frame*, const String& databaseName); 139 #endif 140 141 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 142 virtual void reachedMaxAppCacheSize(int64_t spaceNeeded); 143 virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*); 144 #endif 145 146 #if ENABLE(DASHBOARD_SUPPORT) 147 virtual void dashboardRegionsChanged(); 148 #endif 149 150 virtual void populateVisitedLinks(); 151 152 virtual WebCore::FloatRect customHighlightRect(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& lineRect); 153 virtual void paintCustomHighlight(WebCore::Node*, const WTF::AtomicString& type, const WebCore::FloatRect& boxRect, const WebCore::FloatRect& lineRect, 154 bool behindText, bool entireLine); 155 156 virtual bool shouldReplaceWithGeneratedFileForUpload(const String& path, String& generatedFilename); 157 virtual String generateReplacementFile(const String& path); 158 159 virtual bool paintCustomScrollbar(WebCore::GraphicsContext*, const WebCore::FloatRect&, WebCore::ScrollbarControlSize, 160 WebCore::ScrollbarControlState, WebCore::ScrollbarPart pressedPart, bool vertical, 161 float value, float proportion, WebCore::ScrollbarControlPartMask); 162 virtual bool paintCustomScrollCorner(WebCore::GraphicsContext*, const WebCore::FloatRect&); 163 164 virtual bool paintCustomOverhangArea(WebCore::GraphicsContext*, const WebCore::IntRect&, const WebCore::IntRect&, const WebCore::IntRect&); 165 166 // This is an asynchronous call. The ChromeClient can display UI asking the user for permission 167 // to use Geolococation. The ChromeClient must call Geolocation::setShouldClearCache() appropriately. 168 virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*); 169 virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*); 170 171 virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>); 172 virtual void chooseIconForFiles(const Vector<String>&, WebCore::FileChooser*); 173 174 virtual void setCursor(const WebCore::Cursor&); 175 176 // Notification that the given form element has changed. This function 177 // will be called frequently, so handling should be very fast. 178 virtual void formStateDidChange(const WebCore::Node*); 179 180 virtual void formDidFocus(const WebCore::Node*); 181 virtual void formDidBlur(const WebCore::Node*); 182 183 virtual bool selectItemWritingDirectionIsNatural(); 184 virtual bool selectItemAlignmentFollowsMenuWritingDirection(); 185 virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const; 186 virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const; 187 188 #if ENABLE(CONTEXT_MENUS) 189 virtual void showContextMenu(); 190 #endif 191 192 #if USE(ACCELERATED_COMPOSITING) 193 virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*); 194 virtual void setNeedsOneShotDrawingSynchronization(); 195 virtual void scheduleCompositingLayerSync(); 196 #endif 197 198 #if ENABLE(NOTIFICATIONS) 199 virtual WebCore::NotificationPresenter* notificationPresenter() const; 200 #endif 201 202 #if ENABLE(TOUCH_EVENTS) 203 virtual void needTouchEvents(bool); 204 #endif 205 206 #if PLATFORM(WIN) 207 virtual void setLastSetCursorToCurrentCursor(); 208 #endif 209 210 #if ENABLE(FULLSCREEN_API) 211 virtual bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard); 212 virtual void enterFullScreenForElement(WebCore::Element*); 213 virtual void exitFullScreenForElement(WebCore::Element*); 214 virtual void setRootFullScreenLayer(WebCore::GraphicsLayer*); 215 #endif 216 217 virtual void dispatchViewportDataDidChange(const WebCore::ViewportArguments&) const; 218 219 virtual void didCompleteRubberBandForMainFrame(const WebCore::IntSize&) const; 220 221 String m_cachedToolTip; 222 mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame; 223 mutable bool m_cachedMainFrameHasHorizontalScrollbar; 224 mutable bool m_cachedMainFrameHasVerticalScrollbar; 225 226 WebPage* m_page; 227 }; 228 229 } // namespace WebKit 230 231 #endif // WebChromeClient_h 232