Rename Source/WebKit2 to Source/WebKit.
[WebKit-https.git] / Source / WebKit / UIProcess / Cocoa / UIDelegate.h
1 /*
2  * Copyright (C) 2014 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 #import "WKFoundation.h"
29
30 #if WK_API_ENABLED
31
32 #import "APIContextMenuClient.h"
33 #import "APIUIClient.h"
34 #import "WeakObjCPtr.h"
35 #import <wtf/RetainPtr.h>
36
37 @class _WKActivatedElementInfo;
38 @class WKWebView;
39 @protocol WKUIDelegate;
40
41 namespace API {
42 class FrameInfo;
43 }
44
45 namespace WebKit {
46
47 class UIDelegate {
48 public:
49     explicit UIDelegate(WKWebView *);
50     ~UIDelegate();
51
52 #if ENABLE(CONTEXT_MENUS)
53     std::unique_ptr<API::ContextMenuClient> createContextMenuClient();
54 #endif
55     std::unique_ptr<API::UIClient> createUIClient();
56
57     RetainPtr<id <WKUIDelegate> > delegate();
58     void setDelegate(id <WKUIDelegate>);
59
60 private:
61 #if ENABLE(CONTEXT_MENUS)
62     class ContextMenuClient : public API::ContextMenuClient {
63     public:
64         explicit ContextMenuClient(UIDelegate&);
65         ~ContextMenuClient();
66
67     private:
68         // API::ContextMenuClient
69         RetainPtr<NSMenu> menuFromProposedMenu(WebKit::WebPageProxy&, NSMenu *, const WebKit::WebHitTestResultData&, API::Object*) override;
70
71         UIDelegate& m_uiDelegate;
72     };
73 #endif
74
75     class UIClient : public API::UIClient {
76     public:
77         explicit UIClient(UIDelegate&);
78         ~UIClient();
79
80     private:
81         // API::UIClient
82         RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override;
83         bool createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler) override;
84         RefPtr<WebKit::WebPageProxy> createNewPageCommon(WebKit::WebPageProxy*, API::FrameInfo&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&, WTF::Function<void (RefPtr<WebKit::WebPageProxy>)>&& completionHandler);
85
86         void close(WebKit::WebPageProxy*) override;
87         void fullscreenMayReturnToInline(WebKit::WebPageProxy*) override;
88         void didEnterFullscreen(WebKit::WebPageProxy*) override;
89         void didExitFullscreen(WebKit::WebPageProxy*) override;
90         void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void ()>&& completionHandler) override;
91         void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (bool)>&& completionHandler) override;
92         void runJavaScriptPrompt(WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (const WTF::String&)>&& completionHandler) override;
93         bool canRunBeforeUnloadConfirmPanel() const final;
94         void runBeforeUnloadConfirmPanel(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, Function<void (bool)>&& completionHandler) final;
95         void exceededDatabaseQuota(WebPageProxy*, WebFrameProxy*, API::SecurityOrigin*, const WTF::String& databaseName, const WTF::String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentUsage, unsigned long long expectedUsage, Function<void (unsigned long long)>&& completionHandler) override;
96         void reachedApplicationCacheOriginQuota(WebPageProxy*, const WebCore::SecurityOrigin&, uint64_t currentQuota, uint64_t totalBytesNeeded, Function<void (unsigned long long)>&& completionHandler) override;
97 #if PLATFORM(MAC)
98         bool runOpenPanel(WebPageProxy*, WebFrameProxy*, const WebCore::SecurityOriginData&, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) override;
99 #endif
100         bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) override;
101         bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) override;
102         void mediaCaptureStateDidChange(WebCore::MediaProducer::MediaStateFlags) override;
103         void printFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) override;
104 #if PLATFORM(IOS)
105 #if HAVE(APP_LINKS)
106         bool shouldIncludeAppLinkActionsForElement(_WKActivatedElementInfo *) override;
107 #endif
108         RetainPtr<NSArray> actionsForElement(_WKActivatedElementInfo *, RetainPtr<NSArray> defaultActions) override;
109         void didNotHandleTapAsClick(const WebCore::IntPoint&) override;
110         UIViewController *presentingViewController() override;
111 #endif // PLATFORM(IOS)
112
113         NSDictionary *dataDetectionContext() override;
114
115 #if ENABLE(POINTER_LOCK)
116         void requestPointerLock(WebKit::WebPageProxy*) override;
117         void didLosePointerLock(WebKit::WebPageProxy*) override;
118 #endif
119         
120         void hasVideoInPictureInPictureDidChange(WebKit::WebPageProxy*, bool) override;
121
122         void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&) override;
123
124         UIDelegate& m_uiDelegate;
125     };
126
127     WKWebView *m_webView;
128     WeakObjCPtr<id <WKUIDelegate> > m_delegate;
129
130     struct {
131         bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures : 1;
132         bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync : 1;
133         bool webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler : 1;
134         bool webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
135         bool webViewRunJavaScriptTextInputPanelWithPromptDefaultTextInitiatedByFrameCompletionHandler : 1;
136         bool webViewRunBeforeUnloadConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
137 #if PLATFORM(MAC)
138         bool webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler : 1;
139 #endif
140         bool webViewDecideDatabaseQuotaForSecurityOriginCurrentQuotaCurrentOriginUsageCurrentDatabaseUsageExpectedUsageDecisionHandler : 1;
141         bool webViewDecideWebApplicationCacheQuotaForSecurityOriginCurrentQuotaTotalBytesNeeded : 1;
142         bool webViewPrintFrame : 1;
143         bool webViewDidClose : 1;
144         bool webViewClose : 1;
145         bool webViewFullscreenMayReturnToInline : 1;
146         bool webViewDidEnterFullscreen : 1;
147         bool webViewDidExitFullscreen : 1;
148         bool webViewRequestUserMediaAuthorizationForDevicesURLMainFrameURLDecisionHandler : 1;
149         bool webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler : 1;
150         bool webViewMediaCaptureStateDidChange : 1;
151 #if PLATFORM(IOS)
152 #if HAVE(APP_LINKS)
153         bool webViewShouldIncludeAppLinkActionsForElement : 1;
154 #endif
155         bool webViewActionsForElementDefaultActions : 1;
156         bool webViewDidNotHandleTapAsClickAtPoint : 1;
157         bool presentingViewControllerForWebView : 1;
158 #endif
159         bool dataDetectionContextForWebView : 1;
160         bool webViewImageOrMediaDocumentSizeChanged : 1;
161 #if ENABLE(POINTER_LOCK)
162         bool webViewRequestPointerLock : 1;
163         bool webViewDidLosePointerLock : 1;
164 #endif
165 #if ENABLE(CONTEXT_MENUS)
166         bool webViewContextMenuForElement : 1;
167         bool webViewContextMenuForElementUserInfo : 1;
168 #endif
169         bool webViewHasVideoInPictureInPictureDidChange : 1;
170     } m_delegateMethods;
171 };
172
173 } // namespace WebKit
174
175 #endif // WK_API_ENABLED