1/*
2 * Copyright (C) 2010, 2011 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#ifndef PageClientImpl_h
27#define PageClientImpl_h
28
29#if PLATFORM(MAC)
30
31#include "CorrectionPanel.h"
32#include "PageClient.h"
33#include "WebFullScreenManagerProxy.h"
34#include <wtf/RetainPtr.h>
35
36@class WKEditorUndoTargetObjC;
37@class WKView;
38@class WKWebView;
39
40namespace WebCore {
41class AlternativeTextUIController;
42}
43
44namespace WebKit {
45class FindIndicatorWindow;
46
47class PageClientImpl final : public PageClient
48#if ENABLE(FULLSCREEN_API)
49    , public WebFullScreenManagerProxyClient
50#endif
51    {
52public:
53    PageClientImpl(WKView *, WKWebView *);
54    virtual ~PageClientImpl();
55
56    void viewWillMoveToAnotherWindow();
57
58private:
59    // PageClient
60    virtual std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy();
61    virtual void setViewNeedsDisplay(const WebCore::IntRect&);
62    virtual void displayView();
63    virtual bool canScrollView();
64    virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
65    virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, bool isProgrammaticScroll);
66
67    virtual WebCore::IntSize viewSize();
68    virtual bool isViewWindowActive();
69    virtual bool isViewFocused();
70    virtual bool isViewVisible();
71    virtual bool isViewVisibleOrOccluded();
72    virtual bool isViewInWindow();
73    virtual bool isVisuallyIdle();
74    virtual LayerHostingMode viewLayerHostingMode() override;
75    virtual ColorSpaceData colorSpace() override;
76    virtual void setAcceleratedCompositingRootLayer(LayerOrView *) override;
77    virtual LayerOrView *acceleratedCompositingRootLayer() const override;
78
79    virtual void processDidExit();
80    virtual void pageClosed();
81    virtual void didRelaunchProcess();
82    virtual void preferencesDidChange() override;
83    virtual void toolTipChanged(const String& oldToolTip, const String& newToolTip);
84    virtual void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) override;
85    virtual void didFinishLoadingDataForCustomContentProvider(const String& suggestedFilename, const IPC::DataReference&) override;
86    virtual void handleDownloadRequest(DownloadProxy*) override;
87    virtual void setCursor(const WebCore::Cursor&);
88    virtual void setCursorHiddenUntilMouseMoves(bool);
89    virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&);
90
91    virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo);
92    virtual void clearAllEditCommands();
93    virtual bool canUndoRedo(WebPageProxy::UndoOrRedo);
94    virtual void executeUndoRedo(WebPageProxy::UndoOrRedo);
95    virtual bool executeSavedCommandBySelector(const String& selector);
96    virtual void setDragImage(const WebCore::IntPoint& clientPosition, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag);
97    virtual void setPromisedData(const String& pasteboardName, PassRefPtr<WebCore::SharedBuffer> imageBuffer, const String& filename, const String& extension, const String& title,
98        const String& url, const String& visibleUrl, PassRefPtr<WebCore::SharedBuffer> archiveBuffer);
99    virtual void updateSecureInputState() override;
100    virtual void resetSecureInputState() override;
101    virtual void notifyInputContextAboutDiscardedComposition() override;
102
103    virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&);
104    virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&);
105    virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&);
106    virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&);
107#if PLATFORM(IOS)
108    virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) = 0;
109    virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) = 0;
110#endif
111
112    CGRect boundsOfLayerInLayerBackedWindowCoordinates(CALayer *layer) const;
113
114    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled);
115
116    virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
117    virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
118
119#if ENABLE(INPUT_TYPE_COLOR)
120    virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&);
121#endif
122
123    void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut, bool animate);
124
125    virtual void enterAcceleratedCompositingMode(const LayerTreeContext&);
126    virtual void exitAcceleratedCompositingMode();
127    virtual void updateAcceleratedCompositingMode(const LayerTreeContext&);
128
129    virtual PassRefPtr<ViewSnapshot> takeViewSnapshot() override;
130    virtual void wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent&) override;
131
132    virtual void accessibilityWebProcessTokenReceived(const IPC::DataReference&);
133
134    virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus);
135    virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState);
136
137    virtual void makeFirstResponder();
138
139    virtual void didPerformDictionaryLookup(const AttributedString&, const DictionaryPopupInfo&);
140    virtual void dismissDictionaryLookupPanel();
141
142    virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings);
143    virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText);
144    virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText);
145    virtual void recordAutocorrectionResponse(WebCore::AutocorrectionResponseType, const String& replacedString, const String& replacementString);
146
147    virtual void recommendedScrollbarStyleDidChange(int32_t newStyle);
148
149    virtual WKView* wkView() const { return m_wkView; }
150    virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) override;
151
152#if USE(DICTATION_ALTERNATIVES)
153    virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&);
154    virtual void removeDictationAlternatives(uint64_t dictationContext);
155    virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext);
156    virtual Vector<String> dictationAlternatives(uint64_t dictationContext);
157#endif
158#if USE(INSERTION_UNDO_GROUPING)
159    virtual void registerInsertionUndoGrouping() override;
160#endif
161
162    // Auxiliary Client Creation
163#if ENABLE(FULLSCREEN_API)
164    WebFullScreenManagerProxyClient& fullScreenManagerProxyClient() override;
165#endif
166
167#if ENABLE(FULLSCREEN_API)
168    // WebFullScreenManagerProxyClient
169    virtual void closeFullScreenManager() override;
170    virtual bool isFullScreen() override;
171    virtual void enterFullScreen() override;
172    virtual void exitFullScreen() override;
173    virtual void beganEnterFullScreen(const WebCore::IntRect& initialFrame, const WebCore::IntRect& finalFrame) override;
174    virtual void beganExitFullScreen(const WebCore::IntRect& initialFrame, const WebCore::IntRect& finalFrame) override;
175#endif
176
177    virtual void navigationGestureDidBegin() override;
178    virtual void navigationGestureWillEnd(bool willNavigate, WebBackForwardListItem&) override;
179    virtual void navigationGestureDidEnd(bool willNavigate, WebBackForwardListItem&) override;
180    virtual void willRecordNavigationSnapshot(WebBackForwardListItem&) override;
181
182    NSView *activeView() const;
183
184    virtual void didFirstVisuallyNonEmptyLayoutForMainFrame() override;
185    virtual void didFinishLoadForMainFrame() override;
186    virtual void didSameDocumentNavigationForMainFrame(SameDocumentNavigationType) override;
187    virtual void removeNavigationGestureSnapshot() override;
188
189    WKView *m_wkView;
190    WKWebView *m_webView;
191    RetainPtr<WKEditorUndoTargetObjC> m_undoTarget;
192#if USE(AUTOCORRECTION_PANEL)
193    CorrectionPanel m_correctionPanel;
194#endif
195#if USE(DICTATION_ALTERNATIVES)
196    OwnPtr<WebCore::AlternativeTextUIController> m_alternativeTextUIController;
197#endif
198};
199
200} // namespace WebKit
201
202#endif // PLATFORM(MAC)
203
204#endif // PageClientImpl_h
205