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