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;
50 struct ViewportAttributes;
56 class DrawingAreaProxy;
58 class NativeWebKeyboardEvent;
59 class RemoteLayerTreeTransaction;
61 class WebContextMenuProxy;
62 class WebEditCommandProxy;
63 class WebPopupMenuProxy;
65 #if ENABLE(TOUCH_EVENTS)
66 class NativeWebTouchEvent;
69 #if ENABLE(INPUT_TYPE_COLOR)
73 #if ENABLE(FULLSCREEN_API)
74 class WebFullScreenManagerProxyClient;
78 struct ColorSpaceData;
83 virtual ~PageClient() { }
85 // Create a new drawing area proxy for the given page.
86 virtual std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy() = 0;
88 // Tell the view to invalidate the given rect. The rect is in view coordinates.
89 virtual void setViewNeedsDisplay(const WebCore::IntRect&) = 0;
91 // Tell the view to immediately display its invalid rect.
92 virtual void displayView() = 0;
94 // Return true if scrollView() can copy bits in the view.
95 virtual bool canScrollView() = 0;
96 // Tell the view to scroll scrollRect by scrollOffset.
97 virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
98 // Tell the view to scroll to the given position, and whether this was a programmatic scroll.
99 virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, bool isProgrammaticScroll) = 0;
101 // Return the size of the view the page is associated with.
102 virtual WebCore::IntSize viewSize() = 0;
104 // Return whether the view's containing window is active.
105 virtual bool isViewWindowActive() = 0;
107 // Return whether the view is focused.
108 virtual bool isViewFocused() = 0;
110 // Return whether the view is visible.
111 virtual bool isViewVisible() = 0;
113 // Return whether the view is visible, or occluded by another window.
114 virtual bool isViewVisibleOrOccluded() { return isViewVisible(); }
116 // Return whether the view is in a window.
117 virtual bool isViewInWindow() = 0;
119 // Return whether the view is visually idle.
120 virtual bool isVisuallyIdle() { return !isViewVisible(); }
122 // Return the layer hosting mode for the view.
123 virtual LayerHostingMode viewLayerHostingMode() { return LayerHostingMode::InProcess; }
125 virtual void processDidExit() = 0;
126 virtual void didRelaunchProcess() = 0;
127 virtual void pageClosed() = 0;
129 virtual void preferencesDidChange() = 0;
131 virtual void toolTipChanged(const String&, const String&) = 0;
133 virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, WebSecurityOrigin&, GeolocationPermissionRequestProxy&)
138 virtual void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) = 0;
140 #if USE(TILED_BACKING_STORE)
141 virtual void pageDidRequestScroll(const WebCore::IntPoint&) = 0;
142 virtual void didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) = 0;
143 virtual void pageTransitionViewportReady() = 0;
145 #if USE(COORDINATED_GRAPHICS)
146 virtual void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&) = 0;
149 #if PLATFORM(EFL) || PLATFORM(GTK)
150 virtual void updateTextInputState() = 0;
151 #endif // PLATFORM(EFL) || PLATOFRM(GTK)
153 virtual void handleDownloadRequest(DownloadProxy*) = 0;
155 virtual bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, WebOpenPanelParameters*, WebOpenPanelResultListenerProxy*) { return false; }
158 virtual void didChangeContentSize(const WebCore::IntSize&) = 0;
162 virtual void startDrag(const WebCore::DragData&, PassRefPtr<ShareableBitmap> dragImage) = 0;
165 virtual void setCursor(const WebCore::Cursor&) = 0;
166 virtual void setCursorHiddenUntilMouseMoves(bool) = 0;
167 virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&) = 0;
169 virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo) = 0;
170 virtual void clearAllEditCommands() = 0;
171 virtual bool canUndoRedo(WebPageProxy::UndoOrRedo) = 0;
172 virtual void executeUndoRedo(WebPageProxy::UndoOrRedo) = 0;
174 virtual void accessibilityWebProcessTokenReceived(const IPC::DataReference&) = 0;
175 virtual bool executeSavedCommandBySelector(const String& selector) = 0;
176 virtual void setDragImage(const WebCore::IntPoint& clientPosition, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag) = 0;
177 virtual void updateSecureInputState() = 0;
178 virtual void resetSecureInputState() = 0;
179 virtual void notifyInputContextAboutDiscardedComposition() = 0;
180 virtual void makeFirstResponder() = 0;
181 virtual void setAcceleratedCompositingRootLayer(LayerOrView *) = 0;
182 virtual LayerOrView *acceleratedCompositingRootLayer() const = 0;
183 virtual PassRefPtr<ViewSnapshot> takeViewSnapshot() = 0;
184 virtual void wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent&) = 0;
185 virtual void clearCustomSwipeViews() = 0;
189 virtual void setPromisedData(const String& pasteboardName, PassRefPtr<WebCore::SharedBuffer> imageBuffer, const String& filename, const String& extension, const String& title,
190 const String& url, const String& visibleUrl, PassRefPtr<WebCore::SharedBuffer> archiveBuffer) = 0;
194 virtual void getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent&, const AtomicString&, Vector<WTF::String>&) = 0;
196 virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) = 0;
197 virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) = 0;
198 virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) = 0;
199 virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) = 0;
201 virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) = 0;
202 virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) = 0;
205 virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
206 #if ENABLE(TOUCH_EVENTS)
207 virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) = 0;
210 virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) = 0;
211 virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) = 0;
213 #if ENABLE(INPUT_TYPE_COLOR)
214 virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) = 0;
217 virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut, bool animate) = 0;
219 virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
220 virtual void exitAcceleratedCompositingMode() = 0;
221 virtual void updateAcceleratedCompositingMode(const LayerTreeContext&) = 0;
224 virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus) = 0;
225 virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState) = 0;
226 virtual void didPerformDictionaryLookup(const AttributedString&, const DictionaryPopupInfo&) = 0;
227 virtual void dismissDictionaryLookupPanel() = 0;
228 virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) = 0;
229 virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) = 0;
230 virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText) = 0;
231 virtual void recordAutocorrectionResponse(WebCore::AutocorrectionResponseType, const String& replacedString, const String& replacementString) = 0;
232 virtual void recommendedScrollbarStyleDidChange(int32_t newStyle) = 0;
234 virtual ColorSpaceData colorSpace() = 0;
237 virtual WKView* wkView() const = 0;
238 virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) = 0;
239 #if USE(DICTATION_ALTERNATIVES)
240 virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&) = 0;
241 virtual void removeDictationAlternatives(uint64_t dictationContext) = 0;
242 virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) = 0;
243 virtual Vector<String> dictationAlternatives(uint64_t dictationContext) = 0;
244 #endif // USE(DICTATION_ALTERNATIVES)
245 #if USE(INSERTION_UNDO_GROUPING)
246 virtual void registerInsertionUndoGrouping() = 0;
247 #endif // USE(INSERTION_UNDO_GROUPING)
248 #endif // USE(APPKIT)
249 #endif // PLATFORM(MAC)
252 virtual void commitPotentialTapFailed() = 0;
253 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;
255 virtual void didCommitLayerTree(const RemoteLayerTreeTransaction&) = 0;
256 virtual void dynamicViewportUpdateChangedTarget(double newScale, const WebCore::FloatPoint& newScrollPosition, uint64_t transactionID) = 0;
257 virtual void restorePageState(const WebCore::FloatRect&, double) = 0;
258 virtual void restorePageCenterAndScale(const WebCore::FloatPoint&, double) = 0;
260 virtual void startAssistingNode(const AssistedNodeInformation&, bool userIsInteracting, bool blurPreviousNode, API::Object* userData) = 0;
261 virtual void stopAssistingNode() = 0;
262 virtual bool isAssistingNode() = 0;
263 virtual void selectionDidChange() = 0;
264 virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, bool isCharEvent) = 0;
265 virtual void positionInformationDidChange(const InteractionInformationAtPosition&) = 0;
266 virtual void saveImageToLibrary(PassRefPtr<WebCore::SharedBuffer>) = 0;
267 virtual void didUpdateBlockSelectionWithTouch(uint32_t touch, uint32_t flags, float growThreshold, float shrinkThreshold) = 0;
268 virtual void showPlaybackTargetPicker(bool hasVideo, const WebCore::IntRect& elementRect) = 0;
269 virtual void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale) = 0;
270 virtual void didChangeViewportMetaTagWidth(float) = 0;
271 virtual void setUsesMinimalUI(bool) = 0;
272 virtual double minimumZoomScale() const = 0;
273 virtual WebCore::FloatSize contentsSize() const = 0;
274 virtual void overflowScrollViewWillStartPanGesture() = 0;
275 virtual void overflowScrollViewDidScroll() = 0;
276 virtual void overflowScrollWillStartScroll() = 0;
277 virtual void overflowScrollDidEndScroll() = 0;
278 virtual void didFinishDrawingPagesToPDF(const IPC::DataReference&) = 0;
279 virtual Vector<String> mimeTypesWithCustomContentProviders() = 0;
281 #if ENABLE(INSPECTOR)
282 virtual void showInspectorHighlight(const WebCore::Highlight&) = 0;
283 virtual void hideInspectorHighlight() = 0;
285 virtual void showInspectorIndication() = 0;
286 virtual void hideInspectorIndication() = 0;
288 virtual void enableInspectorNodeSearch() = 0;
289 virtual void disableInspectorNodeSearch() = 0;
293 // Auxiliary Client Creation
294 #if ENABLE(FULLSCREEN_API)
295 virtual WebFullScreenManagerProxyClient& fullScreenManagerProxyClient() = 0;
298 // Custom representations.
299 virtual void didFinishLoadingDataForCustomContentProvider(const String& suggestedFilename, const IPC::DataReference&) = 0;
301 virtual void navigationGestureDidBegin() = 0;
302 virtual void navigationGestureWillEnd(bool willNavigate, WebBackForwardListItem&) = 0;
303 virtual void navigationGestureDidEnd(bool willNavigate, WebBackForwardListItem&) = 0;
304 virtual void willRecordNavigationSnapshot(WebBackForwardListItem&) = 0;
307 } // namespace WebKit
309 #endif // PageClient_h