Notify the UI delegate when a MediaDocument's natural size changes
[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 "APIUIClient.h"
34 #import "WeakObjCPtr.h"
35 #import <wtf/RetainPtr.h>
36
37 @class _WKActivatedElementInfo;
38 @class WKWebView;
39 @protocol WKUIDelegate;
40
41 namespace WebKit {
42
43 class UIDelegate {
44 public:
45     explicit UIDelegate(WKWebView *);
46     ~UIDelegate();
47
48     std::unique_ptr<API::UIClient> createUIClient();
49
50     RetainPtr<id <WKUIDelegate> > delegate();
51     void setDelegate(id <WKUIDelegate>);
52
53 private:
54     class UIClient : public API::UIClient {
55     public:
56         explicit UIClient(UIDelegate&);
57         ~UIClient();
58
59     private:
60         // API::UIClient
61         virtual PassRefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebKit::SecurityOriginData&, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override;
62         virtual void close(WebKit::WebPageProxy*) override;
63         virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) override;
64         virtual void didEnterFullscreen(WebKit::WebPageProxy*) override;
65         virtual void didExitFullscreen(WebKit::WebPageProxy*) override;
66         virtual void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebKit::SecurityOriginData&, std::function<void ()> completionHandler) override;
67         virtual void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, const WebKit::SecurityOriginData&, std::function<void (bool)> completionHandler) override;
68         virtual void runJavaScriptPrompt(WebKit::WebPageProxy*, const WTF::String&, const WTF::String&, WebKit::WebFrameProxy*, const WebKit::SecurityOriginData&, std::function<void (const WTF::String&)> completionHandler) override;
69         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;
70         virtual void reachedApplicationCacheOriginQuota(WebPageProxy*, const WebCore::SecurityOrigin&, uint64_t currentQuota, uint64_t totalBytesNeeded, std::function<void (unsigned long long)> completionHandler) override;
71         virtual void printFrame(WebKit::WebPageProxy*, WebKit::WebFrameProxy*) override;
72 #if PLATFORM(IOS)
73 #if HAVE(APP_LINKS)
74         virtual bool shouldIncludeAppLinkActionsForElement(_WKActivatedElementInfo *) override;
75 #endif
76         virtual RetainPtr<NSArray> actionsForElement(_WKActivatedElementInfo *, RetainPtr<NSArray> defaultActions) override;
77         virtual void didNotHandleTapAsClick(const WebCore::IntPoint&) override;
78 #endif
79 #if ENABLE(VIDEO)
80         virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) override;
81 #endif
82
83         UIDelegate& m_uiDelegate;
84     };
85
86     WKWebView *m_webView;
87     WeakObjCPtr<id <WKUIDelegate> > m_delegate;
88
89     struct {
90         bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures : 1;
91         bool webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler : 1;
92         bool webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
93         bool webViewRunJavaScriptTextInputPanelWithPromptDefaultTextInitiatedByFrameCompletionHandler : 1;
94         bool webViewDecideDatabaseQuotaForSecurityOriginCurrentQuotaCurrentOriginUsageCurrentDatabaseUsageExpectedUsageDecisionHandler : 1;
95         bool webViewDecideWebApplicationCacheQuotaForSecurityOriginCurrentQuotaTotalBytesNeeded : 1;
96         bool webViewPrintFrame : 1;
97         bool webViewDidClose : 1;
98         bool webViewClose : 1;
99         bool webViewFullscreenMayReturnToInline : 1;
100         bool webViewDidEnterFullscreen : 1;
101         bool webViewDidExitFullscreen : 1;
102 #if PLATFORM(IOS)
103 #if HAVE(APP_LINKS)
104         bool webViewShouldIncludeAppLinkActionsForElement : 1;
105 #endif
106         bool webViewActionsForElementDefaultActions : 1;
107         bool webViewDidNotHandleTapAsClickAtPoint : 1;
108 #endif
109 #if ENABLE(VIDEO)
110         bool webViewMediaDocumentNaturalSizeChanged : 1;
111 #endif
112     } m_delegateMethods;
113 };
114
115 } // namespace WebKit
116
117 #endif // WK_API_ENABLED
118
119 #endif // UIClient_h