OSDN Git Service

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