[GTK][WebInspector] Support for saving data
[WebKit-https.git] / Source / WebKit / UIProcess / PageClient.h
1 /*
2  * Copyright (C) 2010-2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include "LayerTreeContext.h"
29 #include "SameDocumentNavigationType.h"
30 #include "ShareableBitmap.h"
31 #include "WebColorPicker.h"
32 #include "WebDataListSuggestionsDropdown.h"
33 #include "WebPopupMenuProxy.h"
34 #include <WebCore/ActivityState.h>
35 #include <WebCore/AlternativeTextClient.h>
36 #include <WebCore/DragActions.h>
37 #include <WebCore/EditorClient.h>
38 #include <WebCore/FocusDirection.h>
39 #include <WebCore/InputMode.h>
40 #include <WebCore/UserInterfaceLayoutDirection.h>
41 #include <WebCore/ValidationBubble.h>
42 #include <wtf/CompletionHandler.h>
43 #include <wtf/Forward.h>
44 #include <wtf/URL.h>
45 #include <wtf/Variant.h>
46 #include <wtf/WeakPtr.h>
47
48 #if PLATFORM(COCOA)
49 #include "PluginComplexTextInputState.h"
50 #include "RemoteLayerTreeNode.h"
51 #include "WKFoundation.h"
52
53 OBJC_CLASS CALayer;
54 OBJC_CLASS NSFileWrapper;
55 OBJC_CLASS NSMenu;
56 OBJC_CLASS NSSet;
57 OBJC_CLASS UIGestureRecognizer;
58 OBJC_CLASS WKDrawingView;
59 OBJC_CLASS _WKRemoteObjectRegistry;
60
61 #if USE(APPKIT)
62 OBJC_CLASS WKView;
63 OBJC_CLASS NSTextAlternatives;
64 #endif
65 #endif
66
67 namespace API {
68 class Attachment;
69 class HitTestResult;
70 class Object;
71 class OpenPanelParameters;
72 class SecurityOrigin;
73 }
74
75 namespace IPC {
76 class DataReference;
77 }
78
79 namespace WebCore {
80 class Color;
81 class Cursor;
82 class FloatQuad;
83 class Region;
84 class TextIndicator;
85 class WebMediaSessionManager;
86
87 #if PLATFORM(GTK)
88 class SelectionData;
89 #endif
90
91 enum class RouteSharingPolicy : uint8_t;
92 enum class ScrollbarStyle : uint8_t;
93 enum class TextIndicatorWindowLifetime : uint8_t;
94 enum class TextIndicatorWindowDismissalAnimation : uint8_t;
95 enum class DOMPasteAccessResponse : uint8_t;
96
97 struct DictionaryPopupInfo;
98 struct Highlight;
99 struct TextIndicatorData;
100 struct ViewportAttributes;
101 struct ShareDataWithParsedURL;
102
103 template <typename> class RectEdges;
104 using FloatBoxExtent = RectEdges<float>;
105
106 #if ENABLE(DRAG_SUPPORT)
107 struct DragItem;
108 #endif
109 }
110
111 namespace WebKit {
112
113 enum class UndoOrRedo : bool;
114
115 class ContextMenuContextData;
116 class DownloadProxy;
117 class DrawingAreaProxy;
118 class NativeWebGestureEvent;
119 class NativeWebKeyboardEvent;
120 class NativeWebMouseEvent;
121 class NativeWebWheelEvent;
122 class RemoteLayerTreeTransaction;
123 class SafeBrowsingWarning;
124 class UserData;
125 class ViewSnapshot;
126 class WebBackForwardListItem;
127 class WebContextMenuProxy;
128 class WebEditCommandProxy;
129 class WebFrameProxy;
130 class WebOpenPanelResultListenerProxy;
131 class WebPageProxy;
132 class WebPopupMenuProxy;
133 class WebProcessProxy;
134
135 enum class ContinueUnsafeLoad : bool { No, Yes };
136
137 struct FocusedElementInformation;
138 struct InteractionInformationAtPosition;
139 struct WebAutocorrectionContext;
140 struct WebHitTestResultData;
141
142 #if ENABLE(TOUCH_EVENTS)
143 class NativeWebTouchEvent;
144 #endif
145
146 #if ENABLE(INPUT_TYPE_COLOR)
147 class WebColorPicker;
148 #endif
149
150 #if ENABLE(DATALIST_ELEMENT)
151 class WebDataListSuggestionsDropdown;
152 #endif
153
154 #if ENABLE(FULLSCREEN_API)
155 class WebFullScreenManagerProxyClient;
156 #endif
157
158 #if USE(GSTREAMER)
159 class InstallMissingMediaPluginsPermissionRequest;
160 #endif
161
162 #if PLATFORM(COCOA)
163 struct ColorSpaceData;
164 #endif
165
166 #if HAVE(VISIBILITY_PROPAGATION_VIEW)
167 using LayerHostingContextID = uint32_t;
168 #endif
169
170 class PageClient : public CanMakeWeakPtr<PageClient> {
171     WTF_MAKE_FAST_ALLOCATED;
172 public:
173     virtual ~PageClient() { }
174
175     // Create a new drawing area proxy for the given page.
176     virtual std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy(WebProcessProxy&) = 0;
177
178     // Tell the view to invalidate the given region. The region is in view coordinates.
179     virtual void setViewNeedsDisplay(const WebCore::Region&) = 0;
180
181     // Tell the view to scroll to the given position, and whether this was a programmatic scroll.
182     virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, const WebCore::IntPoint& scrollOrigin) = 0;
183
184     // Return the current scroll position (not necessarily the same as the WebCore scroll position, because of scaling, insets etc.)
185     virtual WebCore::FloatPoint viewScrollPosition() = 0;
186
187     // Return the size of the view the page is associated with.
188     virtual WebCore::IntSize viewSize() = 0;
189
190     // Return whether the view's containing window is active.
191     virtual bool isViewWindowActive() = 0;
192
193     // Return whether the view is focused.
194     virtual bool isViewFocused() = 0;
195
196     // Return whether the view is visible.
197     virtual bool isViewVisible() = 0;
198
199     // Return whether the view is visible, or occluded by another window.
200     virtual bool isViewVisibleOrOccluded() { return isViewVisible(); }
201
202     // Return whether the view is in a window.
203     virtual bool isViewInWindow() = 0;
204
205     // Return whether the view is visually idle.
206     virtual bool isVisuallyIdle() { return !isViewVisible(); }
207
208     // Return the layer hosting mode for the view.
209     virtual LayerHostingMode viewLayerHostingMode() { return LayerHostingMode::InProcess; }
210
211     virtual void processDidExit() = 0;
212     virtual void processWillSwap() { processDidExit(); }
213     virtual void didRelaunchProcess() = 0;
214     virtual void pageClosed() = 0;
215
216     virtual void preferencesDidChange() = 0;
217
218     virtual void toolTipChanged(const String&, const String&) = 0;
219
220 #if PLATFORM(IOS_FAMILY)
221     // FIXME: Adopt the WKUIDelegatePrivate callback on iOS and remove this.
222     virtual void decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&) = 0;
223 #endif
224
225     virtual void didStartProvisionalLoadForMainFrame() { };
226     virtual void didFailProvisionalLoadForMainFrame() { };
227     virtual void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) = 0;
228
229     virtual void handleDownloadRequest(DownloadProxy&) = 0;
230
231     virtual bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) { return false; }
232     virtual bool showShareSheet(const WebCore::ShareDataWithParsedURL&, WTF::CompletionHandler<void (bool)>&&) { return false; }
233
234     virtual void didChangeContentSize(const WebCore::IntSize&) = 0;
235
236     virtual void showSafeBrowsingWarning(const SafeBrowsingWarning&, CompletionHandler<void(Variant<ContinueUnsafeLoad, URL>&&)>&& completionHandler) { completionHandler(ContinueUnsafeLoad::Yes); }
237     virtual void clearSafeBrowsingWarning() { }
238     virtual void clearSafeBrowsingWarningIfForMainFrameNavigation() { }
239     
240 #if ENABLE(DRAG_SUPPORT)
241 #if PLATFORM(GTK)
242     virtual void startDrag(Ref<WebCore::SelectionData>&&, WebCore::DragOperation, RefPtr<ShareableBitmap>&& dragImage) = 0;
243 #else
244     virtual void startDrag(const WebCore::DragItem&, const ShareableBitmap::Handle&) { }
245 #endif
246     virtual void didPerformDragOperation(bool) { }
247 #endif // ENABLE(DRAG_SUPPORT)
248
249     virtual void setCursor(const WebCore::Cursor&) = 0;
250     virtual void setCursorHiddenUntilMouseMoves(bool) = 0;
251     virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&) = 0;
252
253     virtual void registerEditCommand(Ref<WebEditCommandProxy>&&, UndoOrRedo) = 0;
254     virtual void clearAllEditCommands() = 0;
255     virtual bool canUndoRedo(UndoOrRedo) = 0;
256     virtual void executeUndoRedo(UndoOrRedo) = 0;
257     virtual void wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent&) = 0;
258 #if PLATFORM(COCOA)
259     virtual void accessibilityWebProcessTokenReceived(const IPC::DataReference&) = 0;
260     virtual bool executeSavedCommandBySelector(const String& selector) = 0;
261     virtual void updateSecureInputState() = 0;
262     virtual void resetSecureInputState() = 0;
263     virtual void notifyInputContextAboutDiscardedComposition() = 0;
264     virtual void makeFirstResponder() = 0;
265     virtual void assistiveTechnologyMakeFirstResponder() = 0;
266     virtual void setRemoteLayerTreeRootNode(RemoteLayerTreeNode*) = 0;
267     virtual CALayer *acceleratedCompositingRootLayer() const = 0;
268 #if ENABLE(MAC_GESTURE_EVENTS)
269     virtual void gestureEventWasNotHandledByWebCore(const NativeWebGestureEvent&) = 0;
270 #endif
271 #endif
272
273 #if PLATFORM(COCOA) || PLATFORM(GTK)
274     virtual void selectionDidChange() = 0;
275     virtual RefPtr<ViewSnapshot> takeViewSnapshot() = 0;
276 #endif
277
278 #if USE(APPKIT)
279     virtual void setPromisedDataForImage(const String& pasteboardName, Ref<WebCore::SharedBuffer>&& imageBuffer, const String& filename, const String& extension, const String& title, const String& url, const String& visibleUrl, RefPtr<WebCore::SharedBuffer>&& archiveBuffer) = 0;
280 #endif
281
282     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) = 0;
283     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) = 0;
284     virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) = 0;
285     virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) = 0;
286     virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) = 0;
287     virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) = 0;
288 #if PLATFORM(MAC)
289     virtual WebCore::IntRect rootViewToWindow(const WebCore::IntRect&) = 0;
290 #endif
291 #if PLATFORM(IOS_FAMILY)
292     virtual void didNotHandleTapAsClick(const WebCore::IntPoint&) = 0;
293     virtual void didCompleteSyntheticClick() = 0;
294 #endif
295
296 #if HAVE(VISIBILITY_PROPAGATION_VIEW)
297     virtual void didCreateContextForVisibilityPropagation(LayerHostingContextID) { }
298 #endif
299     
300     virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
301 #if ENABLE(TOUCH_EVENTS)
302     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) = 0;
303 #endif
304
305     virtual RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) = 0;
306 #if ENABLE(CONTEXT_MENUS)
307     virtual Ref<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, ContextMenuContextData&&, const UserData&) = 0;
308 #endif
309
310 #if ENABLE(INPUT_TYPE_COLOR)
311     virtual RefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&, Vector<WebCore::Color>&&) = 0;
312 #endif
313
314 #if ENABLE(DATALIST_ELEMENT)
315     virtual RefPtr<WebDataListSuggestionsDropdown> createDataListSuggestionsDropdown(WebPageProxy&) = 0;
316 #endif
317
318 #if PLATFORM(COCOA)
319     virtual Ref<WebCore::ValidationBubble> createValidationBubble(const String& message, const WebCore::ValidationBubble::Settings&) = 0;
320 #endif
321
322 #if PLATFORM(COCOA)
323     virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorWindowLifetime) = 0;
324     virtual void clearTextIndicator(WebCore::TextIndicatorWindowDismissalAnimation) = 0;
325     virtual void setTextIndicatorAnimationProgress(float) = 0;
326     
327     virtual void didPerformDictionaryLookup(const WebCore::DictionaryPopupInfo&) = 0;
328 #endif
329
330     virtual bool effectiveAppearanceIsDark() const { return false; }
331     virtual bool effectiveUserInterfaceLevelIsElevated() const { return false; }
332
333     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
334     virtual void exitAcceleratedCompositingMode() = 0;
335     virtual void updateAcceleratedCompositingMode(const LayerTreeContext&) = 0;
336
337     virtual void takeFocus(WebCore::FocusDirection) { }
338
339 #if PLATFORM(MAC)
340     virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus) = 0;
341     virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState) = 0;
342     virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) = 0;
343     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) = 0;
344     virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText) = 0;
345     virtual void recordAutocorrectionResponse(WebCore::AutocorrectionResponse, const String& replacedString, const String& replacementString) = 0;
346     virtual void recommendedScrollbarStyleDidChange(WebCore::ScrollbarStyle) = 0;
347     virtual void handleControlledElementIDResponse(const String&) = 0;
348
349     virtual CGRect boundsOfLayerInLayerBackedWindowCoordinates(CALayer *) const = 0;
350
351     virtual ColorSpaceData colorSpace() = 0;
352
353     virtual void showPlatformContextMenu(NSMenu *, WebCore::IntPoint) = 0;
354
355     virtual void startWindowDrag() = 0;
356     virtual NSWindow *platformWindow() = 0;
357     virtual void setShouldSuppressFirstResponderChanges(bool) = 0;
358
359     virtual NSView *inspectorAttachmentView() = 0;
360     virtual _WKRemoteObjectRegistry *remoteObjectRegistry() = 0;
361
362 #if USE(APPKIT)
363     virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) = 0;
364 #if USE(DICTATION_ALTERNATIVES)
365     virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&) = 0;
366     virtual void removeDictationAlternatives(uint64_t dictationContext) = 0;
367     virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) = 0;
368     virtual Vector<String> dictationAlternatives(uint64_t dictationContext) = 0;
369 #endif // USE(DICTATION_ALTERNATIVES)
370 #if USE(INSERTION_UNDO_GROUPING)
371     virtual void registerInsertionUndoGrouping() = 0;
372 #endif // USE(INSERTION_UNDO_GROUPING)
373 #endif // USE(APPKIT)
374     virtual void setEditableElementIsFocused(bool) = 0;
375 #endif // PLATFORM(MAC)
376
377 #if PLATFORM(IOS_FAMILY)
378     virtual void commitPotentialTapFailed() = 0;
379     virtual void didGetTapHighlightGeometries(uint64_t requestID, const WebCore::Color&, const Vector<WebCore::FloatQuad>& highlightedQuads, const WebCore::IntSize& topLeftRadius, const WebCore::IntSize& topRightRadius, const WebCore::IntSize& bottomLeftRadius, const WebCore::IntSize& bottomRightRadius, bool nodeHasBuiltInClickHandling) = 0;
380
381     virtual void didCommitLayerTree(const RemoteLayerTreeTransaction&) = 0;
382     virtual void layerTreeCommitComplete() = 0;
383
384     virtual void couldNotRestorePageState() = 0;
385     virtual void restorePageState(Optional<WebCore::FloatPoint> scrollPosition, const WebCore::FloatPoint& scrollOrigin, const WebCore::FloatBoxExtent& obscuredInsetsOnSave, double scale) = 0;
386     virtual void restorePageCenterAndScale(Optional<WebCore::FloatPoint> center, double scale) = 0;
387
388     virtual void elementDidFocus(const FocusedElementInformation&, bool userIsInteracting, bool blurPreviousNode, OptionSet<WebCore::ActivityState::Flag> activityStateChanges, API::Object* userData) = 0;
389     virtual void updateInputContextAfterBlurringAndRefocusingElement() = 0;
390     virtual void elementDidBlur() = 0;
391     virtual void focusedElementDidChangeInputMode(WebCore::InputMode) = 0;
392     virtual void didReceiveEditorStateUpdateAfterFocus() = 0;
393     virtual bool isFocusingElement() = 0;
394     virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) = 0;
395     virtual void positionInformationDidChange(const InteractionInformationAtPosition&) = 0;
396     virtual void saveImageToLibrary(Ref<WebCore::SharedBuffer>&&) = 0;
397     virtual void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect, WebCore::RouteSharingPolicy, const String&) = 0;
398     virtual void disableDoubleTapGesturesDuringTapIfNecessary(uint64_t requestID) = 0;
399     virtual void handleSmartMagnificationInformationForPotentialTap(uint64_t requestID, const WebCore::FloatRect& renderRect, bool fitEntireRect, double viewportMinimumScale, double viewportMaximumScale, bool nodeIsRootLevel) = 0;
400     virtual double minimumZoomScale() const = 0;
401     virtual WebCore::FloatRect documentRect() const = 0;
402     virtual void scrollingNodeScrollViewWillStartPanGesture() = 0;
403     virtual void scrollingNodeScrollViewDidScroll() = 0;
404     virtual void scrollingNodeScrollWillStartScroll() = 0;
405     virtual void scrollingNodeScrollDidEndScroll() = 0;
406     virtual Vector<String> mimeTypesWithCustomContentProviders() = 0;
407
408     virtual void showInspectorHighlight(const WebCore::Highlight&) = 0;
409     virtual void hideInspectorHighlight() = 0;
410
411     virtual void showInspectorIndication() = 0;
412     virtual void hideInspectorIndication() = 0;
413
414     virtual void enableInspectorNodeSearch() = 0;
415     virtual void disableInspectorNodeSearch() = 0;
416
417     virtual void handleAutocorrectionContext(const WebAutocorrectionContext&) = 0;
418 #endif
419
420     // Auxiliary Client Creation
421 #if ENABLE(FULLSCREEN_API)
422     virtual WebFullScreenManagerProxyClient& fullScreenManagerProxyClient() = 0;
423 #endif
424
425     // Custom representations.
426     virtual void didFinishLoadingDataForCustomContentProvider(const String& suggestedFilename, const IPC::DataReference&) = 0;
427
428     virtual void navigationGestureDidBegin() = 0;
429     virtual void navigationGestureWillEnd(bool willNavigate, WebBackForwardListItem&) = 0;
430     virtual void navigationGestureDidEnd(bool willNavigate, WebBackForwardListItem&) = 0;
431     virtual void navigationGestureDidEnd() = 0;
432     virtual void willRecordNavigationSnapshot(WebBackForwardListItem&) = 0;
433     virtual void didRemoveNavigationGestureSnapshot() = 0;
434
435     virtual void didFirstVisuallyNonEmptyLayoutForMainFrame() = 0;
436     virtual void didFinishLoadForMainFrame() = 0;
437     virtual void didFailLoadForMainFrame() = 0;
438     virtual void didSameDocumentNavigationForMainFrame(SameDocumentNavigationType) = 0;
439
440     virtual void didChangeBackgroundColor() = 0;
441     virtual void isPlayingAudioWillChange() = 0;
442     virtual void isPlayingAudioDidChange() = 0;
443
444     virtual void pinnedStateWillChange() { }
445     virtual void pinnedStateDidChange() { }
446     virtual bool scrollingUpdatesDisabledForTesting() { return false; }
447
448     virtual bool hasSafeBrowsingWarning() const { return false; }
449     
450 #if PLATFORM(MAC)
451     virtual void didPerformImmediateActionHitTest(const WebHitTestResultData&, bool contentPreventsDefault, API::Object*) = 0;
452     virtual NSObject *immediateActionAnimationControllerForHitTestResult(RefPtr<API::HitTestResult>, uint64_t, RefPtr<API::Object>) = 0;
453     virtual void didHandleAcceptedCandidate() = 0;
454 #endif
455
456     virtual void didFinishProcessingAllPendingMouseEvents() = 0;
457
458     virtual void videoControlsManagerDidChange() { }
459
460 #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS_FAMILY)
461     virtual WebCore::WebMediaSessionManager& mediaSessionManager() = 0;
462 #endif
463
464     virtual void refView() = 0;
465     virtual void derefView() = 0;
466
467 #if ENABLE(VIDEO) && USE(GSTREAMER)
468     virtual bool decidePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) = 0;
469 #endif
470
471     virtual void didRestoreScrollPosition() = 0;
472
473     virtual bool windowIsFrontWindowUnderMouse(const NativeWebMouseEvent&) { return false; }
474
475     virtual WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() = 0;
476
477 #if USE(QUICK_LOOK)
478     virtual void requestPasswordForQuickLookDocument(const String& fileName, WTF::Function<void(const String&)>&&) = 0;
479 #endif
480
481 #if ENABLE(DATA_INTERACTION)
482     virtual void didHandleDragStartRequest(bool started) = 0;
483     virtual void didHandleAdditionalDragItemsRequest(bool added) = 0;
484     virtual void willReceiveEditDragSnapshot() = 0;
485     virtual void didReceiveEditDragSnapshot(Optional<WebCore::TextIndicatorData>) = 0;
486     virtual void didChangeDragCaretRect(const WebCore::IntRect& previousCaretRect, const WebCore::IntRect& caretRect) = 0;
487 #endif
488
489     virtual void requestDOMPasteAccess(const WebCore::IntRect& elementRect, const String& originIdentifier, CompletionHandler<void(WebCore::DOMPasteAccessResponse)>&&) = 0;
490
491 #if ENABLE(ATTACHMENT_ELEMENT)
492     virtual void didInsertAttachment(API::Attachment&, const String& source) { }
493     virtual void didRemoveAttachment(API::Attachment&) { }
494     virtual void didInvalidateDataForAttachment(API::Attachment&) { }
495 #if PLATFORM(COCOA)
496     virtual NSFileWrapper *allocFileWrapperInstance() const { return nullptr; }
497     virtual NSSet *serializableFileWrapperClasses() const { return nullptr; }
498 #endif
499 #endif
500
501 #if HAVE(PENCILKIT)
502     virtual RetainPtr<WKDrawingView> createDrawingView(WebCore::GraphicsLayer::EmbeddedViewID) { return nullptr; }
503 #endif
504
505 #if ENABLE(POINTER_EVENTS)
506     virtual void cancelPointersForGestureRecognizer(UIGestureRecognizer*) { }
507     virtual WTF::Optional<unsigned> activeTouchIdentifierForGestureRecognizer(UIGestureRecognizer*) { return WTF::nullopt; }
508 #endif
509
510 #if USE(WPE_RENDERER)
511     virtual IPC::Attachment hostFileDescriptor() = 0;
512 #endif
513
514     virtual void didChangeWebPageID() const { }
515 };
516
517 } // namespace WebKit