1 /* 2 * Copyright (C) 2009 Google 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 are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef ChromeClientImpl_h 33 #define ChromeClientImpl_h 34 35 #include "core/page/ChromeClient.h" 36 #include "modules/navigatorcontentutils/NavigatorContentUtilsClient.h" 37 #include "platform/PopupMenu.h" 38 #include "platform/weborigin/KURL.h" 39 #include "public/platform/WebColor.h" 40 #include "public/web/WebNavigationPolicy.h" 41 #include "wtf/PassOwnPtr.h" 42 43 namespace blink { 44 class AXObject; 45 class ColorChooser; 46 class ColorChooserClient; 47 class Element; 48 class Event; 49 class FileChooser; 50 class GraphicsLayerFactory; 51 class HTMLFormControlElement; 52 class HTMLInputElement; 53 class KeyboardEvent; 54 class PopupMenuClient; 55 class RenderBox; 56 class SecurityOrigin; 57 class DateTimeChooser; 58 class DateTimeChooserClient; 59 class WebColorChooser; 60 class WebColorChooserClient; 61 class WebViewImpl; 62 struct WebCursorInfo; 63 struct WebPopupMenuInfo; 64 struct WindowFeatures; 65 66 // Handles window-level notifications from WebCore on behalf of a WebView. 67 class ChromeClientImpl FINAL : public ChromeClient { 68 public: 69 explicit ChromeClientImpl(WebViewImpl* webView); 70 virtual ~ChromeClientImpl(); 71 72 virtual void* webView() const OVERRIDE; 73 74 // ChromeClient methods: 75 virtual void chromeDestroyed() OVERRIDE; 76 virtual void setWindowRect(const FloatRect&) OVERRIDE; 77 virtual FloatRect windowRect() OVERRIDE; 78 virtual FloatRect pageRect() OVERRIDE; 79 virtual void focus() OVERRIDE; 80 virtual bool canTakeFocus(FocusType) OVERRIDE; 81 virtual void takeFocus(FocusType) OVERRIDE; 82 virtual void focusedNodeChanged(Node*) OVERRIDE; 83 virtual void focusedFrameChanged(LocalFrame*) OVERRIDE; 84 virtual Page* createWindow( 85 LocalFrame*, const FrameLoadRequest&, const WindowFeatures&, NavigationPolicy, ShouldSendReferrer) OVERRIDE; 86 virtual void show(NavigationPolicy) OVERRIDE; 87 virtual bool canRunModal() OVERRIDE; 88 virtual void runModal() OVERRIDE; 89 virtual void setToolbarsVisible(bool) OVERRIDE; 90 virtual bool toolbarsVisible() OVERRIDE; 91 virtual void setStatusbarVisible(bool) OVERRIDE; 92 virtual bool statusbarVisible() OVERRIDE; 93 virtual void setScrollbarsVisible(bool) OVERRIDE; 94 virtual bool scrollbarsVisible() OVERRIDE; 95 virtual void setMenubarVisible(bool) OVERRIDE; 96 virtual bool menubarVisible() OVERRIDE; 97 virtual void setResizable(bool) OVERRIDE; 98 virtual bool shouldReportDetailedMessageForSource(const WTF::String&) OVERRIDE; 99 virtual void addMessageToConsole( 100 LocalFrame*, MessageSource, MessageLevel, 101 const WTF::String& message, unsigned lineNumber, 102 const WTF::String& sourceID, const WTF::String& stackTrace) OVERRIDE; 103 virtual bool canRunBeforeUnloadConfirmPanel() OVERRIDE; 104 virtual bool runBeforeUnloadConfirmPanel( 105 const WTF::String& message, LocalFrame*) OVERRIDE; 106 virtual void closeWindowSoon() OVERRIDE; 107 virtual void runJavaScriptAlert(LocalFrame*, const WTF::String&) OVERRIDE; 108 virtual bool runJavaScriptConfirm(LocalFrame*, const WTF::String&) OVERRIDE; 109 virtual bool runJavaScriptPrompt( 110 LocalFrame*, const WTF::String& message, 111 const WTF::String& defaultValue, WTF::String& result) OVERRIDE; 112 virtual void setStatusbarText(const WTF::String& message) OVERRIDE; 113 virtual bool tabsToLinks() OVERRIDE; 114 virtual IntRect windowResizerRect() const OVERRIDE; 115 virtual void invalidateContentsAndRootView(const IntRect&) OVERRIDE; 116 virtual void invalidateContentsForSlowScroll(const IntRect&) OVERRIDE; 117 virtual void scheduleAnimation() OVERRIDE; 118 virtual IntRect rootViewToScreen(const IntRect&) const OVERRIDE; 119 virtual WebScreenInfo screenInfo() const OVERRIDE; 120 virtual void contentsSizeChanged(LocalFrame*, const IntSize&) const OVERRIDE; 121 virtual void deviceOrPageScaleFactorChanged() const OVERRIDE; 122 virtual void layoutUpdated(LocalFrame*) const OVERRIDE; 123 virtual void mouseDidMoveOverElement( 124 const HitTestResult&, unsigned modifierFlags) OVERRIDE; 125 virtual void setToolTip(const WTF::String& tooltipText, TextDirection) OVERRIDE; 126 virtual void dispatchViewportPropertiesDidChange(const ViewportDescription&) const OVERRIDE; 127 virtual void print(LocalFrame*) OVERRIDE; 128 virtual void annotatedRegionsChanged() OVERRIDE; 129 virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE; 130 virtual PassOwnPtr<ColorChooser> createColorChooser(LocalFrame*, ColorChooserClient*, const Color&) OVERRIDE; 131 virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE; 132 virtual void openTextDataListChooser(HTMLInputElement&) OVERRIDE; 133 virtual void runOpenPanel(LocalFrame*, PassRefPtr<FileChooser>) OVERRIDE; 134 virtual void enumerateChosenDirectory(FileChooser*) OVERRIDE; 135 virtual void setCursor(const Cursor&) OVERRIDE; 136 virtual void needTouchEvents(bool needTouchEvents) OVERRIDE; 137 virtual void setTouchAction(TouchAction) OVERRIDE; 138 139 virtual GraphicsLayerFactory* graphicsLayerFactory() const OVERRIDE; 140 141 // Pass 0 as the GraphicsLayer to detatch the root layer. 142 virtual void attachRootGraphicsLayer(GraphicsLayer*) OVERRIDE; 143 144 virtual void enterFullScreenForElement(Element*) OVERRIDE; 145 virtual void exitFullScreenForElement(Element*) OVERRIDE; 146 147 virtual void clearCompositedSelectionBounds() OVERRIDE; 148 virtual void updateCompositedSelectionBounds(const blink::CompositedSelectionBound& anchor, const blink::CompositedSelectionBound& focus) OVERRIDE; 149 150 // ChromeClient methods: 151 virtual void postAccessibilityNotification(AXObject*, AXObjectCache::AXNotification) OVERRIDE; 152 virtual String acceptLanguages() OVERRIDE; 153 154 // ChromeClientImpl: 155 void setCursorForPlugin(const WebCursorInfo&); 156 void setNewWindowNavigationPolicy(WebNavigationPolicy); 157 158 virtual bool hasOpenedPopup() const OVERRIDE; 159 virtual PassRefPtrWillBeRawPtr<PopupMenu> createPopupMenu(LocalFrame&, PopupMenuClient*) const OVERRIDE; 160 PagePopup* openPagePopup(PagePopupClient*, const IntRect&); 161 void closePagePopup(PagePopup*); 162 virtual void setPagePopupDriver(PagePopupDriver*) OVERRIDE; 163 virtual void resetPagePopupDriver() OVERRIDE; 164 165 virtual bool shouldRunModalDialogDuringPageDismissal(const DialogType&, const String& dialogMessage, Document::PageDismissalType) const OVERRIDE; 166 167 virtual bool requestPointerLock() OVERRIDE; 168 virtual void requestPointerUnlock() OVERRIDE; 169 170 virtual void didAssociateFormControls(const WillBeHeapVector<RefPtrWillBeMember<Element> >&) OVERRIDE; 171 virtual void didChangeValueInTextField(HTMLFormControlElement&) OVERRIDE; 172 virtual void didEndEditingOnTextField(HTMLInputElement&) OVERRIDE; 173 virtual void handleKeyboardEventOnTextField(HTMLInputElement&, KeyboardEvent&) OVERRIDE; 174 175 // FIXME: Remove this method once we have input routing in the browser 176 // process. See http://crbug.com/339659. 177 virtual void forwardInputEvent(Frame*, Event*) OVERRIDE; 178 179 virtual void didCancelCompositionOnSelectionChange() OVERRIDE; 180 virtual void willSetInputMethodState() OVERRIDE; 181 virtual void didUpdateTextOfFocusedElementByNonUserInput() OVERRIDE; 182 virtual void showImeIfNeeded() OVERRIDE; 183 184 private: 185 virtual bool isChromeClientImpl() const OVERRIDE { return true; } 186 187 WebNavigationPolicy getNavigationPolicy(); 188 void setCursor(const WebCursorInfo&); 189 190 WebViewImpl* m_webView; // weak pointer 191 bool m_toolbarsVisible; 192 bool m_statusbarVisible; 193 bool m_scrollbarsVisible; 194 bool m_menubarVisible; 195 bool m_resizable; 196 197 PagePopupDriver* m_pagePopupDriver; 198 }; 199 200 DEFINE_TYPE_CASTS(ChromeClientImpl, ChromeClient, client, client->isChromeClientImpl(), client.isChromeClientImpl()); 201 202 } // namespace blink 203 204 #endif 205