da0314ae3f58cbde98028e27289ead44d6d342bb
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / WKUIDelegate.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 #import <WebKit/WKFoundation.h>
27
28 #import <Foundation/Foundation.h>
29 #import <WebKit/WKPreviewActionItem.h>
30
31 NS_ASSUME_NONNULL_BEGIN
32
33 @class WKFrameInfo;
34 @class WKNavigationAction;
35 @class WKOpenPanelParameters;
36 @class WKPreviewElementInfo;
37 @class WKWebView;
38 @class WKWebViewConfiguration;
39 @class WKWindowFeatures;
40
41 /*! A class conforming to the WKUIDelegate protocol provides methods for
42  presenting native UI on behalf of a webpage.
43  */
44 @protocol WKUIDelegate <NSObject>
45
46 @optional
47
48 /*! @abstract Creates a new web view.
49  @param webView The web view invoking the delegate method.
50  @param configuration The configuration to use when creating the new web
51  view. This configuration is a copy of webView.configuration.
52  @param navigationAction The navigation action causing the new web view to
53  be created.
54  @param windowFeatures Window features requested by the webpage.
55  @result A new web view or nil.
56  @discussion The web view returned must be created with the specified configuration. WebKit will load the request in the returned web view.
57
58  If you do not implement this method, the web view will cancel the navigation.
59  */
60 - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
61
62 /*! @abstract Notifies your app that the DOM window object's close() method completed successfully.
63   @param webView The web view invoking the delegate method.
64   @discussion Your app should remove the web view from the view hierarchy and update
65   the UI as needed, such as by closing the containing browser tab or window.
66   */
67 - (void)webViewDidClose:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(9.0));
68
69 /*! @abstract Displays a JavaScript alert panel.
70  @param webView The web view invoking the delegate method.
71  @param message The message to display.
72  @param frame Information about the frame whose JavaScript initiated this
73  call.
74  @param completionHandler The completion handler to call after the alert
75  panel has been dismissed.
76  @discussion For user security, your app should call attention to the fact
77  that a specific website controls the content in this panel. A simple forumla
78  for identifying the controlling website is frame.request.URL.host.
79  The panel should have a single OK button.
80
81  If you do not implement this method, the web view will behave as if the user selected the OK button.
82  */
83 - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
84
85 /*! @abstract Displays a JavaScript confirm panel.
86  @param webView The web view invoking the delegate method.
87  @param message The message to display.
88  @param frame Information about the frame whose JavaScript initiated this call.
89  @param completionHandler The completion handler to call after the confirm
90  panel has been dismissed. Pass YES if the user chose OK, NO if the user
91  chose Cancel.
92  @discussion For user security, your app should call attention to the fact
93  that a specific website controls the content in this panel. A simple forumla
94  for identifying the controlling website is frame.request.URL.host.
95  The panel should have two buttons, such as OK and Cancel.
96
97  If you do not implement this method, the web view will behave as if the user selected the Cancel button.
98  */
99 - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
100
101 /*! @abstract Displays a JavaScript text input panel.
102  @param webView The web view invoking the delegate method.
103  @param prompt The prompt to display.
104  @param defaultText The initial text to display in the text entry field.
105  @param frame Information about the frame whose JavaScript initiated this call.
106  @param completionHandler The completion handler to call after the text
107  input panel has been dismissed. Pass the entered text if the user chose
108  OK, otherwise nil.
109  @discussion For user security, your app should call attention to the fact
110  that a specific website controls the content in this panel. A simple forumla
111  for identifying the controlling website is frame.request.URL.host.
112  The panel should have two buttons, such as OK and Cancel, and a field in
113  which to enter text.
114
115  If you do not implement this method, the web view will behave as if the user selected the Cancel button.
116  */
117 - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
118
119 #if TARGET_OS_IPHONE
120
121 /*! @abstract Allows your app to determine whether or not the given element should show a preview.
122  @param webView The web view invoking the delegate method.
123  @param elementInfo The elementInfo for the element the user has started touching.
124  @discussion To disable previews entirely for the given element, return NO. Returning NO will prevent 
125  webView:previewingViewControllerForElement:defaultActions: and webView:commitPreviewingViewController:
126  from being invoked.
127  
128  This method will only be invoked for elements that have default preview in WebKit, which is
129  limited to links. In the future, it could be invoked for additional elements.
130  */
131 - (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo WK_API_AVAILABLE(ios(10.0));
132
133 /*! @abstract Allows your app to provide a custom view controller to show when the given element is peeked.
134  @param webView The web view invoking the delegate method.
135  @param elementInfo The elementInfo for the element the user is peeking.
136  @param defaultActions An array of the actions that WebKit would use as previewActionItems for this element by 
137  default. These actions would be used if allowsLinkPreview is YES but these delegate methods have not been 
138  implemented, or if this delegate method returns nil.
139  @discussion Returning a view controller will result in that view controller being displayed as a peek preview.
140  To use the defaultActions, your app is responsible for returning whichever of those actions it wants in your 
141  view controller's implementation of -previewActionItems.
142  
143  Returning nil will result in WebKit's default preview behavior. webView:commitPreviewingViewController: will only be invoked
144  if a non-nil view controller was returned.
145  */
146 - (nullable UIViewController *)webView:(WKWebView *)webView previewingViewControllerForElement:(WKPreviewElementInfo *)elementInfo defaultActions:(NSArray<id <WKPreviewActionItem>> *)previewActions WK_API_AVAILABLE(ios(10.0));
147
148 /*! @abstract Allows your app to pop to the view controller it created.
149  @param webView The web view invoking the delegate method.
150  @param previewingViewController The view controller that is being popped.
151  */
152 - (void)webView:(WKWebView *)webView commitPreviewingViewController:(UIViewController *)previewingViewController WK_API_AVAILABLE(ios(10.0));
153
154 #endif // TARGET_OS_IPHONE
155
156 #if !TARGET_OS_IPHONE
157
158 /*! @abstract Displays a file upload panel.
159  @param webView The web view invoking the delegate method.
160  @param parameters Parameters describing the file upload control.
161  @param frame Information about the frame whose file upload control initiated this call.
162  @param completionHandler The completion handler to call after open panel has been dismissed. Pass the selected URLs if the user chose OK, otherwise nil.
163
164  If you do not implement this method, the web view will behave as if the user selected the Cancel button.
165  */
166 - (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> * _Nullable URLs))completionHandler WK_API_AVAILABLE(macosx(10.12));
167
168 #endif
169
170 @end
171
172 NS_ASSUME_NONNULL_END