21358b918c3a69aae0c9c738fb24a44cecc4d2b8
[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 PassOwnPtr<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 setNeedsOneShotDrawingSynchronization() override { }
186     virtual void scheduleCompositingLayerFlush() override { }
187
188 #if PLATFORM(WIN)
189     virtual void setLastSetCursorToCurrentCursor() override { }
190     virtual void AXStartFrameLoad() override { }
191     virtual void AXFinishFrameLoad() override { }
192 #endif
193
194 #if PLATFORM(IOS)
195 #if ENABLE(IOS_TOUCH_EVENTS)
196     virtual void didPreventDefaultForEvent() override { }
197 #endif
198     virtual void didReceiveMobileDocType(bool) override { }
199     virtual void setNeedsScrollNotifications(Frame*, bool) override { }
200     virtual void observedContentChange(Frame*) override { }
201     virtual void clearContentChangeObservers(Frame*) override { }
202     virtual void notifyRevealedSelectionByScrollingFrame(Frame*) override { }
203     virtual void didLayout(LayoutType) override { }
204     virtual void didStartOverflowScroll() override { }
205     virtual void didEndOverflowScroll() override { }
206
207     virtual void suppressFormNotifications() override { }
208     virtual void restoreFormNotifications() override { }
209
210     virtual void addOrUpdateScrollingLayer(Node*, PlatformLayer*, PlatformLayer*, const IntSize&, bool, bool) override { }
211     virtual void removeScrollingLayer(Node*, PlatformLayer*, PlatformLayer*) override { }
212
213     virtual void webAppOrientationsUpdated() override { };
214     virtual void showPlaybackTargetPicker(bool) override { };
215 #endif // PLATFORM(IOS)
216
217 #if ENABLE(ORIENTATION_EVENTS)
218     virtual int deviceOrientation() const override { return 0; }
219 #endif
220
221 #if PLATFORM(IOS)
222     virtual bool isStopping() override { return false; }
223 #endif
224
225 #if ENABLE(TOUCH_EVENTS)
226     virtual void needTouchEvents(bool) override { }
227 #endif
228     
229     virtual void numWheelEventHandlersChanged(unsigned) override { }
230     
231     virtual bool isEmptyChromeClient() const override { return true; }
232
233     virtual void didAssociateFormControls(const Vector<RefPtr<Element>>&) override { }
234     virtual bool shouldNotifyOnFormChanges() override { return false; }
235 };
236
237 // FIXME (bug 116233): Get rid of EmptyFrameLoaderClient. It is a travesty.
238
239 class EmptyFrameLoaderClient : public FrameLoaderClient {
240     WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
241 public:
242     EmptyFrameLoaderClient() { }
243     virtual ~EmptyFrameLoaderClient() {  }
244     virtual void frameLoaderDestroyed() override { }
245
246     virtual bool hasWebView() const override { return true; } // mainly for assertions
247
248     virtual void makeRepresentation(DocumentLoader*) override { }
249 #if PLATFORM(IOS)
250     virtual bool forceLayoutOnRestoreFromPageCache() override { return false; }
251 #endif
252     virtual void forceLayoutForNonHTML() override { }
253
254     virtual void setCopiesOnScroll() override { }
255
256     virtual void detachedFromParent2() override { }
257     virtual void detachedFromParent3() override { }
258
259     virtual void convertMainResourceLoadToDownload(DocumentLoader*, const ResourceRequest&, const ResourceResponse&) override { }
260
261     virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) override { }
262     virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) override { return false; }
263     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) override { }
264     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
265     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) override { }
266 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
267     virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) override { return false; }
268 #endif
269
270 #if PLATFORM(IOS)
271     virtual RetainPtr<CFDictionaryRef> connectionProperties(DocumentLoader*, unsigned long) override { return nullptr; }
272 #endif
273
274     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) override { }
275     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) override { }
276     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) override { }
277     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) override { }
278     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) override { return false; }
279
280     virtual void dispatchDidHandleOnloadEvents() override { }
281     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() override { }
282     virtual void dispatchDidCancelClientRedirect() override { }
283     virtual void dispatchWillPerformClientRedirect(const URL&, double, double) override { }
284     virtual void dispatchDidChangeLocationWithinPage() override { }
285     virtual void dispatchDidPushStateWithinPage() override { }
286     virtual void dispatchDidReplaceStateWithinPage() override { }
287     virtual void dispatchDidPopStateWithinPage() override { }
288     virtual void dispatchWillClose() override { }
289     virtual void dispatchDidReceiveIcon() override { }
290     virtual void dispatchDidStartProvisionalLoad() override { }
291     virtual void dispatchDidReceiveTitle(const StringWithDirection&) override { }
292     virtual void dispatchDidChangeIcons(IconType) override { }
293     virtual void dispatchDidCommitLoad() override { }
294     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) override { }
295     virtual void dispatchDidFailLoad(const ResourceError&) override { }
296     virtual void dispatchDidFinishDocumentLoad() override { }
297     virtual void dispatchDidFinishLoad() override { }
298     virtual void dispatchDidLayout(LayoutMilestones) override { }
299
300     virtual Frame* dispatchCreatePage(const NavigationAction&) override { return 0; }
301     virtual void dispatchShow() override { }
302
303     virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction) override { }
304     virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&, FramePolicyFunction) override;
305     virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, FramePolicyFunction) override;
306     virtual void cancelPolicyCheck() override { }
307
308     virtual void dispatchUnableToImplementPolicy(const ResourceError&) override { }
309
310     virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) override;
311     virtual void dispatchWillSubmitForm(PassRefPtr<FormState>, FramePolicyFunction) override;
312
313     virtual void revertToProvisionalState(DocumentLoader*) override { }
314     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) override { }
315
316     virtual void setMainFrameDocumentReady(bool) override { }
317
318     virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) override { UNUSED_PARAM(suggestedName); }
319
320     virtual void willChangeTitle(DocumentLoader*) override { }
321     virtual void didChangeTitle(DocumentLoader*) override { }
322
323     virtual void committedLoad(DocumentLoader*, const char*, int) override { }
324     virtual void finishedLoading(DocumentLoader*) override { }
325
326     virtual ResourceError cancelledError(const ResourceRequest&) override { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
327     virtual ResourceError blockedError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
328     virtual ResourceError cannotShowURLError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
329     virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
330
331     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
332     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
333     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
334
335     virtual bool shouldFallBack(const ResourceError&) override { return false; }
336
337     virtual bool canHandleRequest(const ResourceRequest&) const override { return false; }
338     virtual bool canShowMIMEType(const String&) const override { return false; }
339     virtual bool canShowMIMETypeAsHTML(const String&) const override { return false; }
340     virtual bool representationExistsForURLScheme(const String&) const override { return false; }
341     virtual String generatedMIMETypeForURLScheme(const String&) const override { return ""; }
342
343     virtual void frameLoadCompleted() override { }
344     virtual void restoreViewState() override { }
345     virtual void provisionalLoadStarted() override { }
346     virtual void didFinishLoad() override { }
347     virtual void prepareForDataSourceReplacement() override { }
348
349     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) override;
350     virtual void setTitle(const StringWithDirection&, const URL&) override { }
351
352     virtual String userAgent(const URL&) override { return ""; }
353
354     virtual void savePlatformDataToCachedFrame(CachedFrame*) override { }
355     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) override { }
356 #if PLATFORM(IOS)
357     virtual void didRestoreFrameHierarchyForCachedFrame() override { }
358 #endif
359     virtual void transitionToCommittedForNewPage() override { }
360
361     virtual void didSaveToPageCache() override { }
362     virtual void didRestoreFromPageCache() override { }
363
364     virtual void dispatchDidBecomeFrameset(bool) override { }
365
366     virtual void updateGlobalHistory() override { }
367     virtual void updateGlobalHistoryRedirectLinks() override { }
368     virtual bool shouldGoToHistoryItem(HistoryItem*) const override { return false; }
369     virtual void updateGlobalHistoryItemForPage() override { }
370     virtual void saveViewStateToItem(HistoryItem*) override { }
371     virtual bool canCachePage() const override { return false; }
372     virtual void didDisplayInsecureContent() override { }
373     virtual void didRunInsecureContent(SecurityOrigin*, const URL&) override { }
374     virtual void didDetectXSS(const URL&, bool) override { }
375     virtual PassRefPtr<Frame> createFrame(const URL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) override;
376     virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool) override;
377     virtual void recreatePlugin(Widget*) override;
378     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const URL&, const Vector<String>&, const Vector<String>&) override;
379
380     virtual ObjectContentType objectContentType(const URL&, const String&, bool) override { return ObjectContentType(); }
381     virtual String overrideMediaType() const override { return String(); }
382
383     virtual void redirectDataToPlugin(Widget*) override { }
384     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld&) override { }
385
386     virtual void registerForIconNotification(bool) override { }
387
388 #if PLATFORM(COCOA)
389     virtual RemoteAXObjectRef accessibilityRemoteObject() override { return 0; }
390     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const override { return response; }
391 #endif
392 #if PLATFORM(WIN) && USE(CFNETWORK)
393     // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
394     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) override { return true; }
395 #endif
396
397     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() override;
398
399     virtual bool isEmptyFrameLoaderClient() override { return true; }
400 };
401
402 class EmptyTextCheckerClient : public TextCheckerClient {
403 public:
404     virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const override { return true; }
405     virtual void ignoreWordInSpellDocument(const String&) override { }
406     virtual void learnWord(const String&) override { }
407     virtual void checkSpellingOfString(StringView, int*, int*) override { }
408     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) override { return String(); }
409     virtual void checkGrammarOfString(StringView, Vector<GrammarDetail>&, int*, int*) override { }
410
411 #if USE(UNIFIED_TEXT_CHECKING)
412     virtual Vector<TextCheckingResult> checkTextOfParagraph(StringView, TextCheckingTypeMask) override { return Vector<TextCheckingResult>(); }
413 #endif
414
415     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) override { }
416     virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) override;
417 };
418
419 class EmptyEditorClient : public EditorClient {
420     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
421 public:
422     EmptyEditorClient() { }
423     virtual ~EmptyEditorClient() { }
424     virtual void pageDestroyed() override { }
425
426     virtual bool shouldDeleteRange(Range*) override { return false; }
427     virtual bool smartInsertDeleteEnabled() override { return false; }
428     virtual bool isSelectTrailingWhitespaceEnabled() override { return false; }
429     virtual bool isContinuousSpellCheckingEnabled() override { return false; }
430     virtual void toggleContinuousSpellChecking() override { }
431     virtual bool isGrammarCheckingEnabled() override { return false; }
432     virtual void toggleGrammarChecking() override { }
433     virtual int spellCheckerDocumentTag() override { return -1; }
434
435
436     virtual bool shouldBeginEditing(Range*) override { return false; }
437     virtual bool shouldEndEditing(Range*) override { return false; }
438     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) override { return false; }
439     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) override { return false; }
440     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) override { return false; }
441
442     virtual bool shouldApplyStyle(StyleProperties*, Range*) override { return false; }
443     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) override { return false; }
444
445     virtual void didBeginEditing() override { }
446     virtual void respondToChangedContents() override { }
447     virtual void respondToChangedSelection(Frame*) override { }
448     virtual void didEndEditing() override { }
449     virtual void willWriteSelectionToPasteboard(Range*) override { }
450     virtual void didWriteSelectionToPasteboard() override { }
451     virtual void getClientPasteboardDataForRange(Range*, Vector<String>&, Vector<RefPtr<SharedBuffer>>&) override { }
452
453     virtual void registerUndoStep(PassRefPtr<UndoStep>) override;
454     virtual void registerRedoStep(PassRefPtr<UndoStep>) override;
455     virtual void clearUndoRedoOperations() override { }
456
457     virtual bool canCopyCut(Frame*, bool defaultValue) const override { return defaultValue; }
458     virtual bool canPaste(Frame*, bool defaultValue) const override { return defaultValue; }
459     virtual bool canUndo() const override { return false; }
460     virtual bool canRedo() const override { return false; }
461
462     virtual void undo() override { }
463     virtual void redo() override { }
464
465     virtual void handleKeyboardEvent(KeyboardEvent*) override { }
466     virtual void handleInputMethodKeydown(KeyboardEvent*) override { }
467
468     virtual void textFieldDidBeginEditing(Element*) override { }
469     virtual void textFieldDidEndEditing(Element*) override { }
470     virtual void textDidChangeInTextField(Element*) override { }
471     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) override { return false; }
472     virtual void textWillBeDeletedInTextField(Element*) override { }
473     virtual void textDidChangeInTextArea(Element*) override { }
474     virtual void overflowScrollPositionChanged() override { }
475
476 #if PLATFORM(IOS)
477     virtual void startDelayingAndCoalescingContentChangeNotifications() override { }
478     virtual void stopDelayingAndCoalescingContentChangeNotifications() override { }
479     virtual void writeDataToPasteboard(NSDictionary*) override { }
480     virtual NSArray* supportedPasteboardTypesForCurrentSelection() override { return nullptr; }
481     virtual NSArray* readDataFromPasteboard(NSString*, int) override { return nullptr; }
482     virtual bool hasRichlyEditableSelection() override { return false; }
483     virtual int getPasteboardItemsCount() override { return 0; }
484     virtual DocumentFragment* documentFragmentFromDelegate(int) override { return nullptr; }
485     virtual bool performsTwoStepPaste(DocumentFragment*) override { return false; }
486     virtual int pasteboardChangeCount() override { return 0; }
487 #endif
488
489 #if PLATFORM(COCOA)
490     virtual NSString* userVisibleString(NSURL*) override { return 0; }
491     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource>>&) override { return 0; };
492     virtual void setInsertionPasteboard(const String&) override { };
493     virtual NSURL *canonicalizeURL(NSURL*) override { return 0; }
494     virtual NSURL *canonicalizeURLString(NSString*) override { return 0; }
495 #endif
496
497 #if USE(APPKIT)
498     virtual void uppercaseWord() override { }
499     virtual void lowercaseWord() override { }
500     virtual void capitalizeWord() override { }
501 #endif
502
503 #if USE(AUTOMATIC_TEXT_REPLACEMENT)
504     virtual void showSubstitutionsPanel(bool) override { }
505     virtual bool substitutionsPanelIsShowing() override { return false; }
506     virtual void toggleSmartInsertDelete() override { }
507     virtual bool isAutomaticQuoteSubstitutionEnabled() override { return false; }
508     virtual void toggleAutomaticQuoteSubstitution() override { }
509     virtual bool isAutomaticLinkDetectionEnabled() override { return false; }
510     virtual void toggleAutomaticLinkDetection() override { }
511     virtual bool isAutomaticDashSubstitutionEnabled() override { return false; }
512     virtual void toggleAutomaticDashSubstitution() override { }
513     virtual bool isAutomaticTextReplacementEnabled() override { return false; }
514     virtual void toggleAutomaticTextReplacement() override { }
515     virtual bool isAutomaticSpellingCorrectionEnabled() override { return false; }
516     virtual void toggleAutomaticSpellingCorrection() override { }
517 #endif
518
519 #if ENABLE(DELETION_UI)
520     virtual bool shouldShowDeleteInterface(HTMLElement*) override { return false; }
521 #endif
522
523 #if PLATFORM(GTK)
524     virtual bool shouldShowUnicodeMenu() override { return false; }
525 #endif
526     virtual TextCheckerClient* textChecker() override { return &m_textCheckerClient; }
527
528     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) override { }
529     virtual void updateSpellingUIWithMisspelledWord(const String&) override { }
530     virtual void showSpellingUI(bool) override { }
531     virtual bool spellingUIIsShowing() override { return false; }
532
533     virtual void willSetInputMethodState() override { }
534     virtual void setInputMethodState(bool) override { }
535
536 private:
537     EmptyTextCheckerClient m_textCheckerClient;
538 };
539
540 #if ENABLE(CONTEXT_MENUS)
541 class EmptyContextMenuClient : public ContextMenuClient {
542     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
543 public:
544     EmptyContextMenuClient() { }
545     virtual ~EmptyContextMenuClient() {  }
546     virtual void contextMenuDestroyed() override { }
547
548 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
549     virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) override;
550 #else
551     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) override { return 0; }
552 #endif
553     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) override { }
554
555     virtual void downloadURL(const URL&) override { }
556     virtual void searchWithGoogle(const Frame*) override { }
557     virtual void lookUpInDictionary(Frame*) override { }
558     virtual bool isSpeaking() override { return false; }
559     virtual void speak(const String&) override { }
560     virtual void stopSpeaking() override { }
561
562 #if PLATFORM(COCOA)
563     virtual void searchWithSpotlight() override { }
564 #endif
565
566 #if USE(ACCESSIBILITY_CONTEXT_MENUS)
567     virtual void showContextMenu() override { }
568 #endif
569 };
570 #endif // ENABLE(CONTEXT_MENUS)
571
572 #if ENABLE(DRAG_SUPPORT)
573 class EmptyDragClient : public DragClient {
574     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
575 public:
576     EmptyDragClient() { }
577     virtual ~EmptyDragClient() {}
578     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData&) override { }
579     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) override { }
580     virtual DragDestinationAction actionMaskForDrag(DragData&) override { return DragDestinationActionNone; }
581     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) override { return DragSourceActionNone; }
582     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, DataTransfer&, Frame&, bool) override { }
583     virtual void dragControllerDestroyed() override { }
584 };
585 #endif // ENABLE(DRAG_SUPPORT)
586
587 class EmptyInspectorClient : public InspectorClient {
588     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
589 public:
590     EmptyInspectorClient() { }
591     virtual ~EmptyInspectorClient() { }
592
593     virtual void inspectorDestroyed() override { }
594     
595     virtual InspectorFrontendChannel* openInspectorFrontend(InspectorController*) override { return 0; }
596     virtual void closeInspectorFrontend() override { }
597     virtual void bringFrontendToFront() override { }
598
599     virtual void highlight() override { }
600     virtual void hideHighlight() override { }
601 };
602
603 class EmptyDeviceClient : public DeviceClient {
604 public:
605     virtual void startUpdating() override { }
606     virtual void stopUpdating() override { }
607 };
608
609 class EmptyDeviceMotionClient : public DeviceMotionClient {
610 public:
611     virtual void setController(DeviceMotionController*) override { }
612     virtual DeviceMotionData* lastMotion() const override { return 0; }
613     virtual void deviceMotionControllerDestroyed() override { }
614 };
615
616 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
617 public:
618     virtual void setController(DeviceOrientationController*) override { }
619     virtual DeviceOrientationData* lastOrientation() const override { return 0; }
620     virtual void deviceOrientationControllerDestroyed() override { }
621 };
622
623 class EmptyProgressTrackerClient : public ProgressTrackerClient {
624     virtual void willChangeEstimatedProgress() override { }
625     virtual void didChangeEstimatedProgress() override { }
626
627     virtual void progressStarted(Frame&) override { }
628     virtual void progressEstimateChanged(Frame&) override { }
629     virtual void progressFinished(Frame&) override { }
630 };
631
632 void fillWithEmptyClients(Page::PageClients&);
633
634 }
635
636 #endif // EmptyClients_h