Add navigator.registerProtocolHandler behind a flag.
[WebKit-https.git] / Source / 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 bool selectItemAlignmentFollowsMenuWritingDirection() { return false; }
141     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
142     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
143
144 #if ENABLE(CONTEXT_MENUS)
145     virtual void showContextMenu() { }
146 #endif
147
148 #if ENABLE(REGISTER_PROTOCOL_HANDLER)
149     virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { }
150 #endif
151
152     virtual void setStatusbarText(const String&) { }
153
154     virtual bool tabsToLinks() const { return false; }
155
156     virtual IntRect windowResizerRect() const { return IntRect(); }
157
158     virtual void invalidateWindow(const IntRect&, bool) { }
159     virtual void invalidateContentsAndWindow(const IntRect&, bool) { }
160     virtual void invalidateContentsForSlowScroll(const IntRect&, bool) {};
161     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
162 #if ENABLE(TILED_BACKING_STORE)
163     virtual void delegatedScrollRequested(const IntSize&) { }
164 #endif
165 #if ENABLE(REQUEST_ANIMATION_FRAME)
166     virtual void scheduleAnimation() { }
167 #endif
168
169     virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
170     virtual IntRect windowToScreen(const IntRect& r) const { return r; }
171     virtual PlatformPageClient platformPageClient() const { return 0; }
172     virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
173
174     virtual void scrollbarsModeDidChange() const { }
175     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
176
177     virtual void setToolTip(const String&, TextDirection) { }
178
179     virtual void print(Frame*) { }
180
181 #if ENABLE(DATABASE)
182     virtual void exceededDatabaseQuota(Frame*, const String&) { }
183 #endif
184
185 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
186     virtual void reachedMaxAppCacheSize(int64_t) { }
187     virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*) { }
188 #endif
189
190 #if ENABLE(NOTIFICATIONS)
191     virtual NotificationPresenter* notificationPresenter() const { return 0; }
192 #endif
193
194     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
195     virtual void chooseIconForFiles(const Vector<String>&, FileChooser*) { }
196
197     virtual void formStateDidChange(const Node*) { }
198
199     virtual void formDidFocus(const Node*) { }
200     virtual void formDidBlur(const Node*) { }
201
202     virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
203
204     virtual void setCursor(const Cursor&) { }
205
206     virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
207
208     virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
209     virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}
210
211 #if USE(ACCELERATED_COMPOSITING)
212     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {}
213     virtual void setNeedsOneShotDrawingSynchronization() {}
214     virtual void scheduleCompositingLayerSync() {}
215 #endif
216
217 #if PLATFORM(WIN)
218     virtual void setLastSetCursorToCurrentCursor() { }
219 #endif
220 #if ENABLE(TOUCH_EVENTS)
221     virtual void needTouchEvents(bool) { }
222 #endif
223 };
224
225 class EmptyFrameLoaderClient : public FrameLoaderClient {
226     WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
227 public:
228     EmptyFrameLoaderClient() { }
229     virtual ~EmptyFrameLoaderClient() {  }
230     virtual void frameLoaderDestroyed() { }
231
232     virtual bool hasWebView() const { return true; } // mainly for assertions
233
234     virtual void makeRepresentation(DocumentLoader*) { }
235     virtual void forceLayout() { }
236     virtual void forceLayoutForNonHTML() { }
237
238     virtual void setCopiesOnScroll() { }
239
240     virtual void detachedFromParent2() { }
241     virtual void detachedFromParent3() { }
242
243     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
244
245     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
246     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
247     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
248     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
249     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
250 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
251     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) { return false; }
252 #endif
253     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
254     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
255     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
256     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
257     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
258
259     virtual void dispatchDidHandleOnloadEvents() { }
260     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
261     virtual void dispatchDidCancelClientRedirect() { }
262     virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
263     virtual void dispatchDidChangeLocationWithinPage() { }
264     virtual void dispatchDidPushStateWithinPage() { }
265     virtual void dispatchDidReplaceStateWithinPage() { }
266     virtual void dispatchDidPopStateWithinPage() { }
267     virtual void dispatchWillClose() { }
268     virtual void dispatchDidReceiveIcon() { }
269     virtual void dispatchDidStartProvisionalLoad() { }
270     virtual void dispatchDidReceiveTitle(const String&) { }
271     virtual void dispatchDidChangeIcons() { }
272     virtual void dispatchDidCommitLoad() { }
273     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
274     virtual void dispatchDidFailLoad(const ResourceError&) { }
275     virtual void dispatchDidFinishDocumentLoad() { }
276     virtual void dispatchDidFinishLoad() { }
277     virtual void dispatchDidFirstLayout() { }
278     virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
279
280     virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; }
281     virtual void dispatchShow() { }
282
283     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { }
284     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
285     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
286     virtual void cancelPolicyCheck() { }
287
288     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
289
290     virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) { }
291     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
292
293     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
294     virtual void revertToProvisionalState(DocumentLoader*) { }
295     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
296
297     virtual void willChangeEstimatedProgress() { }
298     virtual void didChangeEstimatedProgress() { }
299     virtual void postProgressStartedNotification() { }
300     virtual void postProgressEstimateChangedNotification() { }
301     virtual void postProgressFinishedNotification() { }
302
303     virtual void setMainFrameDocumentReady(bool) { }
304
305     virtual void startDownload(const ResourceRequest&) { }
306
307     virtual void willChangeTitle(DocumentLoader*) { }
308     virtual void didChangeTitle(DocumentLoader*) { }
309
310     virtual void committedLoad(DocumentLoader*, const char*, int) { }
311     virtual void finishedLoading(DocumentLoader*) { }
312
313     virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
314     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
315     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
316     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
317
318     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
319     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
320     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
321
322     virtual bool shouldFallBack(const ResourceError&) { return false; }
323
324     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
325     virtual bool canShowMIMEType(const String&) const { return false; }
326     virtual bool canShowMIMETypeAsHTML(const String&) const { return false; }
327     virtual bool representationExistsForURLScheme(const String&) const { return false; }
328     virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
329
330     virtual void frameLoadCompleted() { }
331     virtual void restoreViewState() { }
332     virtual void provisionalLoadStarted() { }
333     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
334     virtual void didFinishLoad() { }
335     virtual void prepareForDataSourceReplacement() { }
336
337     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
338     virtual void setTitle(const String&, const KURL&) { }
339
340     virtual String userAgent(const KURL&) { return ""; }
341
342     virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
343     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
344     virtual void transitionToCommittedForNewPage() { }    
345
346     virtual void didSaveToPageCache() { }
347     virtual void didRestoreFromPageCache() { }
348
349     virtual void dispatchDidBecomeFrameset(bool) { }
350
351     virtual void updateGlobalHistory() { }
352     virtual void updateGlobalHistoryRedirectLinks() { }
353     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
354     virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
355     virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { };
356     virtual void dispatchDidChangeBackForwardIndex() const { }
357     virtual void saveViewStateToItem(HistoryItem*) { }
358     virtual bool canCachePage() const { return false; }
359     virtual void didDisplayInsecureContent() { }
360     virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) { }
361     virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
362     virtual void didTransferChildFrameToNewDocument(Page*) { }
363     virtual void transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*) { }
364     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
365     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
366 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
367     virtual PassRefPtr<Widget> createMediaPlayerProxyPlugin(const IntSize&, HTMLMediaElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&) { return 0; }
368     virtual void hideMediaPlayerProxyPlugin(Widget*) { }
369     virtual void showMediaPlayerProxyPlugin(Widget*) { }
370 #endif
371
372     virtual ObjectContentType objectContentType(const KURL&, const String&) { return ObjectContentType(); }
373     virtual String overrideMediaType() const { return String(); }
374
375     virtual void redirectDataToPlugin(Widget*) { }
376     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
377     virtual void documentElementAvailable() { }
378     virtual void didPerformFirstNavigation() const { }
379
380     virtual void registerForIconNotification(bool) { }
381
382 #if USE(V8)
383     virtual void didCreateScriptContextForFrame() { }
384     virtual void didDestroyScriptContextForFrame() { }
385     virtual void didCreateIsolatedScriptContext() { }
386     virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
387 #endif
388
389 #if PLATFORM(MAC)
390     virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
391     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
392 #endif
393 #if USE(CFNETWORK)
394     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
395 #endif
396
397     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() { return PassRefPtr<FrameNetworkingContext>(); }
398 };
399
400 class EmptyEditorClient : public EditorClient {
401     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
402 public:
403     EmptyEditorClient() { }
404     virtual ~EmptyEditorClient() { }
405     virtual void pageDestroyed() { }
406
407     virtual bool shouldDeleteRange(Range*) { return false; }
408     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
409     virtual bool smartInsertDeleteEnabled() { return false; }
410     virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
411     virtual bool isContinuousSpellCheckingEnabled() { return false; }
412     virtual void toggleContinuousSpellChecking() { }
413     virtual bool isGrammarCheckingEnabled() { return false; }
414     virtual void toggleGrammarChecking() { }
415     virtual int spellCheckerDocumentTag() { return -1; }
416
417     virtual bool selectWordBeforeMenuEvent() { return false; }
418     virtual bool isEditable() { return false; }
419
420     virtual bool shouldBeginEditing(Range*) { return false; }
421     virtual bool shouldEndEditing(Range*) { return false; }
422     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
423     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
424     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
425     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
426
427     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
428     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
429     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
430     //  virtual bool doCommandBySelector(SEL selector) { return false; }
431     //
432     virtual void didBeginEditing() { }
433     virtual void respondToChangedContents() { }
434     virtual void respondToChangedSelection() { }
435     virtual void didEndEditing() { }
436     virtual void didWriteSelectionToPasteboard() { }
437     virtual void didSetSelectionTypesForPasteboard() { }
438     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
439     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
440     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
441
442     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
443     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
444     virtual void clearUndoRedoOperations() { }
445
446     virtual bool canUndo() const { return false; }
447     virtual bool canRedo() const { return false; }
448
449     virtual void undo() { }
450     virtual void redo() { }
451
452     virtual void handleKeyboardEvent(KeyboardEvent*) { }
453     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
454
455     virtual void textFieldDidBeginEditing(Element*) { }
456     virtual void textFieldDidEndEditing(Element*) { }
457     virtual void textDidChangeInTextField(Element*) { }
458     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
459     virtual void textWillBeDeletedInTextField(Element*) { }
460     virtual void textDidChangeInTextArea(Element*) { }
461
462 #if PLATFORM(MAC)
463     virtual void markedTextAbandoned(Frame*) { }
464
465     virtual NSString* userVisibleString(NSURL*) { return 0; }
466     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; };
467     virtual void setInsertionPasteboard(NSPasteboard*) { };
468     virtual NSURL* canonicalizeURL(NSURL*) { return 0; }
469     virtual NSURL* canonicalizeURLString(NSString*) { return 0; }
470 #ifdef BUILDING_ON_TIGER
471     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
472 #endif
473 #endif
474 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
475     virtual void uppercaseWord() { }
476     virtual void lowercaseWord() { }
477     virtual void capitalizeWord() { }
478     virtual void showSubstitutionsPanel(bool) { }
479     virtual bool substitutionsPanelIsShowing() { return false; }
480     virtual void toggleSmartInsertDelete() { }
481     virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
482     virtual void toggleAutomaticQuoteSubstitution() { }
483     virtual bool isAutomaticLinkDetectionEnabled() { return false; }
484     virtual void toggleAutomaticLinkDetection() { }
485     virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
486     virtual void toggleAutomaticDashSubstitution() { }
487     virtual bool isAutomaticTextReplacementEnabled() { return false; }
488     virtual void toggleAutomaticTextReplacement() { }
489     virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
490     virtual void toggleAutomaticSpellingCorrection() { }
491 #endif
492     virtual void ignoreWordInSpellDocument(const String&) { }
493     virtual void learnWord(const String&) { }
494     virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
495     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
496     virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
497 #if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
498     virtual void checkTextOfParagraph(const UChar*, int, uint64_t, Vector<TextCheckingResult>&) { };
499 #endif
500 #if SUPPORT_AUTOCORRECTION_PANEL
501     virtual void showCorrectionPanel(CorrectionPanelInfo::PanelType, const FloatRect&, const String&, const String&, const Vector<String>&, Editor*) { }
502     virtual void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel) { }
503     virtual bool isShowingCorrectionPanel() { return false; }
504 #endif
505     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
506     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
507     virtual void showSpellingUI(bool) { }
508     virtual bool spellingUIIsShowing() { return false; }
509     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) { }
510     virtual void willSetInputMethodState() { }
511     virtual void setInputMethodState(bool) { }
512     virtual void requestCheckingOfString(SpellChecker*, int, const String&) { }
513 };
514
515 #if ENABLE(CONTEXT_MENUS)
516 class EmptyContextMenuClient : public ContextMenuClient {
517     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
518 public:
519     EmptyContextMenuClient() { }
520     virtual ~EmptyContextMenuClient() {  }
521     virtual void contextMenuDestroyed() { }
522
523 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
524     virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) { return 0; }
525 #else
526     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
527 #endif
528     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
529
530     virtual void downloadURL(const KURL&) { }
531     virtual void copyImageToClipboard(const HitTestResult&) { }
532     virtual void searchWithGoogle(const Frame*) { }
533     virtual void lookUpInDictionary(Frame*) { }
534     virtual bool isSpeaking() { return false; }
535     virtual void speak(const String&) { }
536     virtual void stopSpeaking() { }
537
538 #if PLATFORM(MAC)
539     virtual void searchWithSpotlight() { }
540 #endif
541 };
542 #endif // ENABLE(CONTEXT_MENUS)
543
544 #if ENABLE(DRAG_SUPPORT)
545 class EmptyDragClient : public DragClient {
546     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
547 public:
548     EmptyDragClient() { }
549     virtual ~EmptyDragClient() {}
550     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
551     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
552     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
553     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
554     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
555     virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
556     virtual void dragControllerDestroyed() { }
557 };
558 #endif // ENABLE(DRAG_SUPPORT)
559
560 class EmptyInspectorClient : public InspectorClient {
561     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
562 public:
563     EmptyInspectorClient() { }
564     virtual ~EmptyInspectorClient() { }
565
566     virtual void inspectorDestroyed() { }
567     
568     virtual void openInspectorFrontend(InspectorController*) { }
569
570     virtual void highlight(Node*) { }
571     virtual void hideHighlight() { }
572
573     virtual void populateSetting(const String&, String*) { }
574     virtual void storeSetting(const String&, const String&) { }
575     virtual bool sendMessageToFrontend(const String&) { return false; }
576 };
577
578 class EmptyDeviceMotionClient : public DeviceMotionClient {
579 public:
580     virtual void setController(DeviceMotionController*) { }
581     virtual void startUpdating() { }
582     virtual void stopUpdating() { }
583     virtual DeviceMotionData* currentDeviceMotion() const { return 0; }
584     virtual void deviceMotionControllerDestroyed() { }
585 };
586
587 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
588 public:
589     virtual void setController(DeviceOrientationController*) { }
590     virtual void startUpdating() { }
591     virtual void stopUpdating() { }
592     virtual DeviceOrientation* lastOrientation() const { return 0; }
593     virtual void deviceOrientationControllerDestroyed() { }
594 };
595
596 }
597
598 #endif // EmptyClients_h