[Content Filtering] Determine navigation and content policy before continuing to...
[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 "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 0; }
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&) { }
134 #endif
135 #if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
136     virtual void scheduleAnimation() { }
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*, 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 dispatchDidHandleOnloadEvents() 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 0; }
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 cannotShowURLError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
326     virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) override { return ResourceError("", 0, "", ""); }
327
328     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
329     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
330     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) override { return ResourceError("", 0, "", ""); }
331
332     virtual bool shouldFallBack(const ResourceError&) override { return false; }
333
334     virtual bool canHandleRequest(const ResourceRequest&) const override { return false; }
335     virtual bool canShowMIMEType(const String&) const override { return false; }
336     virtual bool canShowMIMETypeAsHTML(const String&) const override { return false; }
337     virtual bool representationExistsForURLScheme(const String&) const override { return false; }
338     virtual String generatedMIMETypeForURLScheme(const String&) const override { return ""; }
339
340     virtual void frameLoadCompleted() override { }
341     virtual void restoreViewState() override { }
342     virtual void provisionalLoadStarted() override { }
343     virtual void didFinishLoad() override { }
344     virtual void prepareForDataSourceReplacement() override { }
345
346     virtual Ref<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) override;
347     virtual void updateCachedDocumentLoader(DocumentLoader&) override { }
348     virtual void setTitle(const StringWithDirection&, const URL&) override { }
349
350     virtual String userAgent(const URL&) override { return ""; }
351
352     virtual void savePlatformDataToCachedFrame(CachedFrame*) override { }
353     virtual void transitionToCommittedFromCachedFrame(CachedFrame*) override { }
354 #if PLATFORM(IOS)
355     virtual void didRestoreFrameHierarchyForCachedFrame() override { }
356 #endif
357     virtual void transitionToCommittedForNewPage() override { }
358
359     virtual void didSaveToPageCache() override { }
360     virtual void didRestoreFromPageCache() override { }
361
362     virtual void dispatchDidBecomeFrameset(bool) override { }
363
364     virtual void updateGlobalHistory() override { }
365     virtual void updateGlobalHistoryRedirectLinks() override { }
366     virtual bool shouldGoToHistoryItem(HistoryItem*) const override { return false; }
367     virtual void updateGlobalHistoryItemForPage() override { }
368     virtual void saveViewStateToItem(HistoryItem*) override { }
369     virtual bool canCachePage() const override { return false; }
370     virtual void didDisplayInsecureContent() override { }
371     virtual void didRunInsecureContent(SecurityOrigin*, const URL&) override { }
372     virtual void didDetectXSS(const URL&, bool) override { }
373     virtual RefPtr<Frame> createFrame(const URL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) override;
374     virtual RefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool) override;
375     virtual void recreatePlugin(Widget*) override;
376     virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const URL&, const Vector<String>&, const Vector<String>&) override;
377
378     virtual ObjectContentType objectContentType(const URL&, const String&, bool) override { return ObjectContentType(); }
379     virtual String overrideMediaType() const override { return String(); }
380
381     virtual void redirectDataToPlugin(Widget*) override { }
382     virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld&) override { }
383
384     virtual void registerForIconNotification(bool) override { }
385
386 #if PLATFORM(COCOA)
387     virtual RemoteAXObjectRef accessibilityRemoteObject() override { return 0; }
388     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const override { return response; }
389 #endif
390 #if PLATFORM(WIN) && USE(CFNETWORK)
391     // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
392     virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) override { return true; }
393 #endif
394
395     virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() override;
396
397 #if ENABLE(REQUEST_AUTOCOMPLETE)
398     virtual void didRequestAutocomplete(PassRefPtr<FormState>) override { }
399 #endif
400
401     virtual bool isEmptyFrameLoaderClient() override { return true; }
402 };
403
404 class EmptyTextCheckerClient : public TextCheckerClient {
405 public:
406     virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const override { return true; }
407     virtual void ignoreWordInSpellDocument(const String&) override { }
408     virtual void learnWord(const String&) override { }
409     virtual void checkSpellingOfString(StringView, int*, int*) override { }
410     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) override { return String(); }
411     virtual void checkGrammarOfString(StringView, Vector<GrammarDetail>&, int*, int*) override { }
412
413 #if USE(UNIFIED_TEXT_CHECKING)
414     virtual Vector<TextCheckingResult> checkTextOfParagraph(StringView, TextCheckingTypeMask) override { return Vector<TextCheckingResult>(); }
415 #endif
416
417     virtual void getGuessesForWord(const String&, const String&, Vector<String>&) override { }
418     virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) override;
419 };
420
421 class EmptyEditorClient : public EditorClient {
422     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
423 public:
424     EmptyEditorClient() { }
425     virtual ~EmptyEditorClient() { }
426     virtual void pageDestroyed() override { }
427
428     virtual bool shouldDeleteRange(Range*) override { return false; }
429     virtual bool smartInsertDeleteEnabled() override { return false; }
430     virtual bool isSelectTrailingWhitespaceEnabled() override { return false; }
431     virtual bool isContinuousSpellCheckingEnabled() override { return false; }
432     virtual void toggleContinuousSpellChecking() override { }
433     virtual bool isGrammarCheckingEnabled() override { return false; }
434     virtual void toggleGrammarChecking() override { }
435     virtual int spellCheckerDocumentTag() override { return -1; }
436
437
438     virtual bool shouldBeginEditing(Range*) override { return false; }
439     virtual bool shouldEndEditing(Range*) override { return false; }
440     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) override { return false; }
441     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) override { return false; }
442     virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) override { return false; }
443
444     virtual bool shouldApplyStyle(StyleProperties*, Range*) override { return false; }
445     virtual void didApplyStyle() override { }
446     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) override { return false; }
447
448     virtual void didBeginEditing() override { }
449     virtual void respondToChangedContents() override { }
450     virtual void respondToChangedSelection(Frame*) override { }
451     virtual void didChangeSelectionAndUpdateLayout() override { }
452     virtual void discardedComposition(Frame*) override { }
453     virtual void didEndEditing() override { }
454     virtual void willWriteSelectionToPasteboard(Range*) override { }
455     virtual void didWriteSelectionToPasteboard() override { }
456     virtual void getClientPasteboardDataForRange(Range*, Vector<String>&, Vector<RefPtr<SharedBuffer>>&) override { }
457
458     virtual void registerUndoStep(PassRefPtr<UndoStep>) override;
459     virtual void registerRedoStep(PassRefPtr<UndoStep>) override;
460     virtual void clearUndoRedoOperations() override { }
461
462     virtual bool canCopyCut(Frame*, bool defaultValue) const override { return defaultValue; }
463     virtual bool canPaste(Frame*, bool defaultValue) const override { return defaultValue; }
464     virtual bool canUndo() const override { return false; }
465     virtual bool canRedo() const override { return false; }
466
467     virtual void undo() override { }
468     virtual void redo() override { }
469
470     virtual void handleKeyboardEvent(KeyboardEvent*) override { }
471     virtual void handleInputMethodKeydown(KeyboardEvent*) override { }
472
473     virtual void textFieldDidBeginEditing(Element*) override { }
474     virtual void textFieldDidEndEditing(Element*) override { }
475     virtual void textDidChangeInTextField(Element*) override { }
476     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) override { return false; }
477     virtual void textWillBeDeletedInTextField(Element*) override { }
478     virtual void textDidChangeInTextArea(Element*) override { }
479     virtual void overflowScrollPositionChanged() override { }
480
481 #if PLATFORM(IOS)
482     virtual void startDelayingAndCoalescingContentChangeNotifications() override { }
483     virtual void stopDelayingAndCoalescingContentChangeNotifications() override { }
484     virtual void writeDataToPasteboard(NSDictionary*) override { }
485     virtual NSArray* supportedPasteboardTypesForCurrentSelection() override { return nullptr; }
486     virtual NSArray* readDataFromPasteboard(NSString*, int) override { return nullptr; }
487     virtual bool hasRichlyEditableSelection() override { return false; }
488     virtual int getPasteboardItemsCount() override { return 0; }
489     virtual DocumentFragment* documentFragmentFromDelegate(int) override { return nullptr; }
490     virtual bool performsTwoStepPaste(DocumentFragment*) override { return false; }
491     virtual int pasteboardChangeCount() override { return 0; }
492 #endif
493
494 #if PLATFORM(COCOA)
495     virtual NSString* userVisibleString(NSURL*) override { return 0; }
496     virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource>>&) override { return 0; };
497     virtual void setInsertionPasteboard(const String&) override { };
498     virtual NSURL *canonicalizeURL(NSURL*) override { return 0; }
499     virtual NSURL *canonicalizeURLString(NSString*) override { return 0; }
500 #endif
501
502 #if USE(APPKIT)
503     virtual void uppercaseWord() override { }
504     virtual void lowercaseWord() override { }
505     virtual void capitalizeWord() override { }
506 #endif
507
508 #if USE(AUTOMATIC_TEXT_REPLACEMENT)
509     virtual void showSubstitutionsPanel(bool) override { }
510     virtual bool substitutionsPanelIsShowing() override { return false; }
511     virtual void toggleSmartInsertDelete() override { }
512     virtual bool isAutomaticQuoteSubstitutionEnabled() override { return false; }
513     virtual void toggleAutomaticQuoteSubstitution() override { }
514     virtual bool isAutomaticLinkDetectionEnabled() override { return false; }
515     virtual void toggleAutomaticLinkDetection() override { }
516     virtual bool isAutomaticDashSubstitutionEnabled() override { return false; }
517     virtual void toggleAutomaticDashSubstitution() override { }
518     virtual bool isAutomaticTextReplacementEnabled() override { return false; }
519     virtual void toggleAutomaticTextReplacement() override { }
520     virtual bool isAutomaticSpellingCorrectionEnabled() override { return false; }
521     virtual void toggleAutomaticSpellingCorrection() override { }
522 #endif
523
524 #if PLATFORM(GTK)
525     virtual bool shouldShowUnicodeMenu() override { return false; }
526 #endif
527     virtual TextCheckerClient* textChecker() override { return &m_textCheckerClient; }
528
529     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) override { }
530     virtual void updateSpellingUIWithMisspelledWord(const String&) override { }
531     virtual void showSpellingUI(bool) override { }
532     virtual bool spellingUIIsShowing() override { return false; }
533
534     virtual void willSetInputMethodState() override { }
535     virtual void setInputMethodState(bool) override { }
536
537 private:
538     EmptyTextCheckerClient m_textCheckerClient;
539 };
540
541 #if ENABLE(CONTEXT_MENUS)
542 class EmptyContextMenuClient : public ContextMenuClient {
543     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
544 public:
545     EmptyContextMenuClient() { }
546     virtual ~EmptyContextMenuClient() {  }
547     virtual void contextMenuDestroyed() override { }
548
549 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
550     virtual std::unique_ptr<ContextMenu> customizeMenu(std::unique_ptr<ContextMenu>) override;
551 #else
552     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) override { return 0; }
553 #endif
554     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) override { }
555
556     virtual void downloadURL(const URL&) override { }
557     virtual void searchWithGoogle(const Frame*) override { }
558     virtual void lookUpInDictionary(Frame*) override { }
559     virtual bool isSpeaking() override { return false; }
560     virtual void speak(const String&) override { }
561     virtual void stopSpeaking() override { }
562
563     virtual ContextMenuItem shareMenuItem(const HitTestResult&) override { return ContextMenuItem(); }
564
565 #if PLATFORM(COCOA)
566     virtual void searchWithSpotlight() override { }
567 #endif
568
569 #if USE(ACCESSIBILITY_CONTEXT_MENUS)
570     virtual void showContextMenu() override { }
571 #endif
572 };
573 #endif // ENABLE(CONTEXT_MENUS)
574
575 #if ENABLE(DRAG_SUPPORT)
576 class EmptyDragClient : public DragClient {
577     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
578 public:
579     EmptyDragClient() { }
580     virtual ~EmptyDragClient() {}
581     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData&) override { }
582     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) override { }
583     virtual DragDestinationAction actionMaskForDrag(DragData&) override { return DragDestinationActionNone; }
584     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) override { return DragSourceActionNone; }
585     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, DataTransfer&, Frame&, bool) override { }
586     virtual void dragControllerDestroyed() override { }
587 };
588 #endif // ENABLE(DRAG_SUPPORT)
589
590 class EmptyInspectorClient : public InspectorClient {
591     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
592 public:
593     EmptyInspectorClient() { }
594     virtual ~EmptyInspectorClient() { }
595
596     virtual void inspectorDestroyed() override { }
597     
598     virtual Inspector::FrontendChannel* openInspectorFrontend(InspectorController*) override { return 0; }
599     virtual void closeInspectorFrontend() override { }
600     virtual void bringFrontendToFront() override { }
601
602     virtual void highlight() override { }
603     virtual void hideHighlight() override { }
604 };
605
606 class EmptyDeviceClient : public DeviceClient {
607 public:
608     virtual void startUpdating() override { }
609     virtual void stopUpdating() override { }
610 };
611
612 class EmptyDeviceMotionClient : public DeviceMotionClient {
613 public:
614     virtual void setController(DeviceMotionController*) override { }
615     virtual DeviceMotionData* lastMotion() const override { return 0; }
616     virtual void deviceMotionControllerDestroyed() override { }
617 };
618
619 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
620 public:
621     virtual void setController(DeviceOrientationController*) override { }
622     virtual DeviceOrientationData* lastOrientation() const override { return 0; }
623     virtual void deviceOrientationControllerDestroyed() override { }
624 };
625
626 class EmptyProgressTrackerClient : public ProgressTrackerClient {
627     virtual void willChangeEstimatedProgress() override { }
628     virtual void didChangeEstimatedProgress() override { }
629
630     virtual void progressStarted(Frame&) override { }
631     virtual void progressEstimateChanged(Frame&) override { }
632     virtual void progressFinished(Frame&) override { }
633 };
634
635 class EmptyDiagnosticLoggingClient final : public DiagnosticLoggingClient {
636     virtual void logDiagnosticMessage(const String&, const String&, ShouldSample) override { }
637     virtual void logDiagnosticMessageWithResult(const String&, const String&, DiagnosticLoggingResultType, ShouldSample) override { }
638     virtual void logDiagnosticMessageWithValue(const String&, const String&, const String&, ShouldSample) override { }
639
640     virtual void mainFrameDestroyed() override { }
641 };
642
643 void fillWithEmptyClients(PageConfiguration&);
644
645 }
646
647 #endif // EmptyClients_h