WK2: Support Accessibility
[WebKit-https.git] / WebCore / loader / EmptyClients.h
1 /*
2  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3  * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
4  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #ifndef EmptyClients_h
29 #define EmptyClients_h
30
31 #include "ChromeClient.h"
32 #include "Console.h"
33 #include "ContextMenuClient.h"
34 #include "DeviceMotionClient.h"
35 #include "DeviceOrientationClient.h"
36 #include "DocumentLoader.h"
37 #include "DragClient.h"
38 #include "EditCommand.h"
39 #include "EditorClient.h"
40 #include "FloatRect.h"
41 #include "FocusDirection.h"
42 #include "FrameLoaderClient.h"
43 #include "FrameNetworkingContext.h"
44 #include "InspectorClient.h"
45 #include "PluginHalterClient.h"
46 #include "PopupMenu.h"
47 #include "ResourceError.h"
48 #include "SearchPopupMenu.h"
49
50 /*
51  This file holds empty Client stubs for use by WebCore.
52  Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript.
53  This tree depends heavily on Clients (usually provided by WebKit classes).
54
55  This file was first created for SVGImage as it had no way to access the current Page (nor should it,
56  since Images are not tied to a page).
57  See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
58
59  Ideally, whenever you change a Client class, you should add a stub here.
60  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
61 */
62
63 namespace WebCore {
64
65 class SharedGraphicsContext3D;
66
67 class EmptyPopupMenu : public PopupMenu {
68 public:
69     virtual void show(const IntRect&, FrameView*, int) {}
70     virtual void hide() {}
71     virtual void updateFromElement() {}
72     virtual void disconnectClient() {}
73 };
74
75 class EmptySearchPopupMenu : public SearchPopupMenu {
76 public:
77     virtual PopupMenu* popupMenu() { return m_popup.get(); }
78     virtual void saveRecentSearches(const AtomicString&, const Vector<String>&) {}
79     virtual void loadRecentSearches(const AtomicString&, Vector<String>&) {}
80     virtual bool enabled() { return false; }
81
82 private:
83     RefPtr<EmptyPopupMenu> m_popup;
84 };
85
86 class EmptyChromeClient : public ChromeClient {
87 public:
88     virtual ~EmptyChromeClient() { }
89     virtual void chromeDestroyed() { }
90
91     virtual void setWindowRect(const FloatRect&) { }
92     virtual FloatRect windowRect() { return FloatRect(); }
93
94     virtual FloatRect pageRect() { return FloatRect(); }
95
96     virtual float scaleFactor() { return 1.f; }
97
98     virtual void focus() { }
99     virtual void unfocus() { }
100
101     virtual bool canTakeFocus(FocusDirection) { return false; }
102     virtual void takeFocus(FocusDirection) { }
103
104     virtual void focusedNodeChanged(Node*) { }
105     virtual void focusedFrameChanged(Frame*) { }
106
107     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) { return 0; }
108     virtual void show() { }
109
110     virtual bool canRunModal() { return false; }
111     virtual void runModal() { }
112
113     virtual void setToolbarsVisible(bool) { }
114     virtual bool toolbarsVisible() { return false; }
115
116     virtual void setStatusbarVisible(bool) { }
117     virtual bool statusbarVisible() { return false; }
118
119     virtual void setScrollbarsVisible(bool) { }
120     virtual bool scrollbarsVisible() { return false; }
121
122     virtual void setMenubarVisible(bool) { }
123     virtual bool menubarVisible() { return false; }
124
125     virtual void setResizable(bool) { }
126
127     virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, unsigned, const String&) { }
128
129     virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
130     virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
131
132     virtual void closeWindowSoon() { }
133
134     virtual void runJavaScriptAlert(Frame*, const String&) { }
135     virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
136     virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
137     virtual bool shouldInterruptJavaScript() { return false; }
138
139     virtual bool selectItemWritingDirectionIsNatural() { return false; }
140     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
141     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
142
143 #if ENABLE(CONTEXT_MENUS)
144     virtual void showContextMenu() { }
145 #endif
146
147     virtual void setStatusbarText(const String&) { }
148
149     virtual bool tabsToLinks() const { return false; }
150
151     virtual IntRect windowResizerRect() const { return IntRect(); }
152
153     virtual void invalidateWindow(const IntRect&, bool) { }
154     virtual void invalidateContentsAndWindow(const IntRect&, bool) { }
155     virtual void invalidateContentsForSlowScroll(const IntRect&, bool) {};
156     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
157 #if ENABLE(TILED_BACKING_STORE)
158     virtual void delegatedScrollRequested(const IntSize&) { }
159 #endif
160
161     virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
162     virtual IntRect windowToScreen(const IntRect& r) const { return r; }
163     virtual PlatformPageClient platformPageClient() const { return 0; }
164     virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
165
166     virtual void scrollbarsModeDidChange() const { }
167     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
168
169     virtual void setToolTip(const String&, TextDirection) { }
170
171     virtual void print(Frame*) { }
172
173 #if ENABLE(DATABASE)
174     virtual void exceededDatabaseQuota(Frame*, const String&) { }
175 #endif
176
177 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
178     virtual void reachedMaxAppCacheSize(int64_t) { }
179     virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*) { }
180 #endif
181
182 #if ENABLE(NOTIFICATIONS)
183     virtual NotificationPresenter* notificationPresenter() const { return 0; }
184 #endif
185
186     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
187     virtual void chooseIconForFiles(const Vector<String>&, FileChooser*) { }
188
189     virtual void formStateDidChange(const Node*) { }
190
191     virtual void formDidFocus(const Node*) { }
192     virtual void formDidBlur(const Node*) { }
193
194     virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
195
196     virtual void setCursor(const Cursor&) { }
197
198     virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
199
200     virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
201     virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}
202
203 #if USE(ACCELERATED_COMPOSITING)
204     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {}
205     virtual void setNeedsOneShotDrawingSynchronization() {}
206     virtual void scheduleCompositingLayerSync() {}
207 #endif
208
209 #if PLATFORM(WIN)
210     virtual void setLastSetCursorToCurrentCursor() { }
211 #endif
212 #if ENABLE(TOUCH_EVENTS)
213     virtual void needTouchEvents(bool) { }
214 #endif
215 };
216
217 class EmptyFrameLoaderClient : public FrameLoaderClient, public Noncopyable {
218 public:
219     virtual ~EmptyFrameLoaderClient() {  }
220     virtual void frameLoaderDestroyed() { }
221
222     virtual bool hasWebView() const { return true; } // mainly for assertions
223
224     virtual void makeRepresentation(DocumentLoader*) { }
225     virtual void forceLayout() { }
226     virtual void forceLayoutForNonHTML() { }
227
228     virtual void setCopiesOnScroll() { }
229
230     virtual void detachedFromParent2() { }
231     virtual void detachedFromParent3() { }
232
233     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
234
235     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
236     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
237     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
238     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
239     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
240 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
241     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) { return false; }
242 #endif
243     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
244     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
245     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
246     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
247     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
248
249     virtual void dispatchDidHandleOnloadEvents() { }
250     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
251     virtual void dispatchDidCancelClientRedirect() { }
252     virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
253     virtual void dispatchDidChangeLocationWithinPage() { }
254     virtual void dispatchDidPushStateWithinPage() { }
255     virtual void dispatchDidReplaceStateWithinPage() { }
256     virtual void dispatchDidPopStateWithinPage() { }
257     virtual void dispatchWillClose() { }
258     virtual void dispatchDidReceiveIcon() { }
259     virtual void dispatchDidStartProvisionalLoad() { }
260     virtual void dispatchDidReceiveTitle(const String&) { }
261     virtual void dispatchDidChangeIcons() { }
262     virtual void dispatchDidCommitLoad() { }
263     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
264     virtual void dispatchDidFailLoad(const ResourceError&) { }
265     virtual void dispatchDidFinishDocumentLoad() { }
266     virtual void dispatchDidFinishLoad() { }
267     virtual void dispatchDidFirstLayout() { }
268     virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
269
270     virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; }
271     virtual void dispatchShow() { }
272
273     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { }
274     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
275     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
276     virtual void cancelPolicyCheck() { }
277
278     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
279
280     virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) { }
281     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
282
283     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
284     virtual void revertToProvisionalState(DocumentLoader*) { }
285     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
286
287     virtual void willChangeEstimatedProgress() { }
288     virtual void didChangeEstimatedProgress() { }
289     virtual void postProgressStartedNotification() { }
290     virtual void postProgressEstimateChangedNotification() { }
291     virtual void postProgressFinishedNotification() { }
292
293     virtual void setMainFrameDocumentReady(bool) { }
294
295     virtual void startDownload(const ResourceRequest&) { }
296
297     virtual void willChangeTitle(DocumentLoader*) { }
298     virtual void didChangeTitle(DocumentLoader*) { }
299
300     virtual void committedLoad(DocumentLoader*, const char*, int) { }
301     virtual void finishedLoading(DocumentLoader*) { }
302
303     virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
304     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
305     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
306     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
307
308     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
309     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
310     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
311
312     virtual bool shouldFallBack(const ResourceError&) { return false; }
313
314     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
315     virtual bool canShowMIMEType(const String&) const { return false; }
316     virtual bool canShowMIMETypeAsHTML(const String&) const { return false; }
317     virtual bool representationExistsForURLScheme(const String&) const { return false; }
318     virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
319
320     virtual void frameLoadCompleted() { }
321     virtual void restoreViewState() { }
322     virtual void provisionalLoadStarted() { }
323     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
324     virtual void didFinishLoad() { }
325     virtual void prepareForDataSourceReplacement() { }
326
327     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
328     virtual void setTitle(const String&, const KURL&) { }
329
330     virtual String userAgent(const KURL&) { return ""; }
331
332     virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
333     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
334     virtual void transitionToCommittedForNewPage() { }    
335
336     virtual void didSaveToPageCache() { }
337     virtual void didRestoreFromPageCache() { }
338
339     virtual void dispatchDidBecomeFrameset(bool) { }
340
341     virtual void updateGlobalHistory() { }
342     virtual void updateGlobalHistoryRedirectLinks() { }
343     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
344     virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
345     virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { };
346     virtual void dispatchDidChangeBackForwardIndex() const { }
347     virtual void saveViewStateToItem(HistoryItem*) { }
348     virtual bool canCachePage() const { return false; }
349     virtual void didDisplayInsecureContent() { }
350     virtual void didRunInsecureContent(SecurityOrigin*) { }
351     virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
352     virtual void didTransferChildFrameToNewDocument(Page*) { }
353     virtual void transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*) { }
354     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
355     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
356 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
357     virtual PassRefPtr<Widget> createMediaPlayerProxyPlugin(const IntSize&, HTMLMediaElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&) { return 0; }
358     virtual void hideMediaPlayerProxyPlugin(Widget*) { }
359     virtual void showMediaPlayerProxyPlugin(Widget*) { }
360 #endif
361
362     virtual ObjectContentType objectContentType(const KURL&, const String&) { return ObjectContentType(); }
363     virtual String overrideMediaType() const { return String(); }
364
365     virtual void redirectDataToPlugin(Widget*) { }
366     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
367     virtual void documentElementAvailable() { }
368     virtual void didPerformFirstNavigation() const { }
369
370     virtual void registerForIconNotification(bool) { }
371
372 #if USE(V8)
373     virtual void didCreateScriptContextForFrame() { }
374     virtual void didDestroyScriptContextForFrame() { }
375     virtual void didCreateIsolatedScriptContext() { }
376     virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
377 #endif
378
379 #if PLATFORM(MAC)
380     virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
381     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
382 #endif
383 #if USE(CFNETWORK)
384     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
385 #endif
386
387     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() { return PassRefPtr<FrameNetworkingContext>(); }
388 };
389
390 class EmptyEditorClient : public EditorClient, public Noncopyable {
391 public:
392     virtual ~EmptyEditorClient() { }
393     virtual void pageDestroyed() { }
394
395     virtual bool shouldDeleteRange(Range*) { return false; }
396     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
397     virtual bool smartInsertDeleteEnabled() { return false; }
398     virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
399     virtual bool isContinuousSpellCheckingEnabled() { return false; }
400     virtual void toggleContinuousSpellChecking() { }
401     virtual bool isGrammarCheckingEnabled() { return false; }
402     virtual void toggleGrammarChecking() { }
403     virtual int spellCheckerDocumentTag() { return -1; }
404
405     virtual bool selectWordBeforeMenuEvent() { return false; }
406     virtual bool isEditable() { return false; }
407
408     virtual bool shouldBeginEditing(Range*) { return false; }
409     virtual bool shouldEndEditing(Range*) { return false; }
410     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
411     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
412     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
413     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
414
415     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
416     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
417     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
418     //  virtual bool doCommandBySelector(SEL selector) { return false; }
419     //
420     virtual void didBeginEditing() { }
421     virtual void respondToChangedContents() { }
422     virtual void respondToChangedSelection() { }
423     virtual void didEndEditing() { }
424     virtual void didWriteSelectionToPasteboard() { }
425     virtual void didSetSelectionTypesForPasteboard() { }
426     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
427     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
428     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
429
430     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
431     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
432     virtual void clearUndoRedoOperations() { }
433
434     virtual bool canUndo() const { return false; }
435     virtual bool canRedo() const { return false; }
436
437     virtual void undo() { }
438     virtual void redo() { }
439
440     virtual void handleKeyboardEvent(KeyboardEvent*) { }
441     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
442
443     virtual void textFieldDidBeginEditing(Element*) { }
444     virtual void textFieldDidEndEditing(Element*) { }
445     virtual void textDidChangeInTextField(Element*) { }
446     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
447     virtual void textWillBeDeletedInTextField(Element*) { }
448     virtual void textDidChangeInTextArea(Element*) { }
449
450 #if PLATFORM(MAC)
451     virtual void markedTextAbandoned(Frame*) { }
452
453     virtual NSString* userVisibleString(NSURL*) { return 0; }
454     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; };
455     virtual void setInsertionPasteboard(NSPasteboard*) { };
456 #ifdef BUILDING_ON_TIGER
457     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
458 #endif
459 #endif
460 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
461     virtual void uppercaseWord() { }
462     virtual void lowercaseWord() { }
463     virtual void capitalizeWord() { }
464     virtual void showSubstitutionsPanel(bool) { }
465     virtual bool substitutionsPanelIsShowing() { return false; }
466     virtual void toggleSmartInsertDelete() { }
467     virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
468     virtual void toggleAutomaticQuoteSubstitution() { }
469     virtual bool isAutomaticLinkDetectionEnabled() { return false; }
470     virtual void toggleAutomaticLinkDetection() { }
471     virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
472     virtual void toggleAutomaticDashSubstitution() { }
473     virtual bool isAutomaticTextReplacementEnabled() { return false; }
474     virtual void toggleAutomaticTextReplacement() { }
475     virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
476     virtual void toggleAutomaticSpellingCorrection() { }
477 #endif
478     virtual void ignoreWordInSpellDocument(const String&) { }
479     virtual void learnWord(const String&) { }
480     virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
481     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
482     virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
483 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
484     virtual void checkTextOfParagraph(const UChar*, int, uint64_t, Vector<TextCheckingResult>&) { };
485 #endif
486 #if SUPPORT_AUTOCORRECTION_PANEL
487     virtual void showCorrectionPanel(CorrectionPanelInfo::PanelType, const FloatRect&, const String&, const String&, const Vector<String>&, Editor*) { }
488     virtual void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel) { }
489     virtual bool isShowingCorrectionPanel() { return false; }
490 #endif
491     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
492     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
493     virtual void showSpellingUI(bool) { }
494     virtual bool spellingUIIsShowing() { return false; }
495     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) { }
496     virtual void willSetInputMethodState() { }
497     virtual void setInputMethodState(bool) { }
498     virtual void requestCheckingOfString(SpellChecker*, int, const String&) { }
499 };
500
501 #if ENABLE(CONTEXT_MENUS)
502 class EmptyContextMenuClient : public ContextMenuClient, public Noncopyable {
503 public:
504     virtual ~EmptyContextMenuClient() {  }
505     virtual void contextMenuDestroyed() { }
506
507 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
508     virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) { return 0; }
509 #else
510     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
511 #endif
512     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
513
514     virtual void downloadURL(const KURL&) { }
515     virtual void copyImageToClipboard(const HitTestResult&) { }
516     virtual void searchWithGoogle(const Frame*) { }
517     virtual void lookUpInDictionary(Frame*) { }
518     virtual bool isSpeaking() { return false; }
519     virtual void speak(const String&) { }
520     virtual void stopSpeaking() { }
521
522 #if PLATFORM(MAC)
523     virtual void searchWithSpotlight() { }
524 #endif
525 };
526 #endif // ENABLE(CONTEXT_MENUS)
527
528 #if ENABLE(DRAG_SUPPORT)
529 class EmptyDragClient : public DragClient, public Noncopyable {
530 public:
531     virtual ~EmptyDragClient() {}
532     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
533     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
534     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
535     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
536     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
537     virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
538     virtual void dragControllerDestroyed() { }
539 };
540 #endif // ENABLE(DRAG_SUPPORT)
541
542 class EmptyInspectorClient : public InspectorClient, public Noncopyable {
543 public:
544     virtual ~EmptyInspectorClient() { }
545
546     virtual void inspectorDestroyed() { }
547     
548     virtual void openInspectorFrontend(InspectorController*) { }
549
550     virtual void highlight(Node*) { }
551     virtual void hideHighlight() { }
552
553     virtual void populateSetting(const String&, String*) { }
554     virtual void storeSetting(const String&, const String&) { }
555     virtual bool sendMessageToFrontend(const String&) { return false; }
556 };
557
558 class EmptyDeviceMotionClient : public DeviceMotionClient {
559 public:
560     virtual void setController(DeviceMotionController*) { }
561     virtual void startUpdating() { }
562     virtual void stopUpdating() { }
563     virtual DeviceMotionData* currentDeviceMotion() const { return 0; }
564     virtual void deviceMotionControllerDestroyed() { }
565 };
566
567 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
568 public:
569     virtual void setController(DeviceOrientationController*) { }
570     virtual void startUpdating() { }
571     virtual void stopUpdating() { }
572     virtual DeviceOrientation* lastOrientation() const { return 0; }
573     virtual void deviceOrientationControllerDestroyed() { }
574 };
575
576 }
577
578 #endif // EmptyClients_h