initial import
[vuplus_webkit] / Source / WebCore / loader / EmptyClients.h
1 /*
2  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3  * Copyright (C) 2008, 2009, 2010, 2011 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 "ContextMenuClient.h"
33 #include "DeviceMotionClient.h"
34 #include "DeviceOrientationClient.h"
35 #include "DocumentLoader.h"
36 #include "DragClient.h"
37 #include "EditCommand.h"
38 #include "EditorClient.h"
39 #include "TextCheckerClient.h"
40 #include "FloatRect.h"
41 #include "FocusDirection.h"
42 #include "FrameLoaderClient.h"
43 #include "FrameNetworkingContext.h"
44 #include "InspectorClient.h"
45 #include "PopupMenu.h"
46 #include "ResourceError.h"
47 #include "SearchPopupMenu.h"
48
49 #if USE(V8)
50 #include "V8IsolatedContext.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 GraphicsContext3D;
69
70 class EmptyPopupMenu : public PopupMenu {
71 public:
72     virtual void show(const IntRect&, FrameView*, int) {}
73     virtual void hide() {}
74     virtual void updateFromElement() {}
75     virtual void disconnectClient() {}
76 };
77
78 class EmptySearchPopupMenu : public SearchPopupMenu {
79 public:
80     virtual PopupMenu* popupMenu() { return m_popup.get(); }
81     virtual void saveRecentSearches(const AtomicString&, const Vector<String>&) {}
82     virtual void loadRecentSearches(const AtomicString&, Vector<String>&) {}
83     virtual bool enabled() { return false; }
84
85 private:
86     RefPtr<EmptyPopupMenu> m_popup;
87 };
88
89 class EmptyChromeClient : public ChromeClient {
90 public:
91     virtual ~EmptyChromeClient() { }
92     virtual void chromeDestroyed() { }
93
94     virtual void* webView() const { return 0; }
95     virtual void setWindowRect(const FloatRect&) { }
96     virtual FloatRect windowRect() { return FloatRect(); }
97
98     virtual FloatRect pageRect() { return FloatRect(); }
99
100     virtual void focus() { }
101     virtual void unfocus() { }
102
103     virtual bool canTakeFocus(FocusDirection) { return false; }
104     virtual void takeFocus(FocusDirection) { }
105
106     virtual void focusedNodeChanged(Node*) { }
107     virtual void focusedFrameChanged(Frame*) { }
108
109     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) { return 0; }
110     virtual void show() { }
111
112     virtual bool canRunModal() { return false; }
113     virtual void runModal() { }
114
115     virtual void setToolbarsVisible(bool) { }
116     virtual bool toolbarsVisible() { return false; }
117
118     virtual void setStatusbarVisible(bool) { }
119     virtual bool statusbarVisible() { return false; }
120
121     virtual void setScrollbarsVisible(bool) { }
122     virtual bool scrollbarsVisible() { return false; }
123
124     virtual void setMenubarVisible(bool) { }
125     virtual bool menubarVisible() { return false; }
126
127     virtual void setResizable(bool) { }
128
129     virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, unsigned, const String&) { }
130
131     virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
132     virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
133
134     virtual void closeWindowSoon() { }
135
136     virtual void runJavaScriptAlert(Frame*, const String&) { }
137     virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
138     virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
139     virtual bool shouldInterruptJavaScript() { return false; }
140
141     virtual bool selectItemWritingDirectionIsNatural() { return false; }
142     virtual bool selectItemAlignmentFollowsMenuWritingDirection() { return false; }
143     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
144     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
145
146 #if ENABLE(CONTEXT_MENUS)
147     virtual void showContextMenu() { }
148 #endif
149
150 #if ENABLE(REGISTER_PROTOCOL_HANDLER)
151     virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { }
152 #endif
153
154     virtual void setStatusbarText(const String&) { }
155
156     virtual KeyboardUIMode keyboardUIMode() { return KeyboardAccessDefault; }
157
158     virtual IntRect windowResizerRect() const { return IntRect(); }
159
160     virtual void invalidateWindow(const IntRect&, bool) { }
161     virtual void invalidateContentsAndWindow(const IntRect&, bool) { }
162     virtual void invalidateContentsForSlowScroll(const IntRect&, bool) {};
163     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
164 #if ENABLE(TILED_BACKING_STORE)
165     virtual void delegatedScrollRequested(const IntPoint&) { }
166 #endif
167 #if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
168     virtual void scheduleAnimation() { }
169 #endif
170
171     virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
172     virtual IntRect windowToScreen(const IntRect& r) const { return r; }
173     virtual PlatformPageClient platformPageClient() const { return 0; }
174     virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
175
176     virtual void scrollbarsModeDidChange() const { }
177     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
178
179     virtual void setToolTip(const String&, TextDirection) { }
180
181     virtual void print(Frame*) { }
182
183 #if ENABLE(DATABASE)
184     virtual void exceededDatabaseQuota(Frame*, const String&) { }
185 #endif
186
187 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
188     virtual void reachedMaxAppCacheSize(int64_t) { }
189     virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t) { }
190 #endif
191
192 #if ENABLE(NOTIFICATIONS)
193     virtual NotificationPresenter* notificationPresenter() const { return 0; }
194 #endif
195
196 #if ENABLE(DIRECTORY_UPLOAD)
197     virtual void enumerateChosenDirectory(FileChooser*) { }
198 #endif
199
200 #if ENABLE(INPUT_COLOR)
201     void openColorChooser(ColorChooser*, const Color&) { }
202     void cleanupColorChooser() { }
203     void setSelectedColorInColorChooser(const Color&) { }
204 #endif
205
206     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
207     virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*) { }
208
209     virtual void formStateDidChange(const Node*) { }
210
211     virtual void elementDidFocus(const Node*) { }
212     virtual void elementDidBlur(const Node*) { }
213
214     virtual void setCursor(const Cursor&) { }
215     virtual void setCursorHiddenUntilMouseMoves(bool) { }
216
217     virtual void scrollRectIntoView(const IntRect&) const { }
218
219     virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
220     virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}
221
222 #if USE(ACCELERATED_COMPOSITING)
223     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {}
224     virtual void setNeedsOneShotDrawingSynchronization() {}
225     virtual void scheduleCompositingLayerSync() {}
226 #endif
227
228 #if PLATFORM(WIN)
229     virtual void setLastSetCursorToCurrentCursor() { }
230 #endif
231 #if ENABLE(TOUCH_EVENTS)
232     virtual void needTouchEvents(bool) { }
233 #endif
234     
235     virtual void numWheelEventHandlersChanged(unsigned) { }
236     
237     virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return false; }
238 };
239
240 class EmptyFrameLoaderClient : public FrameLoaderClient {
241     WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
242 public:
243     EmptyFrameLoaderClient() { }
244     virtual ~EmptyFrameLoaderClient() {  }
245     virtual void frameLoaderDestroyed() { }
246
247     virtual bool hasWebView() const { return true; } // mainly for assertions
248
249     virtual void makeRepresentation(DocumentLoader*) { }
250     virtual void forceLayout() { }
251     virtual void forceLayoutForNonHTML() { }
252
253     virtual void setCopiesOnScroll() { }
254
255     virtual void detachedFromParent2() { }
256     virtual void detachedFromParent3() { }
257
258     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
259
260     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
261     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
262     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
263     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
264     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
265 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
266     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) { return false; }
267 #endif
268     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
269     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
270     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
271     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
272     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
273
274     virtual void dispatchDidHandleOnloadEvents() { }
275     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
276     virtual void dispatchDidCancelClientRedirect() { }
277     virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
278     virtual void dispatchDidChangeLocationWithinPage() { }
279     virtual void dispatchDidPushStateWithinPage() { }
280     virtual void dispatchDidReplaceStateWithinPage() { }
281     virtual void dispatchDidPopStateWithinPage() { }
282     virtual void dispatchWillClose() { }
283     virtual void dispatchDidReceiveIcon() { }
284     virtual void dispatchDidStartProvisionalLoad() { }
285     virtual void dispatchDidReceiveTitle(const StringWithDirection&) { }
286     virtual void dispatchDidChangeIcons(IconType) { }
287     virtual void dispatchDidCommitLoad() { }
288     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
289     virtual void dispatchDidFailLoad(const ResourceError&) { }
290     virtual void dispatchDidFinishDocumentLoad() { }
291     virtual void dispatchDidFinishLoad() { }
292     virtual void dispatchDidFirstLayout() { }
293     virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
294
295     virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; }
296     virtual void dispatchShow() { }
297
298     virtual void dispatchDecidePolicyForResponse(FramePolicyFunction, const ResourceResponse&, const ResourceRequest&) { }
299     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
300     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
301     virtual void cancelPolicyCheck() { }
302
303     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
304
305     virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) { }
306     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
307
308     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
309     virtual void revertToProvisionalState(DocumentLoader*) { }
310     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
311
312     virtual void willChangeEstimatedProgress() { }
313     virtual void didChangeEstimatedProgress() { }
314     virtual void postProgressStartedNotification() { }
315     virtual void postProgressEstimateChangedNotification() { }
316     virtual void postProgressFinishedNotification() { }
317
318     virtual void setMainFrameDocumentReady(bool) { }
319
320     virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) { UNUSED_PARAM(suggestedName); }
321
322     virtual void willChangeTitle(DocumentLoader*) { }
323     virtual void didChangeTitle(DocumentLoader*) { }
324
325     virtual void committedLoad(DocumentLoader*, const char*, int) { }
326     virtual void finishedLoading(DocumentLoader*) { }
327
328     virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
329     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
330     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
331     virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
332
333     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
334     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
335     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
336
337     virtual bool shouldFallBack(const ResourceError&) { return false; }
338
339     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
340     virtual bool canShowMIMEType(const String&) const { return false; }
341     virtual bool canShowMIMETypeAsHTML(const String&) const { return false; }
342     virtual bool representationExistsForURLScheme(const String&) const { return false; }
343     virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
344
345     virtual void frameLoadCompleted() { }
346     virtual void restoreViewState() { }
347     virtual void provisionalLoadStarted() { }
348     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
349     virtual void didFinishLoad() { }
350     virtual void prepareForDataSourceReplacement() { }
351
352     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
353     virtual void setTitle(const StringWithDirection&, const KURL&) { }
354
355     virtual String userAgent(const KURL&) { return ""; }
356
357     virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
358     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
359     virtual void transitionToCommittedForNewPage() { }    
360
361     virtual void didSaveToPageCache() { }
362     virtual void didRestoreFromPageCache() { }
363
364     virtual void dispatchDidBecomeFrameset(bool) { }
365
366     virtual void updateGlobalHistory() { }
367     virtual void updateGlobalHistoryRedirectLinks() { }
368     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
369     virtual bool shouldStopLoadingForHistoryItem(HistoryItem*) const { return false; }
370     virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
371     virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { }
372     virtual void dispatchDidChangeBackForwardIndex() const { }
373     virtual void updateGlobalHistoryItemForPage() { }
374     virtual void saveViewStateToItem(HistoryItem*) { }
375     virtual bool canCachePage() const { return false; }
376     virtual void didDisplayInsecureContent() { }
377     virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) { }
378     virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
379     virtual void didTransferChildFrameToNewDocument(Page*) { }
380     virtual void transferLoadingResourceFromPage(ResourceLoader*, const ResourceRequest&, Page*) { }
381     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
382     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
383 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
384     virtual PassRefPtr<Widget> createMediaPlayerProxyPlugin(const IntSize&, HTMLMediaElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&) { return 0; }
385     virtual void hideMediaPlayerProxyPlugin(Widget*) { }
386     virtual void showMediaPlayerProxyPlugin(Widget*) { }
387 #endif
388
389     virtual ObjectContentType objectContentType(const KURL&, const String&, bool) { return ObjectContentType(); }
390     virtual String overrideMediaType() const { return String(); }
391
392     virtual void redirectDataToPlugin(Widget*) { }
393     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
394     virtual void documentElementAvailable() { }
395     virtual void didPerformFirstNavigation() const { }
396
397     virtual void registerForIconNotification(bool) { }
398
399 #if USE(V8)
400     virtual void didCreateScriptContextForFrame() { }
401     virtual void didDestroyScriptContextForFrame() { }
402     virtual void didCreateIsolatedScriptContext(V8IsolatedContext*) { }
403     virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
404 #endif
405
406 #if PLATFORM(MAC)
407     virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
408     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
409 #endif
410 #if PLATFORM(WIN) && USE(CFNETWORK)
411     // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
412     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
413 #endif
414
415     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() { return PassRefPtr<FrameNetworkingContext>(); }
416 };
417
418 class EmptyTextCheckerClient : public TextCheckerClient {
419 public:
420     virtual void ignoreWordInSpellDocument(const String&) { }
421     virtual void learnWord(const String&) { }
422     virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
423     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
424     virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
425
426 #if USE(UNIFIED_TEXT_CHECKING)
427     virtual void checkTextOfParagraph(const UChar*, int, TextCheckingTypeMask, Vector<TextCheckingResult>&) { };
428 #endif
429
430     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) { }
431     virtual void requestCheckingOfString(SpellChecker*, int, TextCheckingTypeMask, const String&) { }
432 };
433
434 class EmptyEditorClient : public EditorClient {
435     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
436 public:
437     EmptyEditorClient() { }
438     virtual ~EmptyEditorClient() { }
439     virtual void pageDestroyed() { }
440
441     virtual bool shouldDeleteRange(Range*) { return false; }
442     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
443     virtual bool smartInsertDeleteEnabled() { return false; }
444     virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
445     virtual bool isContinuousSpellCheckingEnabled() { return false; }
446     virtual void toggleContinuousSpellChecking() { }
447     virtual bool isGrammarCheckingEnabled() { return false; }
448     virtual void toggleGrammarChecking() { }
449     virtual int spellCheckerDocumentTag() { return -1; }
450
451     virtual bool selectWordBeforeMenuEvent() { return false; }
452     virtual bool isEditable() { return false; }
453
454     virtual bool shouldBeginEditing(Range*) { return false; }
455     virtual bool shouldEndEditing(Range*) { return false; }
456     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
457     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
458     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
459     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
460
461     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
462     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
463     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
464     //  virtual bool doCommandBySelector(SEL selector) { return false; }
465     //
466     virtual void didBeginEditing() { }
467     virtual void respondToChangedContents() { }
468     virtual void respondToChangedSelection() { }
469     virtual void didEndEditing() { }
470     virtual void didWriteSelectionToPasteboard() { }
471     virtual void didSetSelectionTypesForPasteboard() { }
472     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
473     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
474     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
475
476     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
477     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
478     virtual void clearUndoRedoOperations() { }
479
480     virtual bool canCopyCut(Frame*, bool defaultValue) const { return defaultValue; }
481     virtual bool canPaste(Frame*, bool defaultValue) const { return defaultValue; }
482     virtual bool canUndo() const { return false; }
483     virtual bool canRedo() const { return false; }
484
485     virtual void undo() { }
486     virtual void redo() { }
487
488     virtual void handleKeyboardEvent(KeyboardEvent*) { }
489     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
490
491     virtual void textFieldDidBeginEditing(Element*) { }
492     virtual void textFieldDidEndEditing(Element*) { }
493     virtual void textDidChangeInTextField(Element*) { }
494     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
495     virtual void textWillBeDeletedInTextField(Element*) { }
496     virtual void textDidChangeInTextArea(Element*) { }
497
498 #if PLATFORM(MAC)
499     virtual void markedTextAbandoned(Frame*) { }
500
501     virtual NSString* userVisibleString(NSURL*) { return 0; }
502     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; };
503     virtual void setInsertionPasteboard(NSPasteboard*) { };
504     virtual NSURL* canonicalizeURL(NSURL*) { return 0; }
505     virtual NSURL* canonicalizeURLString(NSString*) { return 0; }
506 #endif
507 #if PLATFORM(MAC) && !defined(BUILDING_ON_LEOPARD)
508     virtual void uppercaseWord() { }
509     virtual void lowercaseWord() { }
510     virtual void capitalizeWord() { }
511     virtual void showSubstitutionsPanel(bool) { }
512     virtual bool substitutionsPanelIsShowing() { return false; }
513     virtual void toggleSmartInsertDelete() { }
514     virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
515     virtual void toggleAutomaticQuoteSubstitution() { }
516     virtual bool isAutomaticLinkDetectionEnabled() { return false; }
517     virtual void toggleAutomaticLinkDetection() { }
518     virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
519     virtual void toggleAutomaticDashSubstitution() { }
520     virtual bool isAutomaticTextReplacementEnabled() { return false; }
521     virtual void toggleAutomaticTextReplacement() { }
522     virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
523     virtual void toggleAutomaticSpellingCorrection() { }
524 #endif
525     TextCheckerClient* textChecker() { return &m_textCheckerClient; }
526
527 #if USE(AUTOCORRECTION_PANEL)
528     virtual void showCorrectionPanel(CorrectionPanelInfo::PanelType, const FloatRect&, const String&, const String&, const Vector<String>&) { }
529     virtual void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel) { }
530     virtual String dismissCorrectionPanelSoon(ReasonForDismissingCorrectionPanel) { return String(); }
531     virtual void recordAutocorrectionResponse(AutocorrectionResponseType, const String&, const String&) { }
532 #endif
533     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
534     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
535     virtual void showSpellingUI(bool) { }
536     virtual bool spellingUIIsShowing() { return false; }
537
538     virtual void willSetInputMethodState() { }
539     virtual void setInputMethodState(bool) { }
540
541 private:
542     EmptyTextCheckerClient m_textCheckerClient;
543 };
544
545 #if ENABLE(CONTEXT_MENUS)
546 class EmptyContextMenuClient : public ContextMenuClient {
547     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
548 public:
549     EmptyContextMenuClient() { }
550     virtual ~EmptyContextMenuClient() {  }
551     virtual void contextMenuDestroyed() { }
552
553 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
554     virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) { return nullptr; }
555 #else
556     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
557 #endif
558     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
559
560     virtual void downloadURL(const KURL&) { }
561     virtual void copyImageToClipboard(const HitTestResult&) { }
562     virtual void searchWithGoogle(const Frame*) { }
563     virtual void lookUpInDictionary(Frame*) { }
564     virtual bool isSpeaking() { return false; }
565     virtual void speak(const String&) { }
566     virtual void stopSpeaking() { }
567
568 #if PLATFORM(MAC)
569     virtual void searchWithSpotlight() { }
570 #endif
571 };
572 #endif // ENABLE(CONTEXT_MENUS)
573
574 #if ENABLE(DRAG_SUPPORT)
575 class EmptyDragClient : public DragClient {
576     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
577 public:
578     EmptyDragClient() { }
579     virtual ~EmptyDragClient() {}
580     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
581     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
582     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
583     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
584     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
585     virtual void dragControllerDestroyed() { }
586 };
587 #endif // ENABLE(DRAG_SUPPORT)
588
589 class EmptyInspectorClient : public InspectorClient {
590     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
591 public:
592     EmptyInspectorClient() { }
593     virtual ~EmptyInspectorClient() { }
594
595     virtual void inspectorDestroyed() { }
596     
597     virtual void openInspectorFrontend(InspectorController*) { }
598
599     virtual void highlight() { }
600     virtual void hideHighlight() { }
601
602     virtual bool sendMessageToFrontend(const String&) { return false; }
603 };
604
605 class EmptyDeviceMotionClient : public DeviceMotionClient {
606 public:
607     virtual void setController(DeviceMotionController*) { }
608     virtual void startUpdating() { }
609     virtual void stopUpdating() { }
610     virtual DeviceMotionData* currentDeviceMotion() const { return 0; }
611     virtual void deviceMotionControllerDestroyed() { }
612 };
613
614 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
615 public:
616     virtual void setController(DeviceOrientationController*) { }
617     virtual void startUpdating() { }
618     virtual void stopUpdating() { }
619     virtual DeviceOrientation* lastOrientation() const { return 0; }
620     virtual void deviceOrientationControllerDestroyed() { }
621 };
622
623 }
624
625 #endif // EmptyClients_h