WKWebView Find-in-page API.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / WKWebView.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 #if TARGET_OS_IPHONE
29 #import <UIKit/UIKit.h>
30 #else
31 #import <AppKit/AppKit.h>
32 #endif
33
34 NS_ASSUME_NONNULL_BEGIN
35
36 @class WKBackForwardList;
37 @class WKBackForwardListItem;
38 @class WKFindConfiguration;
39 @class WKFindResult;
40 @class WKNavigation;
41 @class WKPDFConfiguration;
42 @class WKSnapshotConfiguration;
43 @class WKWebViewConfiguration;
44
45 @protocol WKNavigationDelegate;
46 @protocol WKUIDelegate;
47
48 /*!
49  A WKWebView object displays interactive Web content.
50  @helperclass @link WKWebViewConfiguration @/link
51  Used to configure @link WKWebView @/link instances.
52  */
53 #if TARGET_OS_IPHONE
54 WK_CLASS_AVAILABLE(macos(10.10), ios(8.0))
55 @interface WKWebView : UIView
56 #else
57 WK_CLASS_AVAILABLE(macos(10.10), ios(8.0))
58 @interface WKWebView : NSView
59 #endif
60
61 /*! @abstract A copy of the configuration with which the web view was
62  initialized. */
63 @property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
64
65 /*! @abstract The web view's navigation delegate. */
66 @property (nullable, nonatomic, weak) id <WKNavigationDelegate> navigationDelegate;
67
68 /*! @abstract The web view's user interface delegate. */
69 @property (nullable, nonatomic, weak) id <WKUIDelegate> UIDelegate;
70
71 /*! @abstract The web view's back-forward list. */
72 @property (nonatomic, readonly, strong) WKBackForwardList *backForwardList;
73
74 /*! @abstract Returns a web view initialized with a specified frame and
75  configuration.
76  @param frame The frame for the new web view.
77  @param configuration The configuration for the new web view.
78  @result An initialized web view, or nil if the object could not be
79  initialized.
80  @discussion This is a designated initializer. You can use
81  @link -initWithFrame: @/link to initialize an instance with the default
82  configuration. The initializer copies the specified configuration, so
83  mutating the configuration after invoking the initializer has no effect
84  on the web view.
85  */
86 - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;
87
88 - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
89
90 /*! @abstract Navigates to a requested URL.
91  @param request The request specifying the URL to which to navigate.
92  @result A new navigation for the given request.
93  */
94 - (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;
95
96 /*! @abstract Navigates to the requested file URL on the filesystem.
97  @param URL The file URL to which to navigate.
98  @param readAccessURL The URL to allow read access to.
99  @discussion If readAccessURL references a single file, only that file may be loaded by WebKit.
100  If readAccessURL references a directory, files inside that file may be loaded by WebKit.
101  @result A new navigation for the given file URL.
102  */
103 - (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL WK_API_AVAILABLE(macos(10.11), ios(9.0));
104
105 /*! @abstract Sets the webpage contents and base URL.
106  @param string The string to use as the contents of the webpage.
107  @param baseURL A URL that is used to resolve relative URLs within the document.
108  @result A new navigation.
109  */
110 - (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
111
112 /*! @abstract Sets the webpage contents and base URL.
113  @param data The data to use as the contents of the webpage.
114  @param MIMEType The MIME type of the data.
115  @param characterEncodingName The data's character encoding name.
116  @param baseURL A URL that is used to resolve relative URLs within the document.
117  @result A new navigation.
118  */
119 - (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL WK_API_AVAILABLE(macos(10.11), ios(9.0));
120
121 /*! @abstract Navigates to an item from the back-forward list and sets it
122  as the current item.
123  @param item The item to which to navigate. Must be one of the items in the
124  web view's back-forward list.
125  @result A new navigation to the requested item, or nil if it is already
126  the current item or is not part of the web view's back-forward list.
127  @seealso backForwardList
128  */
129 - (nullable WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;
130
131 /*! @abstract The page title.
132  @discussion @link WKWebView @/link is key-value observing (KVO) compliant
133  for this property.
134  */
135 @property (nullable, nonatomic, readonly, copy) NSString *title;
136
137 /*! @abstract The active URL.
138  @discussion This is the URL that should be reflected in the user
139  interface.
140  @link WKWebView @/link is key-value observing (KVO) compliant for this
141  property.
142  */
143 @property (nullable, nonatomic, readonly, copy) NSURL *URL;
144
145 /*! @abstract A Boolean value indicating whether the view is currently
146  loading content.
147  @discussion @link WKWebView @/link is key-value observing (KVO) compliant
148  for this property.
149  */
150 @property (nonatomic, readonly, getter=isLoading) BOOL loading;
151
152 /*! @abstract An estimate of what fraction of the current navigation has been completed.
153  @discussion This value ranges from 0.0 to 1.0 based on the total number of
154  bytes expected to be received, including the main document and all of its
155  potential subresources. After a navigation completes, the value remains at 1.0
156  until a new navigation starts, at which point it is reset to 0.0.
157  @link WKWebView @/link is key-value observing (KVO) compliant for this
158  property.
159  */
160 @property (nonatomic, readonly) double estimatedProgress;
161
162 /*! @abstract A Boolean value indicating whether all resources on the page
163  have been loaded over securely encrypted connections.
164  @discussion @link WKWebView @/link is key-value observing (KVO) compliant
165  for this property.
166  */
167 @property (nonatomic, readonly) BOOL hasOnlySecureContent;
168
169 /*! @abstract A SecTrustRef for the currently committed navigation.
170  @discussion @link WKWebView @/link is key-value observing (KVO) compliant 
171  for this property.
172  */
173 @property (nonatomic, readonly, nullable) SecTrustRef serverTrust WK_API_AVAILABLE(macos(10.12), ios(10.0));
174
175 /*! @abstract A Boolean value indicating whether there is a back item in
176  the back-forward list that can be navigated to.
177  @discussion @link WKWebView @/link is key-value observing (KVO) compliant
178  for this property.
179  @seealso backForwardList.
180  */
181 @property (nonatomic, readonly) BOOL canGoBack;
182
183 /*! @abstract A Boolean value indicating whether there is a forward item in
184  the back-forward list that can be navigated to.
185  @discussion @link WKWebView @/link is key-value observing (KVO) compliant
186  for this property.
187  @seealso backForwardList.
188  */
189 @property (nonatomic, readonly) BOOL canGoForward;
190
191 /*! @abstract Navigates to the back item in the back-forward list.
192  @result A new navigation to the requested item, or nil if there is no back
193  item in the back-forward list.
194  */
195 - (nullable WKNavigation *)goBack;
196
197 /*! @abstract Navigates to the forward item in the back-forward list.
198  @result A new navigation to the requested item, or nil if there is no
199  forward item in the back-forward list.
200  */
201 - (nullable WKNavigation *)goForward;
202
203 /*! @abstract Reloads the current page.
204  @result A new navigation representing the reload.
205  */
206 - (nullable WKNavigation *)reload;
207
208 /*! @abstract Reloads the current page, performing end-to-end revalidation
209  using cache-validating conditionals if possible.
210  @result A new navigation representing the reload.
211  */
212 - (nullable WKNavigation *)reloadFromOrigin;
213
214 /*! @abstract Stops loading all resources on the current page.
215  */
216 - (void)stopLoading;
217
218 /* @abstract Evaluates the given JavaScript string.
219  @param javaScriptString The JavaScript string to evaluate.
220  @param completionHandler A block to invoke when script evaluation completes or fails.
221  @discussion The completionHandler is passed the result of the script evaluation or an error.
222 */
223 - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;
224
225 /*! @abstract Get a snapshot for the visible viewport of WKWebView.
226  @param snapshotConfiguration An object that specifies how the snapshot is configured.
227  @param completionHandler A block to invoke when the snapshot is ready.
228  @discussion If the WKSnapshotConfiguration is nil, the method will snapshot the bounds of the 
229  WKWebView and create an image that is the width of the bounds of the WKWebView and scaled to the 
230  device scale. The completionHandler is passed the image of the viewport contents or an error.
231  */
232 #if TARGET_OS_IPHONE
233 - (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(UIImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler WK_API_AVAILABLE(ios(11.0));
234 #else
235 - (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(NSImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler WK_API_AVAILABLE(macos(10.13));
236 #endif
237
238 /*! @abstract Create a PDF document representation from the web page currently displayed in the WKWebView
239 @param pdfConfiguration An object that specifies how the PDF capture is configured.
240 @param completionHandler A block to invoke when the pdf document data is ready.
241 @discussion If the WKPDFConfiguration is nil, the method will create a PDF document representing the bounds of the currently displayed web page.
242 The completionHandler is passed the resulting PDF document data or an error.
243 The data can be used to create a PDFDocument object.
244 If the data is written to a file the resulting file is a valid PDF document.
245 */
246 - (void)createPDFWithConfiguration:(nullable WKPDFConfiguration *)pdfConfiguration completionHandler:(void (^)(NSData * _Nullable pdfDocumentData, NSError * _Nullable error))completionHandler NS_REFINED_FOR_SWIFT WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
247
248 /* @abstract Create WebKit web archive data representing the current web content of the WKWebView
249 @param completionHandler A block to invoke when the web archive data is ready.
250 @discussion WebKit web archive data represents a snapshot of web content.
251 It can be used to represent web content on a pasteboard, loaded into a WKWebView directly, and saved to a file for later use.
252 The uniform type identifier kUTTypeWebArchive can be used get the related pasteboard type and MIME type.
253 */
254 - (void)createWebArchiveDataWithCompletionHandler:(void (^)(NSData *, NSError *))completionHandler NS_REFINED_FOR_SWIFT WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
255
256 /*! @abstract A Boolean value indicating whether horizontal swipe gestures
257  will trigger back-forward list navigations.
258  @discussion The default value is NO.
259  */
260 @property (nonatomic) BOOL allowsBackForwardNavigationGestures;
261
262 /*! @abstract The custom user agent string or nil if no custom user agent string has been set.
263 */
264 @property (nullable, nonatomic, copy) NSString *customUserAgent WK_API_AVAILABLE(macos(10.11), ios(9.0));
265
266 /*! @abstract A Boolean value indicating whether link preview is allowed for any
267  links inside this WKWebView.
268  @discussion The default value is YES on Mac and iOS.
269  */
270 @property (nonatomic) BOOL allowsLinkPreview WK_API_AVAILABLE(macos(10.11), ios(9.0));
271
272 #if TARGET_OS_IPHONE
273 /*! @abstract The scroll view associated with the web view.
274  */
275 @property (nonatomic, readonly, strong) UIScrollView *scrollView;
276 #endif
277
278 #if !TARGET_OS_IPHONE
279 /* @abstract A Boolean value indicating whether magnify gestures will
280  change the web view's magnification.
281  @discussion It is possible to set the magnification property even if
282  allowsMagnification is set to NO.
283  The default value is NO.
284  */
285 @property (nonatomic) BOOL allowsMagnification;
286
287 /* @abstract The factor by which the viewport of the page is currently scaled.
288  @discussion The default value is 1.0.
289  */
290 @property (nonatomic) CGFloat magnification;
291
292 /* @abstract Scales the page content by a specified factor and centers the
293  result on a specified point.
294  * @param magnification The factor by which to scale the content.
295  * @param point The point (in view space) on which to center magnification.
296  */
297 - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;
298
299 #endif
300
301 /* @abstract The factor by which page content is scaled relative to the viewport.
302 @discussion The default value is 1.0.
303  Changing this value is equivalent to web content setting the CSS "zoom"
304  property on all page content.
305 */
306 @property (nonatomic) CGFloat pageZoom WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
307
308 /* @abstract Searches the page contents for the given string.
309  @param string The string to search for.
310  @param configuration A set of options configuring the search.
311  @param completionHandler A block to invoke when the search completes.
312  @discussion If the WKFindConfiguration is nil, all of the default WKFindConfiguration values will be used.
313   A match found by the search is selected and the page is scrolled to reveal the selection.
314   The completion handler is called after the search completes.
315 */
316 - (void)findString:(NSString *)string withConfiguration:(nullable WKFindConfiguration *)configuration completionHandler:(void (^)(WKFindResult *result))completionHandler NS_REFINED_FOR_SWIFT WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
317
318 /* @abstract Checks whether or not WKWebViews handle the given URL scheme by default.
319  @param scheme The URL scheme to check.
320  */
321 + (BOOL)handlesURLScheme:(NSString *)urlScheme WK_API_AVAILABLE(macos(10.13), ios(11.0));
322
323 #if !TARGET_OS_IPHONE
324 /* @abstract Returns an NSPrintOperation object configured to print the contents of this WKWebView
325 @param printInfo The print info object used to configure the resulting print operation.
326 */
327 - (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo WK_API_AVAILABLE(macos(WK_MAC_TBA));
328 #endif
329 @end
330
331 #if !TARGET_OS_IPHONE
332
333 @interface WKWebView (WKIBActions) <NSUserInterfaceValidations>
334
335 /*! @abstract Action method that navigates to the back item in the
336  back-forward list.
337  @param sender The object that sent this message.
338  */
339 - (IBAction)goBack:(nullable id)sender;
340
341 /*! @abstract Action method that navigates to the forward item in the
342  back-forward list.
343  @param sender The object that sent this message.
344  */
345 - (IBAction)goForward:(nullable id)sender;
346
347 /*! @abstract Action method that reloads the current page.
348  @param sender The object that sent this message.
349  */
350 - (IBAction)reload:(nullable id)sender;
351
352 /*! @abstract Action method that reloads the current page, performing
353  end-to-end revalidation using cache-validating conditionals if possible.
354  @param sender The object that sent this message.
355  */
356 - (IBAction)reloadFromOrigin:(nullable id)sender;
357
358 /*! @abstract Action method that stops loading all resources on the current
359  page.
360  @param sender The object that sent this message.
361  */
362 - (IBAction)stopLoading:(nullable id)sender;
363
364 @end
365
366 WK_API_AVAILABLE(macos(WK_MAC_TBA))
367 @interface WKWebView (WKNSTextFinderClient) <NSTextFinderClient>
368 @end
369
370 #endif
371
372 @interface WKWebView (WKDeprecated)
373
374 @property (nonatomic, readonly, copy) NSArray *certificateChain WK_API_DEPRECATED_WITH_REPLACEMENT("serverTrust", macos(10.11, 10.12), ios(9.0, 10.0));
375
376 @end
377
378 NS_ASSUME_NONNULL_END