1/* 2 * Copyright (C) 2006, 2007, 2008, 2009 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 COMPUTER, INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <WebCore/ChromeClient.h> 28#include <WebCore/COMPtr.h> 29#include <WebCore/GraphicsContext.h> 30#include <WebCore/FocusDirection.h> 31#include <WebCore/ScrollTypes.h> 32#include <wtf/Forward.h> 33#include <wtf/PassRefPtr.h> 34 35class WebView; 36class WebDesktopNotificationsDelegate; 37 38interface IWebUIDelegate; 39 40class WebChromeClient : public WebCore::ChromeClient { 41public: 42 WebChromeClient(WebView*); 43 44 virtual void chromeDestroyed(); 45 46 virtual void setWindowRect(const WebCore::FloatRect&); 47 virtual WebCore::FloatRect windowRect(); 48 49 virtual WebCore::FloatRect pageRect(); 50 51 virtual void focus(); 52 virtual void unfocus(); 53 54 virtual bool canTakeFocus(WebCore::FocusDirection); 55 virtual void takeFocus(WebCore::FocusDirection); 56 57 virtual void focusedNodeChanged(WebCore::Node*); 58 virtual void focusedFrameChanged(WebCore::Frame*); 59 60 virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&, const WebCore::NavigationAction&); 61 virtual void show(); 62 63 virtual bool canRunModal(); 64 virtual void runModal(); 65 66 virtual void setToolbarsVisible(bool); 67 virtual bool toolbarsVisible(); 68 69 virtual void setStatusbarVisible(bool); 70 virtual bool statusbarVisible(); 71 72 virtual void setScrollbarsVisible(bool); 73 virtual bool scrollbarsVisible(); 74 75 virtual void setMenubarVisible(bool); 76 virtual bool menubarVisible(); 77 78 virtual void setResizable(bool); 79 80 virtual void addMessageToConsole(WebCore::MessageSource, WebCore::MessageLevel, const WTF::String& message, unsigned lineNumber, unsigned columnNumber, const WTF::String& url); 81 82 virtual bool canRunBeforeUnloadConfirmPanel(); 83 virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame); 84 85 virtual void closeWindowSoon(); 86 87 virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&); 88 virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&); 89 virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result); 90 virtual void setStatusbarText(const WTF::String&); 91 virtual bool shouldInterruptJavaScript(); 92 93 virtual WebCore::KeyboardUIMode keyboardUIMode(); 94 virtual WebCore::IntRect windowResizerRect() const; 95 96 virtual void invalidateRootView(const WebCore::IntRect&, bool); 97 virtual void invalidateContentsAndRootView(const WebCore::IntRect&, bool); 98 virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool); 99 virtual void scroll(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& rectToScroll, const WebCore::IntRect& clipRect); 100 101 virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) const; 102 virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) const; 103 virtual PlatformPageClient platformPageClient() const; 104 virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const; 105 106 virtual void scrollbarsModeDidChange() const { } 107 virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags); 108 virtual bool shouldUnavailablePluginMessageBeButton(WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const; 109 virtual void unavailablePluginButtonClicked(WebCore::Element*, WebCore::RenderEmbeddedObject::PluginUnavailabilityReason) const; 110 111 virtual void setToolTip(const WTF::String&, WebCore::TextDirection); 112 113 virtual void print(WebCore::Frame*); 114 115#if ENABLE(SQL_DATABASE) 116 virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String&, WebCore::DatabaseDetails); 117#endif 118 119 virtual void reachedMaxAppCacheSize(int64_t spaceNeeded); 120 virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*, int64_t totalSpaceNeeded); 121 122 virtual void populateVisitedLinks(); 123 124 virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>); 125 virtual void loadIconForFiles(const Vector<WTF::String>&, WebCore::FileIconLoader*); 126 127 virtual void setCursor(const WebCore::Cursor&); 128 virtual void setCursorHiddenUntilMouseMoves(bool); 129 virtual void setLastSetCursorToCurrentCursor(); 130 131 virtual void formStateDidChange(const WebCore::Node*) { } 132 133#if USE(ACCELERATED_COMPOSITING) 134 // Pass 0 as the GraphicsLayer to detatch the root layer. 135 virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*); 136 // Sets a flag to specify that the next time content is drawn to the window, 137 // the changes appear on the screen in synchrony with updates to GraphicsLayers. 138 virtual void setNeedsOneShotDrawingSynchronization() { } 139 // Sets a flag to specify that the view needs to be updated, so we need 140 // to do an eager layout before the drawing. 141 virtual void scheduleCompositingLayerFlush(); 142#endif 143 144#if PLATFORM(WIN) && USE(AVFOUNDATION) 145 virtual WebCore::GraphicsDeviceAdapter* graphicsDeviceAdapter() const OVERRIDE; 146#endif 147 148 virtual void scrollRectIntoView(const WebCore::IntRect&) const { } 149 150#if ENABLE(VIDEO) 151 virtual bool supportsFullscreenForNode(const WebCore::Node*); 152 virtual void enterFullscreenForNode(WebCore::Node*); 153 virtual void exitFullscreenForNode(WebCore::Node*); 154#endif 155 156#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) 157 virtual WebCore::NotificationClient* notificationPresenter() const { return reinterpret_cast<WebCore::NotificationClient*>(m_notificationsDelegate.get()); } 158#endif 159 160 virtual bool selectItemWritingDirectionIsNatural(); 161 virtual bool selectItemAlignmentFollowsMenuWritingDirection(); 162 virtual bool hasOpenedPopup() const; 163 virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const; 164 virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const; 165 166#if ENABLE(FULLSCREEN_API) 167 virtual bool supportsFullScreenForElement(const WebCore::Element*, bool withKeyboard); 168 virtual void enterFullScreenForElement(WebCore::Element*); 169 virtual void exitFullScreenForElement(WebCore::Element*); 170#endif 171 172 virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return true; } 173 virtual void numWheelEventHandlersChanged(unsigned) { } 174 175 WebView* webView() { return m_webView; } 176 177 virtual void AXStartFrameLoad(); 178 virtual void AXFinishFrameLoad(); 179 180private: 181 COMPtr<IWebUIDelegate> uiDelegate(); 182 183 WebView* m_webView; 184 185#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) 186 OwnPtr<WebDesktopNotificationsDelegate> m_notificationsDelegate; 187#endif 188}; 189