Add a context menu delegate method that takes a userInfo parameter
[WebKit-https.git] / Source / WebKit2 / 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 #ifndef UIClient_h
27 #define UIClient_h
28
29 #import "WKFoundation.h"
30
31 #if WK_API_ENABLED
32
33 #import "APIContextMenuClient.h"
34 #import "APIUIClient.h"
35 #import "WeakObjCPtr.h"
36 #import <wtf/RetainPtr.h>
37
38 @class _WKActivatedElementInfo;
39 @class WKWebView;
40 @protocol WKUIDelegate;
41
42 namespace WebKit {
43
44 class UIDelegate {
45 public:
46     explicit UIDelegate(WKWebView *);
47     ~UIDelegate();
48
49 #if ENABLE(CONTEXT_MENUS)
50     std::unique_ptr<API::ContextMenuClient> createContextMenuClient();
51 #endif
52     std::unique_ptr<API::UIClient> createUIClient();
53
54     RetainPtr<id <WKUIDelegate> > delegate();
55     void setDelegate(id <WKUIDelegate>);
56
57 private:
58 #if ENABLE(CONTEXT_MENUS)
59     class ContextMenuClient : public API::ContextMenuClient {
60     public:
61         explicit ContextMenuClient(UIDelegate&);
62         ~ContextMenuClient();
63
64     private:
65         // API::ContextMenuClient
66         virtual RetainPtr<NSMenu> menuFromProposedMenu(WebKit::WebPageProxy&, NSMenu *, const WebKit::WebHitTestResultData&, API::Object*) override;
67
68         UIDelegate& m_uiDelegate;
69     };
70 #endif
71
72     class UIClient : public API::UIClient {
73     public:
74         explicit UIClient(UIDelegate&);
75         ~UIClient();
76
77     private:
78         // API::UIClient
79         virtual PassRefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override;
80         virtual void close(WebKit::WebPageProxy*) override;
81         virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) override;
82         virtual void didEnterFullscreen(WebKit::WebPageProxy*) override;
83         virtual void didExitFullscreen(WebKit::WebPageProxy*) override;
84         virtual void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, std::function<void ()> completionHandler) override;
85         virtual void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, std::function<void (bool)> completionHandler) override;
86         virtual void runJavaScriptPrompt(WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, std::function<void (const WTF::String&)> completionHandler) override;
87         virtual 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, std::function<void (unsigned long long)>) override;
88         virtual void reachedApplicationCacheOriginQuota(WebPageProxy*, const WebCore::SecurityOrigin&, uint64_t currentQuota, uint64_t totalBytesNeeded, std::function<void (unsigned long long)> completionHandler) override;
89         virtual void printFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) override;
90 #if PLATFORM(IOS)
91 #if HAVE(APP_LINKS)
92         virtual bool shouldIncludeAppLinkActionsForElement(_WKActivatedElementInfo *) override;
93 #endif
94         virtual RetainPtr<NSArray> actionsForElement(_WKActivatedElementInfo *, RetainPtr<NSArray> defaultActions) override;
95         virtual void didNotHandleTapAsClick(const WebCore::IntPoint&) override;
96 #endif
97         virtual void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&) override;
98
99         UIDelegate& m_uiDelegate;
100     };
101
102     WKWebView *m_webView;
103     WeakObjCPtr<id <WKUIDelegate> > m_delegate;
104
105     struct {
106         bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures : 1;
107         bool webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler : 1;
108         bool webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
109         bool webViewRunJavaScriptTextInputPanelWithPromptDefaultTextInitiatedByFrameCompletionHandler : 1;
110         bool webViewDecideDatabaseQuotaForSecurityOriginCurrentQuotaCurrentOriginUsageCurrentDatabaseUsageExpectedUsageDecisionHandler : 1;
111         bool webViewDecideWebApplicationCacheQuotaForSecurityOriginCurrentQuotaTotalBytesNeeded : 1;
112         bool webViewPrintFrame : 1;
113         bool webViewDidClose : 1;
114         bool webViewClose : 1;
115         bool webViewFullscreenMayReturnToInline : 1;
116         bool webViewDidEnterFullscreen : 1;
117         bool webViewDidExitFullscreen : 1;
118 #if PLATFORM(IOS)
119 #if HAVE(APP_LINKS)
120         bool webViewShouldIncludeAppLinkActionsForElement : 1;
121 #endif
122         bool webViewActionsForElementDefaultActions : 1;
123         bool webViewDidNotHandleTapAsClickAtPoint : 1;
124 #endif
125         bool webViewImageOrMediaDocumentSizeChanged : 1;
126
127 #if ENABLE(CONTEXT_MENUS)
128         bool webViewContextMenuForElement : 1;
129         bool webViewContextMenuForElementUserInfo : 1;
130 #endif
131     } m_delegateMethods;
132 };
133
134 } // namespace WebKit
135
136 #endif // WK_API_ENABLED
137
138 #endif // UIClient_h