2 * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
29 #include "ShareableBitmap.h"
30 #include "WebColorPicker.h"
31 #include "WebPageProxy.h"
32 #include "WebPopupMenuProxy.h"
33 #include <WebCore/AlternativeTextClient.h>
34 #include <WebCore/EditorClient.h>
35 #include <wtf/Forward.h>
38 #include "PluginComplexTextInputState.h"
44 OBJC_CLASS NSTextAlternatives;
52 struct ViewportAttributes;
57 class DrawingAreaProxy;
58 class NativeWebKeyboardEvent;
59 class RemoteLayerTreeTransaction;
61 class WebContextMenuProxy;
62 class WebEditCommandProxy;
63 class WebPopupMenuProxy;
64 struct ActionMenuHitTestResult;
66 #if ENABLE(TOUCH_EVENTS)
67 class NativeWebTouchEvent;
70 #if ENABLE(INPUT_TYPE_COLOR)
74 #if ENABLE(FULLSCREEN_API)
75 class WebFullScreenManagerProxyClient;
79 struct ColorSpaceData;
84 virtual ~PageClient() { }
86 // Create a new drawing area proxy for the given page.
87 virtual std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy() = 0;
89 // Tell the view to invalidate the given rect. The rect is in view coordinates.
90 virtual void setViewNeedsDisplay(const WebCore::IntRect&) = 0;
92 // Tell the view to immediately display its invalid rect.
93 virtual void displayView() = 0;
95 // Return true if scrollView() can copy bits in the view.
96 virtual bool canScrollView() = 0;
97 // Tell the view to scroll scrollRect by scrollOffset.
98 virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
99 // Tell the view to scroll to the given position, and whether this was a programmatic scroll.
100 virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, bool isProgrammaticScroll) = 0;
102 // Return the size of the view the page is associated with.
103 virtual WebCore::IntSize viewSize() = 0;
105 // Return whether the view's containing window is active.
106 virtual bool isViewWindowActive() = 0;
108 // Return whether the view is focused.
109 virtual bool isViewFocused() = 0;
111 // Return whether the view is visible.
112 virtual bool isViewVisible() = 0;
114 // Return whether the view is visible, or occluded by another window.
115 virtual bool isViewVisibleOrOccluded() { return isViewVisible(); }
117 // Return whether the view is in a window.
118 virtual bool isViewInWindow() = 0;
120 // Return whether the view is visually idle.
121 virtual bool isVisuallyIdle() { return !isViewVisible(); }
123 // Return the layer hosting mode for the view.
124 virtual LayerHostingMode viewLayerHostingMode() { return LayerHostingMode::InProcess; }
126 virtual void processDidExit() = 0;
127 virtual void didRelaunchProcess() = 0;
128 virtual void pageClosed() = 0;
130 virtual void preferencesDidChange() = 0;
132 virtual void toolTipChanged(const String&, const String&) = 0;
134 virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy&)
139 virtual void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) = 0;
141 #if USE(COORDINATED_GRAPHICS_MULTIPROCESS)
142 virtual void pageDidRequestScroll(const WebCore::IntPoint&) = 0;
143 virtual void didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) = 0;
144 virtual void pageTransitionViewportReady() = 0;
145 virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&) = 0;
148 #if PLATFORM(EFL) || PLATFORM(GTK)
149 virtual void updateTextInputState() = 0;
150 #endif // PLATFORM(EFL) || PLATOFRM(GTK)
152 virtual void handleDownloadRequest(DownloadProxy*) = 0;
154 virtual bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, WebOpenPanelParameters*, WebOpenPanelResultListenerProxy*) { return false; }
157 virtual void didChangeContentSize(const WebCore::IntSize&) = 0;
160 #if PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
161 virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage) = 0;
164 virtual void setCursor(const WebCore::Cursor&) = 0;
165 virtual void setCursorHiddenUntilMouseMoves(bool) = 0;
166 virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&) = 0;
168 virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo) = 0;
169 virtual void clearAllEditCommands() = 0;
170 virtual bool canUndoRedo(WebPageProxy::UndoOrRedo) = 0;
171 virtual void executeUndoRedo(WebPageProxy::UndoOrRedo) = 0;
173 virtual void accessibilityWebProcessTokenReceived(const IPC::DataReference&) = 0;
174 virtual bool executeSavedCommandBySelector(const String& selector) = 0;
175 virtual void setDragImage(const WebCore::IntPoint& clientPosition, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag) = 0;
176 virtual void updateSecureInputState() = 0;
177 virtual void resetSecureInputState() = 0;
178 virtual void notifyInputContextAboutDiscardedComposition() = 0;
179 virtual void makeFirstResponder() = 0;
180 virtual void setAcceleratedCompositingRootLayer(LayerOrView *) = 0;
181 virtual LayerOrView *acceleratedCompositingRootLayer() const = 0;
182 virtual PassRefPtr<ViewSnapshot> takeViewSnapshot() = 0;
183 virtual void wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent&) = 0;
184 virtual void selectionDidChange() = 0;
187 #if PLATFORM(MAC) && !USE(ASYNC_NSTEXTINPUTCLIENT)
188 virtual void notifyApplicationAboutInputContextChange() = 0;
192 virtual void setPromisedData(const String& pasteboardName, PassRefPtr<WebCore::SharedBuffer> imageBuffer, const String& filename, const String& extension, const String& title,
193 const String& url, const String& visibleUrl, PassRefPtr<WebCore::SharedBuffer> archiveBuffer) = 0;
197 virtual void getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent&, const AtomicString&, Vector<WTF::String>&) = 0;
199 virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) = 0;
200 virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) = 0;
201 virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) = 0;
202 virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) = 0;
204 virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) = 0;
205 virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) = 0;
208 virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
209 #if ENABLE(TOUCH_EVENTS)
210 virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) = 0;
213 virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) = 0;
214 virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) = 0;
216 #if ENABLE(INPUT_TYPE_COLOR)
217 virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) = 0;
220 virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool fadeOut) = 0;
221 virtual void setTextIndicatorAnimationProgress(float) = 0;
223 virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
224 virtual void exitAcceleratedCompositingMode() = 0;
225 virtual void updateAcceleratedCompositingMode(const LayerTreeContext&) = 0;
228 virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus) = 0;
229 virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState) = 0;
230 virtual void didPerformDictionaryLookup(const DictionaryPopupInfo&) = 0;
231 virtual void dismissContentRelativeChildWindows() = 0;
232 virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) = 0;
233 virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) = 0;
234 virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText) = 0;
235 virtual void recordAutocorrectionResponse(WebCore::AutocorrectionResponseType, const String& replacedString, const String& replacementString) = 0;
236 virtual void recommendedScrollbarStyleDidChange(WebCore::ScrollbarStyle) = 0;
237 virtual void removeNavigationGestureSnapshot() = 0;
239 virtual CGRect boundsOfLayerInLayerBackedWindowCoordinates(CALayer *) const = 0;
241 virtual ColorSpaceData colorSpace() = 0;
243 virtual void showPlatformContextMenu(NSMenu *, WebCore::IntPoint) = 0;
246 virtual WKView* wkView() const = 0;
247 virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) = 0;
248 #if USE(DICTATION_ALTERNATIVES)
249 virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&) = 0;
250 virtual void removeDictationAlternatives(uint64_t dictationContext) = 0;
251 virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) = 0;
252 virtual Vector<String> dictationAlternatives(uint64_t dictationContext) = 0;
253 #endif // USE(DICTATION_ALTERNATIVES)
254 #if USE(INSERTION_UNDO_GROUPING)
255 virtual void registerInsertionUndoGrouping() = 0;
256 #endif // USE(INSERTION_UNDO_GROUPING)
257 #endif // USE(APPKIT)
258 #endif // PLATFORM(MAC)
261 virtual void commitPotentialTapFailed() = 0;
262 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) = 0;
264 virtual void didCommitLayerTree(const RemoteLayerTreeTransaction&) = 0;
265 virtual void dynamicViewportUpdateChangedTarget(double newScale, const WebCore::FloatPoint& newScrollPosition, uint64_t transactionID) = 0;
266 virtual void restorePageState(const WebCore::FloatRect&, double) = 0;
267 virtual void restorePageCenterAndScale(const WebCore::FloatPoint&, double) = 0;
269 virtual void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) = 0;
270 virtual void stopAssistingNode() = 0;
271 virtual bool isAssistingNode() = 0;
272 virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) = 0;
273 virtual void positionInformationDidChange(const InteractionInformationAtPosition&) = 0;
274 virtual void saveImageToLibrary(PassRefPtr<WebCore::SharedBuffer>) = 0;
275 virtual void didUpdateBlockSelectionWithTouch(uint32_t touch, uint32_t flags, float growThreshold, float shrinkThreshold) = 0;
276 virtual void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect) = 0;
277 virtual void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale) = 0;
278 virtual void didChangeViewportMetaTagWidth(float) = 0;
279 virtual double minimumZoomScale() const = 0;
280 virtual WebCore::FloatSize contentsSize() const = 0;
281 virtual void overflowScrollViewWillStartPanGesture() = 0;
282 virtual void overflowScrollViewDidScroll() = 0;
283 virtual void overflowScrollWillStartScroll() = 0;
284 virtual void overflowScrollDidEndScroll() = 0;
285 virtual void didFinishDrawingPagesToPDF(const IPC::DataReference&) = 0;
286 virtual Vector<String> mimeTypesWithCustomContentProviders() = 0;
288 virtual void showInspectorHighlight(const WebCore::Highlight&) = 0;
289 virtual void hideInspectorHighlight() = 0;
291 virtual void showInspectorIndication() = 0;
292 virtual void hideInspectorIndication() = 0;
294 virtual void enableInspectorNodeSearch() = 0;
295 virtual void disableInspectorNodeSearch() = 0;
298 // Auxiliary Client Creation
299 #if ENABLE(FULLSCREEN_API)
300 virtual WebFullScreenManagerProxyClient& fullScreenManagerProxyClient() = 0;
303 // Custom representations.
304 virtual void didFinishLoadingDataForCustomContentProvider(const String& suggestedFilename, const IPC::DataReference&) = 0;
306 virtual void navigationGestureDidBegin() = 0;
307 virtual void navigationGestureWillEnd(bool willNavigate, WebBackForwardListItem&) = 0;
308 virtual void navigationGestureDidEnd(bool willNavigate, WebBackForwardListItem&) = 0;
309 virtual void willRecordNavigationSnapshot(WebBackForwardListItem&) = 0;
311 virtual void didFirstVisuallyNonEmptyLayoutForMainFrame() = 0;
312 virtual void didFinishLoadForMainFrame() = 0;
313 virtual void didSameDocumentNavigationForMainFrame(SameDocumentNavigationType) = 0;
316 virtual void didPerformActionMenuHitTest(const ActionMenuHitTestResult&, bool forImmediateAction, API::Object*) = 0;
320 } // namespace WebKit
322 #endif // PageClient_h