38b4f23251aecb057acc59aae0d6304ef62ef965
[WebKit-https.git] / Source / WebCore / loader / EmptyClients.h
1 /*
2  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3  * Copyright (C) 2008, 2009, 2010, 2011, 2012 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 "DragClient.h"
37 #include "EditorClient.h"
38 #include "TextCheckerClient.h"
39 #include "FloatRect.h"
40 #include "FocusDirection.h"
41 #include "FrameLoaderClient.h"
42 #include "InspectorClient.h"
43 #include "Page.h"
44 #include "ProgressTrackerClient.h"
45 #include "ResourceError.h"
46 #include <wtf/text/StringView.h>
47
48 /*
49  This file holds empty Client stubs for use by WebCore.
50  Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript.
51  This tree depends heavily on Clients (usually provided by WebKit classes).
52
53  This file was first created for SVGImage as it had no way to access the current Page (nor should it,
54  since Images are not tied to a page).
55  See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
56
57  Ideally, whenever you change a Client class, you should add a stub here.
58  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
59 */
60
61 namespace WebCore {
62
63 class GraphicsContext3D;
64
65 class EmptyChromeClient : public ChromeClient {
66     WTF_MAKE_FAST_ALLOCATED;
67 public:
68     virtual ~EmptyChromeClient() { }
69     virtual void chromeDestroyed() override { }
70
71     virtual void setWindowRect(const FloatRect&) override { }
72     virtual FloatRect windowRect() override { return FloatRect(); }
73
74     virtual FloatRect pageRect() override { return FloatRect(); }
75
76     virtual void focus() override { }
77     virtual void unfocus() override { }
78
79     virtual bool canTakeFocus(FocusDirection) override { return false; }
80     virtual void takeFocus(FocusDirection) override { }
81
82     virtual void focusedElementChanged(Element*) override { }
83     virtual void focusedFrameChanged(Frame*) override { }
84
85     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) override { return 0; }
86     virtual void show() override { }
87
88     virtual bool canRunModal() override { return false; }
89     virtual void runModal() override { }
90
91     virtual void setToolbarsVisible(bool) override { }
92     virtual bool toolbarsVisible() override { return false; }
93
94     virtual void setStatusbarVisible(bool) override { }
95     virtual bool statusbarVisible() override { return false; }
96
97     virtual void setScrollbarsVisible(bool) override { }
98     virtual bool scrollbarsVisible() override { return false; }
99
100     virtual void setMenubarVisible(bool) override { }
101     virtual bool menubarVisible() override { return false; }
102
103     virtual void setResizable(bool) override { }
104
105     virtual void addMessageToConsole(MessageSource, MessageLevel, const String&, unsigned, unsigned, const String&) override { }
106
107     virtual bool canRunBeforeUnloadConfirmPanel() override { return false; }
108     virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) override { return true; }
109
110     virtual void closeWindowSoon() override { }
111
112     virtual void runJavaScriptAlert(Frame*, const String&) override { }
113     virtual bool runJavaScriptConfirm(Frame*, const String&) override { return false; }
114     virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) override { return false; }
115     virtual bool shouldInterruptJavaScript() override { return false; }
116
117     virtual bool selectItemWritingDirectionIsNatural() override { return false; }
118     virtual bool selectItemAlignmentFollowsMenuWritingDirection() override { return false; }
119     virtual bool hasOpenedPopup() const override { return false; }
120     virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const override;
121     virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const override;
122
123     virtual void setStatusbarText(const String&) override { }
124
125     virtual KeyboardUIMode keyboardUIMode() override { return KeyboardAccessDefault; }
126
127     virtual IntRect windowResizerRect() const override { return IntRect(); }
128
129     virtual void invalidateRootView(const IntRect&) override { }
130     virtual void invalidateContentsAndRootView(const IntRect&) override { }
131     virtual void invalidateContentsForSlowScroll(const IntRect&) override { }
132     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) override { }
133 #if USE(TILED_BACKING_STORE)
134     virtual void delegatedScrollRequested(const IntPoint&) { }
135 #endif
136 #if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
137     virtual void scheduleAnimation() { }
138 #endif
139
140     virtual IntPoint screenToRootView(const IntPoint& p) const override { return p; }
141     virtual IntRect rootViewToScreen(const IntRect& r) const override { return r; }
142 #if PLATFORM(IOS)
143     virtual IntPoint accessibilityScreenToRootView(const IntPoint& p) const override { return p; };
144     virtual IntRect rootViewToAccessibilityScreen(const IntRect& r) const override { return r; };
145 #endif
146     virtual PlatformPageClient platformPageClient() const override { return 0; }
147     virtual void contentsSizeChanged(Frame*, const IntSize&) const override { }
148
149     virtual void scrollbarsModeDidChange() const override { }
150     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) override { }
151
152     virtual void setToolTip(const String&, TextDirection) override { }
153
154     virtual void print(Frame*) override { }
155
156 #if ENABLE(SQL_DATABASE)
157     virtual void exceededDatabaseQuota(Frame*, const String&, DatabaseDetails) override { }
158 #endif
159
160     virtual void reachedMaxAppCacheSize(int64_t) override { }
161     virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t) override { }
162
163 #if ENABLE(INPUT_TYPE_COLOR)
164     virtual std::unique_ptr<ColorChooser> createColorChooser(ColorChooserClient*, const Color&) override;
165 #endif
166
167 #if ENABLE(DATE_AND_TIME_INPUT_TYPES) && !PLATFORM(IOS)
168     virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) override;
169 #endif
170
171     virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) override;
172     virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*) override { }
173
174     virtual void elementDidFocus(const Node*) override { }
175     virtual void elementDidBlur(const Node*) override { }
176
177 #if !PLATFORM(IOS)
178     virtual void setCursor(const Cursor&) override { }
179     virtual void setCursorHiddenUntilMouseMoves(bool) override { }
180 #endif
181
182     virtual void scrollRectIntoView(const IntRect&) const override { }
183
184     virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) override { }
185     virtual void attachViewOverlayGraphicsLayer(Frame*, GraphicsLayer*) override { }
186     virtual void setNeedsOneShotDrawingSynchronization() override { }
187     virtual void scheduleCompositingLayerFlush() override { }
188
189 #if PLATFORM(WIN)
190     virtual void setLastSetCursorToCurrentCursor() override { }
191     virtual void AXStartFrameLoad() override { }
192     virtual void AXFinishFrameLoad() override { }
193 #endif
194
195 #if PLATFORM(IOS)
196 #if ENABLE(IOS_TOUCH_EVENTS)
197     virtual void didPreventDefaultForEvent() override { }
198 #endif
199     virtual void didReceiveMobileDocType(bool) override { }
200     virtual void setNeedsScrollNotifications(Frame*, bool) override { }
201     virtual void observedContentChange(Frame*) override { }
202     virtual void clearContentChangeObservers(Frame*) override { }
203     virtual void notifyRevealedSelectionByScrollingFrame(Frame*) override { }
204     virtual void didLayout(LayoutType) override { }
205     virtual void didStartOverflowScroll() override { }
206     virtual void didEndOverflowScroll() override { }
207
208     virtual void suppressFormNotifications() override { }
209     virtual void restoreFormNotifications() override { }
210
211     virtual void addOrUpdateScrollingLayer(Node*, PlatformLayer*, PlatformLayer*, const IntSize&, bool, bool) override { }
212     virtual void removeScrollingLayer(Node*, PlatformLayer*, PlatformLayer*) override { }
213
214     virtual void webAppOrientationsUpdated() override { };
215     virtual void showPlaybackTargetPicker(bool) override { };
216 #endif // PLATFORM(IOS)
217
218 #if ENABLE(ORIENTATION_EVENTS)
219     virtual int deviceOrientation() const override { return 0; }
220 #endif
221
222 #if PLATFORM(IOS)
223     virtual bool isStopping() override { return false; }
224 #endif
225
226 #if ENABLE(TOUCH_EVENTS)
227     virtual void needTouchEvents(bool) override { }
228 #endif
229     
230     virtual void numWheelEventHandlersChanged(unsigned) override { }
231     
232     virtual bool isEmptyChromeClient() const override { return true; }
233
234     virtual void didAssociateFormControls(const Vector<RefPtr<Element>>&) override { }
235     virtual bool shouldNotifyOnFormChanges() override { return false; }
236 };
237
238 // FIXME (bug 116233): Get rid of EmptyFrameLoaderClient. It is a travesty.
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() override { }
246
247     virtual bool hasWebView() const override { return true; } // mainly for assertions
248
249     virtual void makeRepresentation(DocumentLoader*) override { }
250 #if PLATFORM(IOS)
251     virtual bool forceLayoutOnRestoreFromPageCache() override { return false; }
252 #endif
253     virtual void forceLayoutForNonHTML() override { }
254
255     virtual void setCopiesOnScroll() override { }
256
257     virtual void detachedFromParent2() override { }
258     virtual void detachedFromParent3() override { }
259
260     virtual void convertMainResourceLoadToDownload(DocumentLoader*, const ResourceRequest&, const ResourceResponse&) override { }
261
262     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) override { }
263     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) override { return false; }
264     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) override { }
265     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
266     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
267 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
268     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) override { return false; }
269 #endif
270
271 #if PLATFORM(IOS)
272     virtual RetainPtr<CFDictionaryRef> connectionProperties(DocumentLoader*, unsigned long) override { return nullptr; }
273 #endif
274
275     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) override { }
276     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) override { }
277     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) override { }
278     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) override { }
279     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) override { return false; }
280
281     virtual void dispatchDidHandleOnloadEvents() override { }
282     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() override { }
283     virtual void dispatchDidCancelClientRedirect() override { }
284     virtual void dispatchWillPerformClientRedirect(const URL&, double, double) override { }
285     virtual void dispatchDidChangeLocationWithinPage() override { }
286     virtual void dispatchDidPushStateWithinPage() override { }
287     virtual void dispatchDidReplaceStateWithinPage() override { }
288     virtual void dispatchDidPopStateWithinPage() override { }
289     virtual void dispatchWillClose() override { }
290     virtual void dispatchDidReceiveIcon() override { }
291     virtual void dispatchDidStartProvisionalLoad() override { }
292     virtual void dispatchDidReceiveTitle(const StringWithDirection&) override { }
293     virtual void dispatchDidChangeIcons(IconType) override { }
294     virtual void dispatchDidCommitLoad() override { }
295     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) override { }
296     virtual void dispatchDidFailLoad(const ResourceError&) override { }
297     virtual void dispatchDidFinishDocumentLoad() override { }
298     virtual void dispatchDidFinishLoad() override { }
299     virtual void dispatchDidLayout(LayoutMilestones) override { }
300
301     virtual Frame* dispatchCreatePage(const NavigationAction&) override { return 0; }
302     virtual void dispatchShow() override { }
303
304     virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction) override { }
305     virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&, FramePolicyFunction) override;
306     virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, FramePolicyFunction) override;
307     virtual void cancelPolicyCheck() override { }
308
309     virtual void dispatchUnableToImplementPolicy(const ResourceError&) override { }
310
311     virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) override;
312     virtual void dispatchWillSubmitForm(PassRefPtr<FormState>, FramePolicyFunction) override;
313
314     virtual void revertToProvisionalState(DocumentLoader*) override { }
315     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) override { }
316
317     virtual void setMainFrameDocumentReady(bool) override { }
318
319     virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) override { UNUSED_PARAM(suggestedName); }
320
321     virtual void willChangeTitle(DocumentLoader*) override { }
322     virtual void didChangeTitle(DocumentLoader*) override { }
323
324     virtual void committedLoad(DocumentLoader*, const char*, int) override { }
325     virtual void finishedLoading(DocumentLoader*) override { }
326
327     virtual ResourceError cancelledError(const ResourceRequest&) override { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
328     virtual ResourceError blockedError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
329     virtual ResourceError cannotShowURLError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
330     virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
331
332     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
333     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
334     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
335
336     virtual bool shouldFallBack(const ResourceError&) override { return false; }
337
338     virtual bool canHandleRequest(const ResourceRequest&) const override { return false; }
339     virtual bool canShowMIMEType(const String&) const override { return false; }
340     virtual bool canShowMIMETypeAsHTML(const String&) const override { return false; }
341     virtual bool representationExistsForURLScheme(const String&) const override { return false; }
342     virtual String generatedMIMETypeForURLScheme(const String&) const override { return ""; }
343
344     virtual void frameLoadCompleted() override { }
345     virtual void restoreViewState() override { }
346     virtual void provisionalLoadStarted() override { }
347     virtual void didFinishLoad() override { }
348     virtual void prepareForDataSourceReplacement() override { }
349
350     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) override;
351     virtual void setTitle(const StringWithDirection&, const URL&) override { }
352
353     virtual String userAgent(const URL&) override { return ""; }
354
355     virtual void savePlatformDataToCachedFrame(CachedFrame*) override { }
356     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) override { }
357 #if PLATFORM(IOS)
358     virtual void didRestoreFrameHierarchyForCachedFrame() override { }
359 #endif
360     virtual void transitionToCommittedForNewPage() override { }
361
362     virtual void didSaveToPageCache() override { }
363     virtual void didRestoreFromPageCache() override { }
364
365     virtual void dispatchDidBecomeFrameset(bool) override { }
366
367     virtual void updateGlobalHistory() override { }
368     virtual void updateGlobalHistoryRedirectLinks() override { }
369     virtual bool shouldGoToHistoryItem(HistoryItem*) const override { return false; }
370     virtual void updateGlobalHistoryItemForPage() override { }
371     virtual void saveViewStateToItem(HistoryItem*) override { }
372     virtual bool canCachePage() const override { return false; }
373     virtual void didDisplayInsecureContent() override { }
374     virtual void didRunInsecureContent(SecurityOrigin*, const URL&) override { }
375     virtual void didDetectXSS(const URL&, bool) override { }
376     virtual PassRefPtr<Frame> createFrame(const URL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) override;
377     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool) override;
378     virtual void recreatePlugin(Widget*) override;
379     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const URL&, const Vector<String>&, const Vector<String>&) override;
380
381     virtual ObjectContentType objectContentType(const URL&, const String&, bool) override { return ObjectContentType(); }
382     virtual String overrideMediaType() const override { return String(); }
383
384     virtual void redirectDataToPlugin(Widget*) override { }
385     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld&) override { }
386
387     virtual void registerForIconNotification(bool) override { }
388
389 #if PLATFORM(COCOA)
390     virtual RemoteAXObjectRef accessibilityRemoteObject() override { return 0; }
391     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const override { return response; }
392 #endif
393 #if PLATFORM(WIN) && USE(CFNETWORK)
394     // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
395     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) override { return true; }
396 #endif
397
398     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() override;
399
400 #if ENABLE(REQUEST_AUTOCOMPLETE)
401     virtual void didRequestAutocomplete(PassRefPtr<FormState>) override { }
402 #endif
403
404 #if PLATFORM(MAC)
405     virtual bool needsQuickLookResourceCachingQuirks() const override { return false; }
406 #endif
407
408     virtual bool isEmptyFrameLoaderClient() override { return true; }
409 };
410
411 class EmptyTextCheckerClient : public TextCheckerClient {
412 public:
413     virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const override { return true; }
414     virtual void ignoreWordInSpellDocument(const String&) override { }
415     virtual void learnWord(const String&) override { }
416     virtual void checkSpellingOfString(StringView, int*, int*) override { }
417     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) override { return String(); }
418     virtual void checkGrammarOfString(StringView, Vector<GrammarDetail>&, int*, int*) override { }
419
420 #if USE(UNIFIED_TEXT_CHECKING)
421     virtual Vector<TextCheckingResult> checkTextOfParagraph(StringView, TextCheckingTypeMask) override { return Vector<TextCheckingResult>(); }
422 #endif
423
424     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) override { }
425     virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) override;
426 };
427
428 class EmptyEditorClient : public EditorClient {
429     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
430 public:
431     EmptyEditorClient() { }
432     virtual ~EmptyEditorClient() { }
433     virtual void pageDestroyed() override { }
434
435     virtual bool shouldDeleteRange(Range*) override { return false; }
436     virtual bool smartInsertDeleteEnabled() override { return false; }
437     virtual bool isSelectTrailingWhitespaceEnabled() override { return false; }
438     virtual bool isContinuousSpellCheckingEnabled() override { return false; }
439     virtual void toggleContinuousSpellChecking() override { }
440     virtual bool isGrammarCheckingEnabled() override { return false; }
441     virtual void toggleGrammarChecking() override { }
442     virtual int spellCheckerDocumentTag() override { return -1; }
443
444
445     virtual bool shouldBeginEditing(Range*) override { return false; }
446     virtual bool shouldEndEditing(Range*) override { return false; }
447     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) override { return false; }
448     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) override { return false; }
449     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) override { return false; }
450
451     virtual bool shouldApplyStyle(StyleProperties*, Range*) override { return false; }
452     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) override { return false; }
453
454     virtual void didBeginEditing() override { }
455     virtual void respondToChangedContents() override { }
456     virtual void respondToChangedSelection(Frame*) override { }
457     virtual void didEndEditing() override { }
458     virtual void willWriteSelectionToPasteboard(Range*) override { }
459     virtual void didWriteSelectionToPasteboard() override { }
460     virtual void getClientPasteboardDataForRange(Range*, Vector<String>&, Vector<RefPtr<SharedBuffer>>&) override { }
461
462     virtual void registerUndoStep(PassRefPtr<UndoStep>) override;
463     virtual void registerRedoStep(PassRefPtr<UndoStep>) override;
464     virtual void clearUndoRedoOperations() override { }
465
466     virtual bool canCopyCut(Frame*, bool defaultValue) const override { return defaultValue; }
467     virtual bool canPaste(Frame*, bool defaultValue) const override { return defaultValue; }
468     virtual bool canUndo() const override { return false; }
469     virtual bool canRedo() const override { return false; }
470
471     virtual void undo() override { }
472     virtual void redo() override { }
473
474     virtual void handleKeyboardEvent(KeyboardEvent*) override { }
475     virtual void handleInputMethodKeydown(KeyboardEvent*) override { }
476
477     virtual void textFieldDidBeginEditing(Element*) override { }
478     virtual void textFieldDidEndEditing(Element*) override { }
479     virtual void textDidChangeInTextField(Element*) override { }
480     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) override { return false; }
481     virtual void textWillBeDeletedInTextField(Element*) override { }
482     virtual void textDidChangeInTextArea(Element*) override { }
483     virtual void overflowScrollPositionChanged() override { }
484
485 #if PLATFORM(IOS)
486     virtual void startDelayingAndCoalescingContentChangeNotifications() override { }
487     virtual void stopDelayingAndCoalescingContentChangeNotifications() override { }
488     virtual void writeDataToPasteboard(NSDictionary*) override { }
489     virtual NSArray* supportedPasteboardTypesForCurrentSelection() override { return nullptr; }
490     virtual NSArray* readDataFromPasteboard(NSString*, int) override { return nullptr; }
491     virtual bool hasRichlyEditableSelection() override { return false; }
492     virtual int getPasteboardItemsCount() override { return 0; }
493     virtual DocumentFragment* documentFragmentFromDelegate(int) override { return nullptr; }
494     virtual bool performsTwoStepPaste(DocumentFragment*) override { return false; }
495     virtual int pasteboardChangeCount() override { return 0; }
496 #endif
497
498 #if PLATFORM(COCOA)
499     virtual NSString* userVisibleString(NSURL*) override { return 0; }
500     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource>>&) override { return 0; };
501     virtual void setInsertionPasteboard(const String&) override { };
502     virtual NSURL *canonicalizeURL(NSURL*) override { return 0; }
503     virtual NSURL *canonicalizeURLString(NSString*) override { return 0; }
504 #endif
505
506 #if USE(APPKIT)
507     virtual void uppercaseWord() override { }
508     virtual void lowercaseWord() override { }
509     virtual void capitalizeWord() override { }
510 #endif
511
512 #if USE(AUTOMATIC_TEXT_REPLACEMENT)
513     virtual void showSubstitutionsPanel(bool) override { }
514     virtual bool substitutionsPanelIsShowing() override { return false; }
515     virtual void toggleSmartInsertDelete() override { }
516     virtual bool isAutomaticQuoteSubstitutionEnabled() override { return false; }
517     virtual void toggleAutomaticQuoteSubstitution() override { }
518     virtual bool isAutomaticLinkDetectionEnabled() override { return false; }
519     virtual void toggleAutomaticLinkDetection() override { }
520     virtual bool isAutomaticDashSubstitutionEnabled() override { return false; }
521     virtual void toggleAutomaticDashSubstitution() override { }
522     virtual bool isAutomaticTextReplacementEnabled() override { return false; }
523     virtual void toggleAutomaticTextReplacement() override { }
524     virtual bool isAutomaticSpellingCorrectionEnabled() override { return false; }
525     virtual void toggleAutomaticSpellingCorrection() override { }
526 #endif
527
528 #if ENABLE(DELETION_UI)
529     virtual bool shouldShowDeleteInterface(HTMLElement*) override { return false; }
530 #endif
531
532 #if PLATFORM(GTK)
533     virtual bool shouldShowUnicodeMenu() override { return false; }
534 #endif
535     virtual TextCheckerClient* textChecker() override { return &m_textCheckerClient; }
536
537     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) override { }
538     virtual void updateSpellingUIWithMisspelledWord(const String&) override { }
539     virtual void showSpellingUI(bool) override { }
540     virtual bool spellingUIIsShowing() override { return false; }
541
542     virtual void willSetInputMethodState() override { }
543     virtual void setInputMethodState(bool) override { }
544
545 private:
546     EmptyTextCheckerClient m_textCheckerClient;
547 };
548
549 #if ENABLE(CONTEXT_MENUS)
550 class EmptyContextMenuClient : public ContextMenuClient {
551     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
552 public:
553     EmptyContextMenuClient() { }
554     virtual ~EmptyContextMenuClient() {  }
555     virtual void contextMenuDestroyed() override { }
556
557 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
558     virtual std::unique_ptr<ContextMenu> customizeMenu(std::unique_ptr<ContextMenu>) override;
559 #else
560     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) override { return 0; }
561 #endif
562     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) override { }
563
564     virtual void downloadURL(const URL&) override { }
565     virtual void searchWithGoogle(const Frame*) override { }
566     virtual void lookUpInDictionary(Frame*) override { }
567     virtual bool isSpeaking() override { return false; }
568     virtual void speak(const String&) override { }
569     virtual void stopSpeaking() override { }
570
571 #if PLATFORM(COCOA)
572     virtual void searchWithSpotlight() override { }
573 #endif
574
575 #if USE(ACCESSIBILITY_CONTEXT_MENUS)
576     virtual void showContextMenu() override { }
577 #endif
578 };
579 #endif // ENABLE(CONTEXT_MENUS)
580
581 #if ENABLE(DRAG_SUPPORT)
582 class EmptyDragClient : public DragClient {
583     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
584 public:
585     EmptyDragClient() { }
586     virtual ~EmptyDragClient() {}
587     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData&) override { }
588     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) override { }
589     virtual DragDestinationAction actionMaskForDrag(DragData&) override { return DragDestinationActionNone; }
590     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) override { return DragSourceActionNone; }
591     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, DataTransfer&, Frame&, bool) override { }
592     virtual void dragControllerDestroyed() override { }
593 };
594 #endif // ENABLE(DRAG_SUPPORT)
595
596 class EmptyInspectorClient : public InspectorClient {
597     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
598 public:
599     EmptyInspectorClient() { }
600     virtual ~EmptyInspectorClient() { }
601
602     virtual void inspectorDestroyed() override { }
603     
604     virtual InspectorFrontendChannel* openInspectorFrontend(InspectorController*) override { return 0; }
605     virtual void closeInspectorFrontend() override { }
606     virtual void bringFrontendToFront() override { }
607
608     virtual void highlight() override { }
609     virtual void hideHighlight() override { }
610 };
611
612 class EmptyDeviceClient : public DeviceClient {
613 public:
614     virtual void startUpdating() override { }
615     virtual void stopUpdating() override { }
616 };
617
618 class EmptyDeviceMotionClient : public DeviceMotionClient {
619 public:
620     virtual void setController(DeviceMotionController*) override { }
621     virtual DeviceMotionData* lastMotion() const override { return 0; }
622     virtual void deviceMotionControllerDestroyed() override { }
623 };
624
625 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
626 public:
627     virtual void setController(DeviceOrientationController*) override { }
628     virtual DeviceOrientationData* lastOrientation() const override { return 0; }
629     virtual void deviceOrientationControllerDestroyed() override { }
630 };
631
632 class EmptyProgressTrackerClient : public ProgressTrackerClient {
633     virtual void willChangeEstimatedProgress() override { }
634     virtual void didChangeEstimatedProgress() override { }
635
636     virtual void progressStarted(Frame&) override { }
637     virtual void progressEstimateChanged(Frame&) override { }
638     virtual void progressFinished(Frame&) override { }
639 };
640
641 void fillWithEmptyClients(Page::PageClients&);
642
643 }
644
645 #endif // EmptyClients_h