1 /* 2 * Copyright (C) 2006 Eric Seidel (eric@webkit.org) 3 * Copyright (C) 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 5 * Copyright (C) 2012 Samsung Electronics. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef EmptyClients_h 30 #define EmptyClients_h 31 32 #include "core/editing/UndoStep.h" 33 #include "core/inspector/InspectorClient.h" 34 #include "core/loader/FrameLoaderClient.h" 35 #include "core/page/BackForwardClient.h" 36 #include "core/page/ChromeClient.h" 37 #include "core/page/ContextMenuClient.h" 38 #include "core/page/DragClient.h" 39 #include "core/page/EditorClient.h" 40 #include "core/page/FocusDirection.h" 41 #include "core/page/Page.h" 42 #include "core/page/SpellCheckerClient.h" 43 #include "core/platform/DragImage.h" 44 #include "platform/geometry/FloatRect.h" 45 #include "platform/network/ResourceError.h" 46 #include "platform/text/TextCheckerClient.h" 47 #include "public/platform/WebScreenInfo.h" 48 #include "wtf/Forward.h" 49 50 #include <v8.h> 51 52 /* 53 This file holds empty Client stubs for use by WebCore. 54 Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript. 55 This tree depends heavily on Clients (usually provided by WebKit classes). 56 57 This file was first created for SVGImage as it had no way to access the current Page (nor should it, 58 since Images are not tied to a page). 59 See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file. 60 61 Ideally, whenever you change a Client class, you should add a stub here. 62 Brittle, yes. Unfortunate, yes. Hopefully temporary. 63 */ 64 65 namespace WebCore { 66 67 class GraphicsContext3D; 68 69 class EmptyChromeClient : public ChromeClient { 70 WTF_MAKE_FAST_ALLOCATED; 71 public: ~EmptyChromeClient()72 virtual ~EmptyChromeClient() { } chromeDestroyed()73 virtual void chromeDestroyed() OVERRIDE { } 74 webView()75 virtual void* webView() const OVERRIDE { return 0; } setWindowRect(const FloatRect &)76 virtual void setWindowRect(const FloatRect&) OVERRIDE { } windowRect()77 virtual FloatRect windowRect() OVERRIDE { return FloatRect(); } 78 pageRect()79 virtual FloatRect pageRect() OVERRIDE { return FloatRect(); } 80 focus()81 virtual void focus() OVERRIDE { } unfocus()82 virtual void unfocus() OVERRIDE { } 83 canTakeFocus(FocusDirection)84 virtual bool canTakeFocus(FocusDirection) OVERRIDE { return false; } takeFocus(FocusDirection)85 virtual void takeFocus(FocusDirection) OVERRIDE { } 86 focusedNodeChanged(Node *)87 virtual void focusedNodeChanged(Node*) OVERRIDE { } createWindow(Frame *,const FrameLoadRequest &,const WindowFeatures &,NavigationPolicy,ShouldSendReferrer)88 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, NavigationPolicy, ShouldSendReferrer) OVERRIDE { return 0; } show(NavigationPolicy)89 virtual void show(NavigationPolicy) OVERRIDE { } 90 canRunModal()91 virtual bool canRunModal() OVERRIDE { return false; } runModal()92 virtual void runModal() OVERRIDE { } 93 setToolbarsVisible(bool)94 virtual void setToolbarsVisible(bool) OVERRIDE { } toolbarsVisible()95 virtual bool toolbarsVisible() OVERRIDE { return false; } 96 setStatusbarVisible(bool)97 virtual void setStatusbarVisible(bool) OVERRIDE { } statusbarVisible()98 virtual bool statusbarVisible() OVERRIDE { return false; } 99 setScrollbarsVisible(bool)100 virtual void setScrollbarsVisible(bool) OVERRIDE { } scrollbarsVisible()101 virtual bool scrollbarsVisible() OVERRIDE { return false; } 102 setMenubarVisible(bool)103 virtual void setMenubarVisible(bool) OVERRIDE { } menubarVisible()104 virtual bool menubarVisible() OVERRIDE { return false; } 105 setResizable(bool)106 virtual void setResizable(bool) OVERRIDE { } 107 shouldReportDetailedMessageForSource(const String &)108 virtual bool shouldReportDetailedMessageForSource(const String&) OVERRIDE { return false; } addMessageToConsole(MessageSource,MessageLevel,const String &,unsigned,const String &,const String &)109 virtual void addMessageToConsole(MessageSource, MessageLevel, const String&, unsigned, const String&, const String&) OVERRIDE { } 110 canRunBeforeUnloadConfirmPanel()111 virtual bool canRunBeforeUnloadConfirmPanel() OVERRIDE { return false; } runBeforeUnloadConfirmPanel(const String &,Frame *)112 virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) OVERRIDE { return true; } 113 closeWindowSoon()114 virtual void closeWindowSoon() OVERRIDE { } 115 runJavaScriptAlert(Frame *,const String &)116 virtual void runJavaScriptAlert(Frame*, const String&) OVERRIDE { } runJavaScriptConfirm(Frame *,const String &)117 virtual bool runJavaScriptConfirm(Frame*, const String&) OVERRIDE { return false; } runJavaScriptPrompt(Frame *,const String &,const String &,String &)118 virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) OVERRIDE { return false; } 119 hasOpenedPopup()120 virtual bool hasOpenedPopup() const OVERRIDE { return false; } 121 virtual PassRefPtr<PopupMenu> createPopupMenu(Frame&, PopupMenuClient*) const OVERRIDE; openPagePopup(PagePopupClient *,const IntRect &)122 virtual PagePopup* openPagePopup(PagePopupClient*, const IntRect&) OVERRIDE { return 0; } closePagePopup(PagePopup *)123 virtual void closePagePopup(PagePopup*) OVERRIDE { } setPagePopupDriver(PagePopupDriver *)124 virtual void setPagePopupDriver(PagePopupDriver*) OVERRIDE { } resetPagePopupDriver()125 virtual void resetPagePopupDriver() OVERRIDE { } 126 setStatusbarText(const String &)127 virtual void setStatusbarText(const String&) OVERRIDE { } 128 tabsToLinks()129 virtual bool tabsToLinks() OVERRIDE { return false; } 130 windowResizerRect()131 virtual IntRect windowResizerRect() const OVERRIDE { return IntRect(); } 132 invalidateContentsAndRootView(const IntRect &)133 virtual void invalidateContentsAndRootView(const IntRect&) OVERRIDE { } invalidateContentsForSlowScroll(const IntRect &)134 virtual void invalidateContentsForSlowScroll(const IntRect&) OVERRIDE { } scroll(const IntSize &,const IntRect &,const IntRect &)135 virtual void scroll(const IntSize&, const IntRect&, const IntRect&) OVERRIDE { } scheduleAnimation()136 virtual void scheduleAnimation() OVERRIDE { } 137 isCompositorFramePending()138 virtual bool isCompositorFramePending() const OVERRIDE { return false; } 139 screenToRootView(const IntPoint & p)140 virtual IntPoint screenToRootView(const IntPoint& p) const OVERRIDE { return p; } rootViewToScreen(const IntRect & r)141 virtual IntRect rootViewToScreen(const IntRect& r) const OVERRIDE { return r; } screenInfo()142 virtual blink::WebScreenInfo screenInfo() const OVERRIDE { return blink::WebScreenInfo(); } contentsSizeChanged(Frame *,const IntSize &)143 virtual void contentsSizeChanged(Frame*, const IntSize&) const OVERRIDE { } 144 mouseDidMoveOverElement(const HitTestResult &,unsigned)145 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) OVERRIDE { } 146 setToolTip(const String &,TextDirection)147 virtual void setToolTip(const String&, TextDirection) OVERRIDE { } 148 print(Frame *)149 virtual void print(Frame*) OVERRIDE { } 150 enumerateChosenDirectory(FileChooser *)151 virtual void enumerateChosenDirectory(FileChooser*) OVERRIDE { } 152 153 virtual PassOwnPtr<ColorChooser> createColorChooser(ColorChooserClient*, const Color&) OVERRIDE; 154 virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE; 155 virtual void openTextDataListChooser(HTMLInputElement&) OVERRIDE; 156 157 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) OVERRIDE; 158 formStateDidChange(const Node *)159 virtual void formStateDidChange(const Node*) OVERRIDE { } 160 setCursor(const Cursor &)161 virtual void setCursor(const Cursor&) OVERRIDE { } 162 attachRootGraphicsLayer(Frame *,GraphicsLayer *)163 virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) OVERRIDE { } scheduleCompositingLayerFlush()164 virtual void scheduleCompositingLayerFlush() OVERRIDE { } 165 needTouchEvents(bool)166 virtual void needTouchEvents(bool) OVERRIDE { } setTouchAction(TouchAction touchAction)167 virtual void setTouchAction(TouchAction touchAction) OVERRIDE { }; 168 numWheelEventHandlersChanged(unsigned)169 virtual void numWheelEventHandlersChanged(unsigned) OVERRIDE { } 170 shouldRubberBandInDirection(WebCore::ScrollDirection)171 virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const OVERRIDE { return false; } 172 isEmptyChromeClient()173 virtual bool isEmptyChromeClient() const OVERRIDE { return true; } 174 didAssociateFormControls(const Vector<RefPtr<Element>> &)175 virtual void didAssociateFormControls(const Vector<RefPtr<Element> >&) OVERRIDE { } 176 popupOpened(PopupContainer * popupContainer,const IntRect & bounds,bool handleExternal)177 virtual void popupOpened(PopupContainer* popupContainer, const IntRect& bounds, 178 bool handleExternal) { } popupClosed(PopupContainer * popupContainer)179 virtual void popupClosed(PopupContainer* popupContainer) OVERRIDE { } 180 annotatedRegionsChanged()181 virtual void annotatedRegionsChanged() OVERRIDE { } paintCustomOverhangArea(GraphicsContext *,const IntRect &,const IntRect &,const IntRect &)182 virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE { return false; } 183 virtual String acceptLanguages() OVERRIDE; 184 }; 185 186 class EmptyFrameLoaderClient : public FrameLoaderClient { 187 WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED; 188 public: EmptyFrameLoaderClient()189 EmptyFrameLoaderClient() { } ~EmptyFrameLoaderClient()190 virtual ~EmptyFrameLoaderClient() { } frameLoaderDestroyed()191 virtual void frameLoaderDestroyed() OVERRIDE { } 192 hasWebView()193 virtual bool hasWebView() const OVERRIDE { return true; } // mainly for assertions 194 detachedFromParent()195 virtual void detachedFromParent() OVERRIDE { } 196 dispatchWillSendRequest(DocumentLoader *,unsigned long,ResourceRequest &,const ResourceResponse &)197 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) OVERRIDE { } dispatchDidReceiveResponse(DocumentLoader *,unsigned long,const ResourceResponse &)198 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) OVERRIDE { } dispatchDidFinishLoading(DocumentLoader *,unsigned long)199 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) OVERRIDE { } dispatchDidLoadResourceFromMemoryCache(const ResourceRequest &,const ResourceResponse &)200 virtual void dispatchDidLoadResourceFromMemoryCache(const ResourceRequest&, const ResourceResponse&) OVERRIDE { } 201 dispatchDidHandleOnloadEvents()202 virtual void dispatchDidHandleOnloadEvents() OVERRIDE { } dispatchDidReceiveServerRedirectForProvisionalLoad()203 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() OVERRIDE { } dispatchWillClose()204 virtual void dispatchWillClose() OVERRIDE { } dispatchDidStartProvisionalLoad()205 virtual void dispatchDidStartProvisionalLoad() OVERRIDE { } dispatchDidReceiveTitle(const String &)206 virtual void dispatchDidReceiveTitle(const String&) OVERRIDE { } dispatchDidChangeIcons(IconType)207 virtual void dispatchDidChangeIcons(IconType) OVERRIDE { } dispatchDidCommitLoad(Frame *,HistoryItem *,NavigationHistoryPolicy)208 virtual void dispatchDidCommitLoad(Frame*, HistoryItem*, NavigationHistoryPolicy) OVERRIDE { } dispatchDidFailProvisionalLoad(const ResourceError &)209 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) OVERRIDE { } dispatchDidFailLoad(const ResourceError &)210 virtual void dispatchDidFailLoad(const ResourceError&) OVERRIDE { } dispatchDidFinishDocumentLoad()211 virtual void dispatchDidFinishDocumentLoad() OVERRIDE { } dispatchDidFinishLoad()212 virtual void dispatchDidFinishLoad() OVERRIDE { } dispatchDidFirstVisuallyNonEmptyLayout()213 virtual void dispatchDidFirstVisuallyNonEmptyLayout() OVERRIDE { } 214 215 virtual NavigationPolicy decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationPolicy) OVERRIDE; 216 217 virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) OVERRIDE; 218 virtual void dispatchWillSubmitForm(PassRefPtr<FormState>) OVERRIDE; 219 postProgressStartedNotification()220 virtual void postProgressStartedNotification() OVERRIDE { } postProgressEstimateChangedNotification()221 virtual void postProgressEstimateChangedNotification() OVERRIDE { } postProgressFinishedNotification()222 virtual void postProgressFinishedNotification() OVERRIDE { } 223 224 virtual void loadURLExternally(const ResourceRequest&, NavigationPolicy, const String& = String()) OVERRIDE { } 225 226 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) OVERRIDE; 227 userAgent(const KURL &)228 virtual String userAgent(const KURL&) OVERRIDE { return ""; } 229 doNotTrackValue()230 virtual String doNotTrackValue() OVERRIDE { return String(); } 231 transitionToCommittedForNewPage()232 virtual void transitionToCommittedForNewPage() OVERRIDE { } 233 navigateBackForward(int offset)234 virtual bool navigateBackForward(int offset) const OVERRIDE { return false; } didDisplayInsecureContent()235 virtual void didDisplayInsecureContent() OVERRIDE { } didRunInsecureContent(SecurityOrigin *,const KURL &)236 virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) OVERRIDE { } didDetectXSS(const KURL &,bool)237 virtual void didDetectXSS(const KURL&, bool) OVERRIDE { } didDispatchPingLoader(const KURL &)238 virtual void didDispatchPingLoader(const KURL&) OVERRIDE { } selectorMatchChanged(const Vector<String> &,const Vector<String> &)239 virtual void selectorMatchChanged(const Vector<String>&, const Vector<String>&) OVERRIDE { } 240 virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, const String&, HTMLFrameOwnerElement*) OVERRIDE; 241 virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) OVERRIDE; 242 virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) OVERRIDE; 243 objectContentType(const KURL &,const String &,bool)244 virtual ObjectContentType objectContentType(const KURL&, const String&, bool) OVERRIDE { return ObjectContentType(); } 245 dispatchDidClearWindowObjectInWorld(DOMWrapperWorld *)246 virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) OVERRIDE { } documentElementAvailable()247 virtual void documentElementAvailable() OVERRIDE { } 248 didCreateScriptContext(v8::Handle<v8::Context>,int extensionGroup,int worldId)249 virtual void didCreateScriptContext(v8::Handle<v8::Context>, int extensionGroup, int worldId) OVERRIDE { } willReleaseScriptContext(v8::Handle<v8::Context>,int worldId)250 virtual void willReleaseScriptContext(v8::Handle<v8::Context>, int worldId) OVERRIDE { } allowScriptExtension(const String & extensionName,int extensionGroup,int worldId)251 virtual bool allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) OVERRIDE { return false; } 252 cookieJar()253 virtual blink::WebCookieJar* cookieJar() const { return 0; } 254 255 virtual void didRequestAutocomplete(PassRefPtr<FormState>) OVERRIDE; 256 virtual PassOwnPtr<blink::WebServiceWorkerProvider> createServiceWorkerProvider(PassOwnPtr<blink::WebServiceWorkerProviderClient>) OVERRIDE; 257 }; 258 259 class EmptyTextCheckerClient : public TextCheckerClient { 260 public: shouldEraseMarkersAfterChangeSelection(TextCheckingType)261 virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const OVERRIDE { return true; } checkSpellingOfString(const String &,int *,int *)262 virtual void checkSpellingOfString(const String&, int*, int*) OVERRIDE { } getAutoCorrectSuggestionForMisspelledWord(const String &)263 virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) OVERRIDE { return String(); } checkGrammarOfString(const String &,Vector<GrammarDetail> &,int *,int *)264 virtual void checkGrammarOfString(const String&, Vector<GrammarDetail>&, int*, int*) OVERRIDE { } 265 virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) OVERRIDE; 266 }; 267 268 class EmptySpellCheckerClient : public SpellCheckerClient { 269 WTF_MAKE_NONCOPYABLE(EmptySpellCheckerClient); WTF_MAKE_FAST_ALLOCATED; 270 public: EmptySpellCheckerClient()271 EmptySpellCheckerClient() { } ~EmptySpellCheckerClient()272 virtual ~EmptySpellCheckerClient() { } 273 isContinuousSpellCheckingEnabled()274 virtual bool isContinuousSpellCheckingEnabled() OVERRIDE { return false; } toggleContinuousSpellChecking()275 virtual void toggleContinuousSpellChecking() OVERRIDE { } isGrammarCheckingEnabled()276 virtual bool isGrammarCheckingEnabled() OVERRIDE { return false; } 277 textChecker()278 TextCheckerClient& textChecker() { return m_textCheckerClient; } 279 updateSpellingUIWithMisspelledWord(const String &)280 virtual void updateSpellingUIWithMisspelledWord(const String&) OVERRIDE { } showSpellingUI(bool)281 virtual void showSpellingUI(bool) OVERRIDE { } spellingUIIsShowing()282 virtual bool spellingUIIsShowing() OVERRIDE { return false; } 283 284 private: 285 EmptyTextCheckerClient m_textCheckerClient; 286 }; 287 288 class EmptyEditorClient : public EditorClient { 289 WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED; 290 public: EmptyEditorClient()291 EmptyEditorClient() { } ~EmptyEditorClient()292 virtual ~EmptyEditorClient() { } 293 respondToChangedContents()294 virtual void respondToChangedContents() OVERRIDE { } respondToChangedSelection(SelectionType)295 virtual void respondToChangedSelection(SelectionType) OVERRIDE { } 296 canCopyCut(Frame *,bool defaultValue)297 virtual bool canCopyCut(Frame*, bool defaultValue) const OVERRIDE { return defaultValue; } canPaste(Frame *,bool defaultValue)298 virtual bool canPaste(Frame*, bool defaultValue) const OVERRIDE { return defaultValue; } 299 didExecuteCommand(String)300 virtual void didExecuteCommand(String) OVERRIDE { } handleKeyboardEvent()301 virtual bool handleKeyboardEvent() OVERRIDE { return false; } 302 }; 303 304 class EmptyContextMenuClient : public ContextMenuClient { 305 WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED; 306 public: EmptyContextMenuClient()307 EmptyContextMenuClient() { } ~EmptyContextMenuClient()308 virtual ~EmptyContextMenuClient() { } showContextMenu(const ContextMenu *)309 virtual void showContextMenu(const ContextMenu*) OVERRIDE { } clearContextMenu()310 virtual void clearContextMenu() OVERRIDE { } 311 }; 312 313 class EmptyDragClient : public DragClient { 314 WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED; 315 public: EmptyDragClient()316 EmptyDragClient() { } ~EmptyDragClient()317 virtual ~EmptyDragClient() {} actionMaskForDrag(DragData *)318 virtual DragDestinationAction actionMaskForDrag(DragData*) OVERRIDE { return DragDestinationActionNone; } startDrag(DragImage *,const IntPoint &,const IntPoint &,Clipboard *,Frame *,bool)319 virtual void startDrag(DragImage*, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) OVERRIDE { } 320 }; 321 322 class EmptyInspectorClient : public InspectorClient { 323 WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED; 324 public: EmptyInspectorClient()325 EmptyInspectorClient() { } ~EmptyInspectorClient()326 virtual ~EmptyInspectorClient() { } 327 highlight()328 virtual void highlight() OVERRIDE { } hideHighlight()329 virtual void hideHighlight() OVERRIDE { } 330 }; 331 332 class EmptyBackForwardClient : public BackForwardClient { 333 public: backListCount()334 virtual int backListCount() OVERRIDE { return 0; } forwardListCount()335 virtual int forwardListCount() OVERRIDE { return 0; } backForwardListCount()336 virtual int backForwardListCount() OVERRIDE { return 0; } 337 }; 338 339 void fillWithEmptyClients(Page::PageClients&); 340 341 } 342 343 #endif // EmptyClients_h 344