eb944b282c04d0fe1b897670d0cfbcf8b730ab7e
[WebKit-https.git] / Source / WebCore / loader / EmptyClients.h
1 /*
2  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3  * Copyright (C) 2008-2012, 2015 Apple Inc. All rights reserved.
4  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5  * Copyright (C) 2012 Samsung Electronics. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef EmptyClients_h
30 #define EmptyClients_h
31
32 #include "ChromeClient.h"
33 #include "ContextMenuClient.h"
34 #include "DeviceMotionClient.h"
35 #include "DeviceOrientationClient.h"
36 #include "DiagnosticLoggingClient.h"
37 #include "DragClient.h"
38 #include "EditorClient.h"
39 #include "TextCheckerClient.h"
40 #include "FloatRect.h"
41 #include "FocusDirection.h"
42 #include "FrameLoaderClient.h"
43 #include "InspectorClient.h"
44 #include "Page.h"
45 #include "ProgressTrackerClient.h"
46 #include "ResourceError.h"
47 #include "VisitedLinkStore.h"
48 #include <wtf/text/StringView.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 GraphicsContext3D;
66
67 class EmptyChromeClient : public ChromeClient {
68     WTF_MAKE_FAST_ALLOCATED;
69 public:
70     virtual ~EmptyChromeClient() { }
71     virtual void chromeDestroyed() override { }
72
73     virtual void setWindowRect(const FloatRect&) override { }
74     virtual FloatRect windowRect() override { return FloatRect(); }
75
76     virtual FloatRect pageRect() override { return FloatRect(); }
77
78     virtual void focus() override { }
79     virtual void unfocus() override { }
80
81     virtual bool canTakeFocus(FocusDirection) override { return false; }
82     virtual void takeFocus(FocusDirection) override { }
83
84     virtual void focusedElementChanged(Element*) override { }
85     virtual void focusedFrameChanged(Frame*) override { }
86
87     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) override { return nullptr; }
88     virtual void show() override { }
89
90     virtual bool canRunModal() override { return false; }
91     virtual void runModal() override { }
92
93     virtual void setToolbarsVisible(bool) override { }
94     virtual bool toolbarsVisible() override { return false; }
95
96     virtual void setStatusbarVisible(bool) override { }
97     virtual bool statusbarVisible() override { return false; }
98
99     virtual void setScrollbarsVisible(bool) override { }
100     virtual bool scrollbarsVisible() override { return false; }
101
102     virtual void setMenubarVisible(bool) override { }
103     virtual bool menubarVisible() override { return false; }
104
105     virtual void setResizable(bool) override { }
106
107     virtual void addMessageToConsole(MessageSource, MessageLevel, const String&, unsigned, unsigned, const String&) override { }
108
109     virtual bool canRunBeforeUnloadConfirmPanel() override { return false; }
110     virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) override { return true; }
111
112     virtual void closeWindowSoon() override { }
113
114     virtual void runJavaScriptAlert(Frame*, const String&) override { }
115     virtual bool runJavaScriptConfirm(Frame*, const String&) override { return false; }
116     virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) override { return false; }
117
118     virtual bool selectItemWritingDirectionIsNatural() override { return false; }
119     virtual bool selectItemAlignmentFollowsMenuWritingDirection() override { return false; }
120     virtual bool hasOpenedPopup() const override { return false; }
121     virtual RefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const override;
122     virtual RefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const override;
123
124     virtual void setStatusbarText(const String&) override { }
125
126     virtual KeyboardUIMode keyboardUIMode() override { return KeyboardAccessDefault; }
127
128     virtual void invalidateRootView(const IntRect&) override { }
129     virtual void invalidateContentsAndRootView(const IntRect&) override { }
130     virtual void invalidateContentsForSlowScroll(const IntRect&) override { }
131     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) override { }
132 #if USE(COORDINATED_GRAPHICS)
133     virtual void delegatedScrollRequested(const IntPoint&) override { }
134 #endif
135 #if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
136     virtual void scheduleAnimation() override { }
137 #endif
138
139     virtual IntPoint screenToRootView(const IntPoint& p) const override { return p; }
140     virtual IntRect rootViewToScreen(const IntRect& r) const override { return r; }
141 #if PLATFORM(IOS)
142     virtual IntPoint accessibilityScreenToRootView(const IntPoint& p) const override { return p; };
143     virtual IntRect rootViewToAccessibilityScreen(const IntRect& r) const override { return r; };
144 #endif
145     virtual PlatformPageClient platformPageClient() const override { return 0; }
146     virtual void contentsSizeChanged(Frame*, const IntSize&) const override { }
147
148     virtual void scrollbarsModeDidChange() const override { }
149     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) override { }
150
151     virtual void setToolTip(const String&, TextDirection) override { }
152
153     virtual void print(Frame*) override { }
154
155     virtual void exceededDatabaseQuota(Frame*, const String&, DatabaseDetails) override { }
156
157     virtual void reachedMaxAppCacheSize(int64_t) override { }
158     virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t) override { }
159
160 #if ENABLE(INPUT_TYPE_COLOR)
161     virtual std::unique_ptr<ColorChooser> createColorChooser(ColorChooserClient*, const Color&) override;
162 #endif
163
164     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) override;
165     virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*) override { }
166
167     virtual void elementDidFocus(const Node*) override { }
168     virtual void elementDidBlur(const Node*) override { }
169
170 #if !PLATFORM(IOS)
171     virtual void setCursor(const Cursor&) override { }
172     virtual void setCursorHiddenUntilMouseMoves(bool) override { }
173 #endif
174
175     virtual void scrollRectIntoView(const IntRect&) const override { }
176
177     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) override { }
178     virtual void attachViewOverlayGraphicsLayer(Frame*, GraphicsLayer*) override { }
179     virtual void setNeedsOneShotDrawingSynchronization() override { }
180     virtual void scheduleCompositingLayerFlush() override { }
181
182 #if PLATFORM(WIN)
183     virtual void setLastSetCursorToCurrentCursor() override { }
184     virtual void AXStartFrameLoad() override { }
185     virtual void AXFinishFrameLoad() override { }
186 #endif
187
188 #if PLATFORM(IOS)
189 #if ENABLE(IOS_TOUCH_EVENTS)
190     virtual void didPreventDefaultForEvent() override { }
191 #endif
192     virtual void didReceiveMobileDocType(bool) override { }
193     virtual void setNeedsScrollNotifications(Frame*, bool) override { }
194     virtual void observedContentChange(Frame*) override { }
195     virtual void clearContentChangeObservers(Frame*) override { }
196     virtual void notifyRevealedSelectionByScrollingFrame(Frame*) override { }
197     virtual void didLayout(LayoutType) override { }
198     virtual void didStartOverflowScroll() override { }
199     virtual void didEndOverflowScroll() override { }
200
201     virtual void suppressFormNotifications() override { }
202     virtual void restoreFormNotifications() override { }
203
204     virtual void addOrUpdateScrollingLayer(Node*, PlatformLayer*, PlatformLayer*, const IntSize&, bool, bool) override { }
205     virtual void removeScrollingLayer(Node*, PlatformLayer*, PlatformLayer*) override { }
206
207     virtual void webAppOrientationsUpdated() override { };
208     virtual void showPlaybackTargetPicker(bool) override { };
209 #endif // PLATFORM(IOS)
210
211 #if ENABLE(ORIENTATION_EVENTS)
212     virtual int deviceOrientation() const override { return 0; }
213 #endif
214
215 #if PLATFORM(IOS)
216     virtual bool isStopping() override { return false; }
217 #endif
218
219 #if ENABLE(TOUCH_EVENTS)
220     virtual void needTouchEvents(bool) override { }
221 #endif
222     
223     virtual void wheelEventHandlersChanged(bool) override { }
224     
225     virtual bool isEmptyChromeClient() const override { return true; }
226
227     virtual void didAssociateFormControls(const Vector<RefPtr<Element>>&) override { }
228     virtual bool shouldNotifyOnFormChanges() override { return false; }
229 };
230
231 // FIXME (bug 116233): Get rid of EmptyFrameLoaderClient. It is a travesty.
232
233 class EmptyFrameLoaderClient : public FrameLoaderClient {
234     WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
235 public:
236     EmptyFrameLoaderClient() { }
237     virtual ~EmptyFrameLoaderClient() {  }
238     virtual void frameLoaderDestroyed() override { }
239
240     virtual bool hasWebView() const override { return true; } // mainly for assertions
241
242     virtual void makeRepresentation(DocumentLoader*) override { }
243 #if PLATFORM(IOS)
244     virtual bool forceLayoutOnRestoreFromPageCache() override { return false; }
245 #endif
246     virtual void forceLayoutForNonHTML() override { }
247
248     virtual void setCopiesOnScroll() override { }
249
250     virtual void detachedFromParent2() override { }
251     virtual void detachedFromParent3() override { }
252
253     virtual void convertMainResourceLoadToDownload(DocumentLoader*, SessionID, const ResourceRequest&, const ResourceResponse&) override { }
254
255     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) override { }
256     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) override { return false; }
257     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) override { }
258     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
259     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
260 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
261     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) override { return false; }
262 #endif
263
264 #if PLATFORM(IOS)
265     virtual RetainPtr<CFDictionaryRef> connectionProperties(DocumentLoader*, unsigned long) override { return nullptr; }
266 #endif
267
268     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) override { }
269     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) override { }
270     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) override { }
271     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) override { }
272     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) override { return false; }
273
274     virtual void dispatchDidDispatchOnloadEvents() override { }
275     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() override { }
276     virtual void dispatchDidCancelClientRedirect() override { }
277     virtual void dispatchWillPerformClientRedirect(const URL&, double, double) override { }
278     virtual void dispatchDidChangeLocationWithinPage() override { }
279     virtual void dispatchDidPushStateWithinPage() override { }
280     virtual void dispatchDidReplaceStateWithinPage() override { }
281     virtual void dispatchDidPopStateWithinPage() override { }
282     virtual void dispatchWillClose() override { }
283     virtual void dispatchDidReceiveIcon() override { }
284     virtual void dispatchDidStartProvisionalLoad() override { }
285     virtual void dispatchDidReceiveTitle(const StringWithDirection&) override { }
286     virtual void dispatchDidChangeIcons(IconType) override { }
287     virtual void dispatchDidCommitLoad() override { }
288     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) override { }
289     virtual void dispatchDidFailLoad(const ResourceError&) override { }
290     virtual void dispatchDidFinishDocumentLoad() override { }
291     virtual void dispatchDidFinishLoad() override { }
292     virtual void dispatchDidLayout(LayoutMilestones) override { }
293
294     virtual Frame* dispatchCreatePage(const NavigationAction&) override { return nullptr; }
295     virtual void dispatchShow() override { }
296
297     virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction) override { }
298     virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&, FramePolicyFunction) override;
299     virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, FramePolicyFunction) override;
300     virtual void cancelPolicyCheck() override { }
301
302     virtual void dispatchUnableToImplementPolicy(const ResourceError&) override { }
303
304     virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) override;
305     virtual void dispatchWillSubmitForm(PassRefPtr<FormState>, FramePolicyFunction) override;
306
307     virtual void revertToProvisionalState(DocumentLoader*) override { }
308     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) override { }
309
310     virtual void setMainFrameDocumentReady(bool) override { }
311
312     virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) override { UNUSED_PARAM(suggestedName); }
313
314     virtual void willChangeTitle(DocumentLoader*) override { }
315     virtual void didChangeTitle(DocumentLoader*) override { }
316
317     virtual void willReplaceMultipartContent() override { }
318     virtual void didReplaceMultipartContent() override { }
319
320     virtual void committedLoad(DocumentLoader*, const char*, int) override { }
321     virtual void finishedLoading(DocumentLoader*) override { }
322
323     virtual ResourceError cancelledError(const ResourceRequest&) override { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
324     virtual ResourceError blockedError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
325     virtual ResourceError blockedByContentBlockerError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
326     virtual ResourceError cannotShowURLError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
327     virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
328
329     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
330     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
331     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
332
333     virtual bool shouldFallBack(const ResourceError&) override { return false; }
334
335     virtual bool canHandleRequest(const ResourceRequest&) const override { return false; }
336     virtual bool canShowMIMEType(const String&) const override { return false; }
337     virtual bool canShowMIMETypeAsHTML(const String&) const override { return false; }
338     virtual bool representationExistsForURLScheme(const String&) const override { return false; }
339     virtual String generatedMIMETypeForURLScheme(const String&) const override { return ""; }
340
341     virtual void frameLoadCompleted() override { }
342     virtual void restoreViewState() override { }
343     virtual void provisionalLoadStarted() override { }
344     virtual void didFinishLoad() override { }
345     virtual void prepareForDataSourceReplacement() override { }
346
347     virtual Ref<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) override;
348     virtual void updateCachedDocumentLoader(DocumentLoader&) override { }
349     virtual void setTitle(const StringWithDirection&, const URL&) override { }
350
351     virtual String userAgent(const URL&) override { return ""; }
352
353     virtual void savePlatformDataToCachedFrame(CachedFrame*) override { }
354     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) override { }
355 #if PLATFORM(IOS)
356     virtual void didRestoreFrameHierarchyForCachedFrame() override { }
357 #endif
358     virtual void transitionToCommittedForNewPage() override { }
359
360     virtual void didSaveToPageCache() override { }
361     virtual void didRestoreFromPageCache() override { }
362
363     virtual void dispatchDidBecomeFrameset(bool) override { }
364
365     virtual void updateGlobalHistory() override { }
366     virtual void updateGlobalHistoryRedirectLinks() override { }
367     virtual bool shouldGoToHistoryItem(HistoryItem*) const override { return false; }
368     virtual void updateGlobalHistoryItemForPage() override { }
369     virtual void saveViewStateToItem(HistoryItem*) override { }
370     virtual bool canCachePage() const override { return false; }
371     virtual void didDisplayInsecureContent() override { }
372     virtual void didRunInsecureContent(SecurityOrigin*, const URL&) override { }
373     virtual void didDetectXSS(const URL&, bool) override { }
374     virtual RefPtr<Frame> createFrame(const URL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) override;
375     virtual RefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool) override;
376     virtual void recreatePlugin(Widget*) override;
377     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const URL&, const Vector<String>&, const Vector<String>&) override;
378
379     virtual ObjectContentType objectContentType(const URL&, const String&) override { return ObjectContentType(); }
380     virtual String overrideMediaType() const override { return String(); }
381
382     virtual void redirectDataToPlugin(Widget*) override { }
383     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld&) override { }
384
385     virtual void registerForIconNotification(bool) override { }
386
387 #if PLATFORM(COCOA)
388     virtual RemoteAXObjectRef accessibilityRemoteObject() override { return nullptr; }
389     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const override { return response; }
390 #endif
391 #if PLATFORM(WIN) && USE(CFNETWORK)
392     // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
393     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) override { return true; }
394 #endif
395
396     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() override;
397
398 #if ENABLE(REQUEST_AUTOCOMPLETE)
399     virtual void didRequestAutocomplete(PassRefPtr<FormState>) override { }
400 #endif
401
402     virtual bool isEmptyFrameLoaderClient() override { return true; }
403
404     virtual void prefetchDNS(const String&) override { }
405 };
406
407 class EmptyTextCheckerClient : public TextCheckerClient {
408 public:
409     virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const override { return true; }
410     virtual void ignoreWordInSpellDocument(const String&) override { }
411     virtual void learnWord(const String&) override { }
412     virtual void checkSpellingOfString(StringView, int*, int*) override { }
413     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) override { return String(); }
414     virtual void checkGrammarOfString(StringView, Vector<GrammarDetail>&, int*, int*) override { }
415
416 #if USE(UNIFIED_TEXT_CHECKING)
417     virtual Vector<TextCheckingResult> checkTextOfParagraph(StringView, TextCheckingTypeMask) override { return Vector<TextCheckingResult>(); }
418 #endif
419
420     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) override { }
421     virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) override;
422 };
423
424 class EmptyEditorClient : public EditorClient {
425     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
426 public:
427     EmptyEditorClient() { }
428     virtual ~EmptyEditorClient() { }
429     virtual void pageDestroyed() override { }
430
431     virtual bool shouldDeleteRange(Range*) override { return false; }
432     virtual bool smartInsertDeleteEnabled() override { return false; }
433     virtual bool isSelectTrailingWhitespaceEnabled() override { return false; }
434     virtual bool isContinuousSpellCheckingEnabled() override { return false; }
435     virtual void toggleContinuousSpellChecking() override { }
436     virtual bool isGrammarCheckingEnabled() override { return false; }
437     virtual void toggleGrammarChecking() override { }
438     virtual int spellCheckerDocumentTag() override { return -1; }
439
440
441     virtual bool shouldBeginEditing(Range*) override { return false; }
442     virtual bool shouldEndEditing(Range*) override { return false; }
443     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) override { return false; }
444     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) override { return false; }
445     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) override { return false; }
446
447     virtual bool shouldApplyStyle(StyleProperties*, Range*) override { return false; }
448     virtual void didApplyStyle() override { }
449     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) override { return false; }
450
451     virtual void didBeginEditing() override { }
452     virtual void respondToChangedContents() override { }
453     virtual void respondToChangedSelection(Frame*) override { }
454     virtual void didChangeSelectionAndUpdateLayout() override { }
455     virtual void discardedComposition(Frame*) override { }
456     virtual void didEndEditing() override { }
457     virtual void willWriteSelectionToPasteboard(Range*) override { }
458     virtual void didWriteSelectionToPasteboard() override { }
459     virtual void getClientPasteboardDataForRange(Range*, Vector<String>&, Vector<RefPtr<SharedBuffer>>&) override { }
460
461     virtual void registerUndoStep(PassRefPtr<UndoStep>) override;
462     virtual void registerRedoStep(PassRefPtr<UndoStep>) override;
463     virtual void clearUndoRedoOperations() override { }
464
465     virtual bool canCopyCut(Frame*, bool defaultValue) const override { return defaultValue; }
466     virtual bool canPaste(Frame*, bool defaultValue) const override { return defaultValue; }
467     virtual bool canUndo() const override { return false; }
468     virtual bool canRedo() const override { return false; }
469
470     virtual void undo() override { }
471     virtual void redo() override { }
472
473     virtual void handleKeyboardEvent(KeyboardEvent*) override { }
474     virtual void handleInputMethodKeydown(KeyboardEvent*) override { }
475
476     virtual void textFieldDidBeginEditing(Element*) override { }
477     virtual void textFieldDidEndEditing(Element*) override { }
478     virtual void textDidChangeInTextField(Element*) override { }
479     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) override { return false; }
480     virtual void textWillBeDeletedInTextField(Element*) override { }
481     virtual void textDidChangeInTextArea(Element*) override { }
482     virtual void overflowScrollPositionChanged() override { }
483
484 #if PLATFORM(IOS)
485     virtual void startDelayingAndCoalescingContentChangeNotifications() override { }
486     virtual void stopDelayingAndCoalescingContentChangeNotifications() override { }
487     virtual void writeDataToPasteboard(NSDictionary*) override { }
488     virtual NSArray* supportedPasteboardTypesForCurrentSelection() override { return nullptr; }
489     virtual NSArray* readDataFromPasteboard(NSString*, int) override { return nullptr; }
490     virtual bool hasRichlyEditableSelection() override { return false; }
491     virtual int getPasteboardItemsCount() override { return 0; }
492     virtual DocumentFragment* documentFragmentFromDelegate(int) override { return nullptr; }
493     virtual bool performsTwoStepPaste(DocumentFragment*) override { return false; }
494     virtual int pasteboardChangeCount() override { return 0; }
495 #endif
496
497 #if PLATFORM(COCOA)
498     virtual NSString* userVisibleString(NSURL*) override { return nullptr; }
499     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource>>&) override { return nullptr; };
500     virtual void setInsertionPasteboard(const String&) override { };
501     virtual NSURL *canonicalizeURL(NSURL*) override { return nullptr; }
502     virtual NSURL *canonicalizeURLString(NSString*) override { return nullptr; }
503 #endif
504
505 #if USE(APPKIT)
506     virtual void uppercaseWord() override { }
507     virtual void lowercaseWord() override { }
508     virtual void capitalizeWord() override { }
509 #endif
510
511 #if USE(AUTOMATIC_TEXT_REPLACEMENT)
512     virtual void showSubstitutionsPanel(bool) override { }
513     virtual bool substitutionsPanelIsShowing() override { return false; }
514     virtual void toggleSmartInsertDelete() override { }
515     virtual bool isAutomaticQuoteSubstitutionEnabled() override { return false; }
516     virtual void toggleAutomaticQuoteSubstitution() override { }
517     virtual bool isAutomaticLinkDetectionEnabled() override { return false; }
518     virtual void toggleAutomaticLinkDetection() override { }
519     virtual bool isAutomaticDashSubstitutionEnabled() override { return false; }
520     virtual void toggleAutomaticDashSubstitution() override { }
521     virtual bool isAutomaticTextReplacementEnabled() override { return false; }
522     virtual void toggleAutomaticTextReplacement() override { }
523     virtual bool isAutomaticSpellingCorrectionEnabled() override { return false; }
524     virtual void toggleAutomaticSpellingCorrection() override { }
525 #endif
526
527 #if PLATFORM(GTK)
528     virtual bool shouldShowUnicodeMenu() override { return false; }
529 #endif
530     virtual TextCheckerClient* textChecker() override { return &m_textCheckerClient; }
531
532     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) override { }
533     virtual void updateSpellingUIWithMisspelledWord(const String&) override { }
534     virtual void showSpellingUI(bool) override { }
535     virtual bool spellingUIIsShowing() override { return false; }
536
537     virtual void willSetInputMethodState() override { }
538     virtual void setInputMethodState(bool) override { }
539
540 private:
541     EmptyTextCheckerClient m_textCheckerClient;
542 };
543
544 #if ENABLE(CONTEXT_MENUS)
545 class EmptyContextMenuClient : public ContextMenuClient {
546     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
547 public:
548     EmptyContextMenuClient() { }
549     virtual ~EmptyContextMenuClient() {  }
550     virtual void contextMenuDestroyed() override { }
551
552     virtual void downloadURL(const URL&) override { }
553     virtual void searchWithGoogle(const Frame*) override { }
554     virtual void lookUpInDictionary(Frame*) override { }
555     virtual bool isSpeaking() override { return false; }
556     virtual void speak(const String&) override { }
557     virtual void stopSpeaking() override { }
558
559 #if PLATFORM(COCOA)
560     virtual void searchWithSpotlight() override { }
561 #endif
562
563 #if USE(ACCESSIBILITY_CONTEXT_MENUS)
564     virtual void showContextMenu() override { }
565 #endif
566 };
567 #endif // ENABLE(CONTEXT_MENUS)
568
569 #if ENABLE(DRAG_SUPPORT)
570 class EmptyDragClient : public DragClient {
571     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
572 public:
573     EmptyDragClient() { }
574     virtual ~EmptyDragClient() {}
575     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData&) override { }
576     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) override { }
577     virtual DragDestinationAction actionMaskForDrag(DragData&) override { return DragDestinationActionNone; }
578     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) override { return DragSourceActionNone; }
579     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, DataTransfer&, Frame&, bool) override { }
580     virtual void dragControllerDestroyed() override { }
581 };
582 #endif // ENABLE(DRAG_SUPPORT)
583
584 class EmptyInspectorClient : public InspectorClient {
585     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
586 public:
587     EmptyInspectorClient() { }
588     virtual ~EmptyInspectorClient() { }
589
590     virtual void inspectedPageDestroyed() override { }
591     
592     virtual Inspector::FrontendChannel* openLocalFrontend(InspectorController*) override { return nullptr; }
593     virtual void bringFrontendToFront() override { }
594
595     virtual void highlight() override { }
596     virtual void hideHighlight() override { }
597 };
598
599 class EmptyDeviceClient : public DeviceClient {
600 public:
601     virtual void startUpdating() override { }
602     virtual void stopUpdating() override { }
603 };
604
605 class EmptyDeviceMotionClient : public DeviceMotionClient {
606 public:
607     virtual void setController(DeviceMotionController*) override { }
608     virtual DeviceMotionData* lastMotion() const override { return nullptr; }
609     virtual void deviceMotionControllerDestroyed() override { }
610 };
611
612 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
613 public:
614     virtual void setController(DeviceOrientationController*) override { }
615     virtual DeviceOrientationData* lastOrientation() const override { return nullptr; }
616     virtual void deviceOrientationControllerDestroyed() override { }
617 };
618
619 class EmptyProgressTrackerClient : public ProgressTrackerClient {
620     virtual void willChangeEstimatedProgress() override { }
621     virtual void didChangeEstimatedProgress() override { }
622
623     virtual void progressStarted(Frame&) override { }
624     virtual void progressEstimateChanged(Frame&) override { }
625     virtual void progressFinished(Frame&) override { }
626 };
627
628 class EmptyDiagnosticLoggingClient final : public DiagnosticLoggingClient {
629     virtual void logDiagnosticMessage(const String&, const String&, ShouldSample) override { }
630     virtual void logDiagnosticMessageWithResult(const String&, const String&, DiagnosticLoggingResultType, ShouldSample) override { }
631     virtual void logDiagnosticMessageWithValue(const String&, const String&, const String&, ShouldSample) override { }
632
633     virtual void mainFrameDestroyed() override { }
634 };
635
636 void fillWithEmptyClients(PageConfiguration&);
637
638 }
639
640 #endif // EmptyClients_h