Home | History | Annotate | Download | only in loader
      1 /*
      2  * Copyright (C) 2006 Eric Seidel (eric (at) webkit.org)
      3  * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
      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 #ifndef EmptyClients_h
     28 #define EmptyClients_h
     29 
     30 #include "ChromeClient.h"
     31 #include "ContextMenuClient.h"
     32 #include "Console.h"
     33 #include "DocumentLoader.h"
     34 #include "DragClient.h"
     35 #include "EditCommand.h"
     36 #include "EditorClient.h"
     37 #include "FloatRect.h"
     38 #include "FocusDirection.h"
     39 #include "FormState.h"
     40 #include "FrameLoaderClient.h"
     41 #include "InspectorClient.h"
     42 #include "PluginHalterClient.h"
     43 #include "ResourceError.h"
     44 #include "SharedBuffer.h"
     45 
     46 /*
     47  This file holds empty Client stubs for use by WebCore.
     48  Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript.
     49  This tree depends heavily on Clients (usually provided by WebKit classes).
     50 
     51  This file was first created for SVGImage as it had no way to access the current Page (nor should it,
     52  since Images are not tied to a page).
     53  See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
     54 
     55  Ideally, whenever you change a Client class, you should add a stub here.
     56  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
     57 */
     58 
     59 namespace WebCore {
     60 
     61 class EmptyChromeClient : public ChromeClient {
     62 public:
     63     virtual ~EmptyChromeClient() { }
     64     virtual void chromeDestroyed() { }
     65 
     66     virtual void setWindowRect(const FloatRect&) { }
     67     virtual FloatRect windowRect() { return FloatRect(); }
     68 
     69     virtual FloatRect pageRect() { return FloatRect(); }
     70 
     71     virtual float scaleFactor() { return 1.f; }
     72 
     73 #ifdef ANDROID_USER_GESTURE
     74     virtual void focus(bool userGesture) { }
     75 #else
     76     virtual void focus() { }
     77 #endif
     78     virtual void unfocus() { }
     79 
     80     virtual bool canTakeFocus(FocusDirection) { return false; }
     81     virtual void takeFocus(FocusDirection) { }
     82 
     83     virtual void focusedNodeChanged(Node*) { }
     84 
     85     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; }
     86     virtual void show() { }
     87 
     88     virtual bool canRunModal() { return false; }
     89     virtual void runModal() { }
     90 
     91     virtual void setToolbarsVisible(bool) { }
     92     virtual bool toolbarsVisible() { return false; }
     93 
     94     virtual void setStatusbarVisible(bool) { }
     95     virtual bool statusbarVisible() { return false; }
     96 
     97     virtual void setScrollbarsVisible(bool) { }
     98     virtual bool scrollbarsVisible() { return false; }
     99 
    100     virtual void setMenubarVisible(bool) { }
    101     virtual bool menubarVisible() { return false; }
    102 
    103     virtual void setResizable(bool) { }
    104 
    105     virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, unsigned, const String&) { }
    106 
    107     virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
    108     virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
    109 
    110     virtual void closeWindowSoon() { }
    111 
    112     virtual void runJavaScriptAlert(Frame*, const String&) { }
    113     virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
    114     virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
    115     virtual bool shouldInterruptJavaScript() { return false; }
    116 
    117     virtual void setStatusbarText(const String&) { }
    118 
    119     virtual bool tabsToLinks() const { return false; }
    120 
    121     virtual IntRect windowResizerRect() const { return IntRect(); }
    122     virtual void addToDirtyRegion(const IntRect&) { }
    123     virtual void scrollBackingStore(int, int, const IntRect&, const IntRect&) { }
    124     virtual void updateBackingStore() { }
    125 
    126     virtual void repaint(const IntRect&, bool, bool, bool) { }
    127     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
    128     virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
    129     virtual IntRect windowToScreen(const IntRect& r) const { return r; }
    130     virtual PlatformPageClient platformPageClient() const { return 0; }
    131     virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
    132 
    133     virtual void scrollbarsModeDidChange() const { }
    134     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
    135 
    136     virtual void setToolTip(const String&, TextDirection) { }
    137 
    138     virtual void print(Frame*) { }
    139 
    140 #if ENABLE(DATABASE)
    141     virtual void exceededDatabaseQuota(Frame*, const String&) { }
    142 #endif
    143 
    144 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
    145     virtual void reachedMaxAppCacheSize(int64_t) { }
    146 #endif
    147 
    148 #if ENABLE(NOTIFICATIONS)
    149     virtual NotificationPresenter* notificationPresenter() const { return 0; }
    150 #endif
    151 
    152     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
    153 
    154     virtual void formStateDidChange(const Node*) { }
    155 
    156     virtual void formDidFocus(const Node*) { }
    157     virtual void formDidBlur(const Node*) { }
    158 
    159     virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
    160 
    161     virtual bool setCursor(PlatformCursorHandle) { return false; }
    162 
    163     virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
    164 
    165     virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
    166     virtual void cancelGeolocationPermissionRequestForFrame(Frame*) {}
    167 
    168 #if USE(ACCELERATED_COMPOSITING)
    169     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {};
    170     virtual void setNeedsOneShotDrawingSynchronization() {};
    171     virtual void scheduleCompositingLayerSync() {};
    172 #endif
    173 
    174 #if ENABLE(TOUCH_EVENTS)
    175     virtual void needTouchEvents(bool) { }
    176 #endif
    177 };
    178 
    179 class EmptyFrameLoaderClient : public FrameLoaderClient, public Noncopyable {
    180 public:
    181     virtual ~EmptyFrameLoaderClient() {  }
    182     virtual void frameLoaderDestroyed() { }
    183 
    184     virtual bool hasWebView() const { return true; } // mainly for assertions
    185 
    186     virtual void makeRepresentation(DocumentLoader*) { }
    187     virtual void forceLayout() { }
    188     virtual void forceLayoutForNonHTML() { }
    189 
    190     virtual void setCopiesOnScroll() { }
    191 
    192     virtual void detachedFromParent2() { }
    193     virtual void detachedFromParent3() { }
    194 
    195     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
    196 
    197     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
    198     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
    199     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
    200     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
    201     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
    202     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
    203     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
    204     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
    205     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
    206     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
    207     virtual void dispatchDidLoadResourceByXMLHttpRequest(unsigned long, const ScriptString&) { }
    208 
    209     virtual void dispatchDidHandleOnloadEvents() { }
    210     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
    211     virtual void dispatchDidCancelClientRedirect() { }
    212     virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
    213     virtual void dispatchDidChangeLocationWithinPage() { }
    214     virtual void dispatchDidPushStateWithinPage() { }
    215     virtual void dispatchDidReplaceStateWithinPage() { }
    216     virtual void dispatchDidPopStateWithinPage() { }
    217     virtual void dispatchWillClose() { }
    218     virtual void dispatchDidReceiveIcon() { }
    219     virtual void dispatchDidStartProvisionalLoad() { }
    220     virtual void dispatchDidReceiveTitle(const String&) { }
    221     virtual void dispatchDidCommitLoad() { }
    222     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
    223     virtual void dispatchDidFailLoad(const ResourceError&) { }
    224     virtual void dispatchDidFinishDocumentLoad() { }
    225     virtual void dispatchDidFinishLoad() { }
    226     virtual void dispatchDidFirstLayout() { }
    227     virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
    228 
    229     virtual Frame* dispatchCreatePage() { return 0; }
    230     virtual void dispatchShow() { }
    231 
    232     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { }
    233     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
    234     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
    235     virtual void cancelPolicyCheck() { }
    236 
    237     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
    238 
    239     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
    240 
    241     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
    242     virtual void revertToProvisionalState(DocumentLoader*) { }
    243     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
    244 
    245     virtual void willChangeEstimatedProgress() { }
    246     virtual void didChangeEstimatedProgress() { }
    247     virtual void postProgressStartedNotification() { }
    248     virtual void postProgressEstimateChangedNotification() { }
    249     virtual void postProgressFinishedNotification() { }
    250 
    251     virtual void setMainFrameDocumentReady(bool) { }
    252 
    253     virtual void startDownload(const ResourceRequest&) { }
    254 
    255     virtual void willChangeTitle(DocumentLoader*) { }
    256     virtual void didChangeTitle(DocumentLoader*) { }
    257 
    258     virtual void committedLoad(DocumentLoader*, const char*, int) { }
    259     virtual void finishedLoading(DocumentLoader*) { }
    260 
    261     virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
    262     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
    263     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
    264     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
    265 
    266     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
    267     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
    268     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
    269 
    270     virtual bool shouldFallBack(const ResourceError&) { return false; }
    271 
    272     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
    273     virtual bool canShowMIMEType(const String&) const { return false; }
    274     virtual bool representationExistsForURLScheme(const String&) const { return false; }
    275     virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
    276 
    277     virtual void frameLoadCompleted() { }
    278     virtual void restoreViewState() { }
    279     virtual void provisionalLoadStarted() { }
    280     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
    281     virtual void didFinishLoad() { }
    282     virtual void prepareForDataSourceReplacement() { }
    283 
    284     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
    285     virtual void setTitle(const String&, const KURL&) { }
    286 
    287     virtual String userAgent(const KURL&) { return ""; }
    288 
    289     virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
    290     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
    291     virtual void transitionToCommittedForNewPage() { }
    292 
    293     virtual void updateGlobalHistory() { }
    294     virtual void updateGlobalHistoryRedirectLinks() { }
    295     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
    296     virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
    297     virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { };
    298     virtual void dispatchDidChangeBackForwardIndex() const { }
    299     virtual void saveViewStateToItem(HistoryItem*) { }
    300     virtual bool canCachePage() const { return false; }
    301     virtual void didDisplayInsecureContent() { }
    302     virtual void didRunInsecureContent(SecurityOrigin*) { }
    303     virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
    304     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
    305     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
    306 
    307     virtual ObjectContentType objectContentType(const KURL&, const String&) { return ObjectContentType(); }
    308     virtual String overrideMediaType() const { return String(); }
    309 
    310     virtual void redirectDataToPlugin(Widget*) { }
    311     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
    312     virtual void documentElementAvailable() { }
    313     virtual void didPerformFirstNavigation() const { }
    314 
    315     virtual void registerForIconNotification(bool) { }
    316 
    317 #if USE(V8)
    318     virtual void didCreateScriptContextForFrame() { }
    319     virtual void didDestroyScriptContextForFrame() { }
    320     virtual void didCreateIsolatedScriptContext() { }
    321 #endif
    322 
    323 #if PLATFORM(MAC)
    324     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
    325 #endif
    326 #if USE(CFNETWORK)
    327     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
    328 #endif
    329 
    330 };
    331 
    332 class EmptyEditorClient : public EditorClient, public Noncopyable {
    333 public:
    334     virtual ~EmptyEditorClient() { }
    335     virtual void pageDestroyed() { }
    336 
    337     virtual bool shouldDeleteRange(Range*) { return false; }
    338     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
    339     virtual bool smartInsertDeleteEnabled() { return false; }
    340     virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
    341     virtual bool isContinuousSpellCheckingEnabled() { return false; }
    342     virtual void toggleContinuousSpellChecking() { }
    343     virtual bool isGrammarCheckingEnabled() { return false; }
    344     virtual void toggleGrammarChecking() { }
    345     virtual int spellCheckerDocumentTag() { return -1; }
    346 
    347     virtual bool selectWordBeforeMenuEvent() { return false; }
    348     virtual bool isEditable() { return false; }
    349 
    350     virtual bool shouldBeginEditing(Range*) { return false; }
    351     virtual bool shouldEndEditing(Range*) { return false; }
    352     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
    353     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
    354     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
    355     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
    356 
    357     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
    358     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
    359     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
    360     //  virtual bool doCommandBySelector(SEL selector) { return false; }
    361     //
    362     virtual void didBeginEditing() { }
    363     virtual void respondToChangedContents() { }
    364     virtual void respondToChangedSelection() { }
    365     virtual void didEndEditing() { }
    366     virtual void didWriteSelectionToPasteboard() { }
    367     virtual void didSetSelectionTypesForPasteboard() { }
    368     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
    369     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
    370     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
    371 
    372     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
    373     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
    374     virtual void clearUndoRedoOperations() { }
    375 
    376     virtual bool canUndo() const { return false; }
    377     virtual bool canRedo() const { return false; }
    378 
    379     virtual void undo() { }
    380     virtual void redo() { }
    381 
    382     virtual void handleKeyboardEvent(KeyboardEvent*) { }
    383     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
    384 
    385     virtual void textFieldDidBeginEditing(Element*) { }
    386     virtual void textFieldDidEndEditing(Element*) { }
    387     virtual void textDidChangeInTextField(Element*) { }
    388     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
    389     virtual void textWillBeDeletedInTextField(Element*) { }
    390     virtual void textDidChangeInTextArea(Element*) { }
    391 
    392 #if PLATFORM(MAC)
    393     virtual void markedTextAbandoned(Frame*) { }
    394 
    395     virtual NSString* userVisibleString(NSURL*) { return 0; }
    396 #ifdef BUILDING_ON_TIGER
    397     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
    398 #endif
    399 #endif
    400 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
    401     virtual void uppercaseWord() { }
    402     virtual void lowercaseWord() { }
    403     virtual void capitalizeWord() { }
    404     virtual void showSubstitutionsPanel(bool) { }
    405     virtual bool substitutionsPanelIsShowing() { return false; }
    406     virtual void toggleSmartInsertDelete() { }
    407     virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
    408     virtual void toggleAutomaticQuoteSubstitution() { }
    409     virtual bool isAutomaticLinkDetectionEnabled() { return false; }
    410     virtual void toggleAutomaticLinkDetection() { }
    411     virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
    412     virtual void toggleAutomaticDashSubstitution() { }
    413     virtual bool isAutomaticTextReplacementEnabled() { return false; }
    414     virtual void toggleAutomaticTextReplacement() { }
    415     virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
    416     virtual void toggleAutomaticSpellingCorrection() { }
    417 #endif
    418     virtual void ignoreWordInSpellDocument(const String&) { }
    419     virtual void learnWord(const String&) { }
    420     virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
    421     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
    422     virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
    423 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
    424     virtual void checkTextOfParagraph(const UChar*, int, uint64_t, Vector<TextCheckingResult>&) { };
    425 #endif
    426     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
    427     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
    428     virtual void showSpellingUI(bool) { }
    429     virtual bool spellingUIIsShowing() { return false; }
    430     virtual void getGuessesForWord(const String&, Vector<String>&) { }
    431     virtual void setInputMethodState(bool) { }
    432 
    433 
    434 };
    435 
    436 #if ENABLE(CONTEXT_MENUS)
    437 class EmptyContextMenuClient : public ContextMenuClient, public Noncopyable {
    438 public:
    439     virtual ~EmptyContextMenuClient() {  }
    440     virtual void contextMenuDestroyed() { }
    441 
    442     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
    443     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
    444 
    445     virtual void downloadURL(const KURL&) { }
    446     virtual void copyImageToClipboard(const HitTestResult&) { }
    447     virtual void searchWithGoogle(const Frame*) { }
    448     virtual void lookUpInDictionary(Frame*) { }
    449     virtual bool isSpeaking() { return false; }
    450     virtual void speak(const String&) { }
    451     virtual void stopSpeaking() { }
    452 
    453 #if PLATFORM(MAC)
    454     virtual void searchWithSpotlight() { }
    455 #endif
    456 };
    457 #endif // ENABLE(CONTEXT_MENUS)
    458 
    459 #if ENABLE(DRAG_SUPPORT)
    460 class EmptyDragClient : public DragClient, public Noncopyable {
    461 public:
    462     virtual ~EmptyDragClient() {}
    463     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
    464     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
    465     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
    466     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
    467     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
    468     virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
    469     virtual void dragControllerDestroyed() { }
    470 };
    471 #endif // ENABLE(DRAG_SUPPORT)
    472 
    473 class EmptyInspectorClient : public InspectorClient, public Noncopyable {
    474 public:
    475     virtual ~EmptyInspectorClient() { }
    476 
    477     virtual void inspectorDestroyed() { }
    478 
    479     virtual Page* createPage() { return 0; };
    480 
    481     virtual String localizedStringsURL() { return String(); }
    482 
    483     virtual String hiddenPanels() { return String(); }
    484 
    485     virtual void showWindow() { }
    486     virtual void closeWindow() { }
    487 
    488     virtual void attachWindow() { }
    489     virtual void detachWindow() { }
    490 
    491     virtual void setAttachedWindowHeight(unsigned) { }
    492 
    493     virtual void highlight(Node*) { }
    494     virtual void hideHighlight() { }
    495     virtual void inspectedURLChanged(const String&) { }
    496 
    497     virtual void populateSetting(const String&, String*) { }
    498     virtual void storeSetting(const String&, const String&) { }
    499 
    500     virtual void inspectorWindowObjectCleared() { }
    501 };
    502 
    503 }
    504 
    505 #endif // EmptyClients_h
    506 
    507