Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / WKWebViewConfiguration.h
1 /*
2  * Copyright (C) 2014-2019 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/WKDataDetectorTypes.h>
30
31 NS_ASSUME_NONNULL_BEGIN
32
33 @class WKPreferences;
34 @class WKProcessPool;
35 @class WKUserContentController;
36 @class WKWebpagePreferences;
37 @class WKWebsiteDataStore;
38 @protocol WKURLSchemeHandler;
39
40 #if TARGET_OS_IPHONE
41
42 /*! @enum WKSelectionGranularity
43  @abstract The granularity with which a selection can be created and modified interactively.
44  @constant WKSelectionGranularityDynamic    Selection granularity varies automatically based on the selection.
45  @constant WKSelectionGranularityCharacter  Selection endpoints can be placed at any character boundary.
46  @discussion An example of how granularity may vary when WKSelectionGranularityDynamic is used is
47  that when the selection is within a single block, the granularity may be single character, and when
48  the selection is not confined to a single block, the selection granularity may be single block.
49  */
50 typedef NS_ENUM(NSInteger, WKSelectionGranularity) {
51     WKSelectionGranularityDynamic,
52     WKSelectionGranularityCharacter,
53 } WK_API_AVAILABLE(ios(8.0));
54
55 #else
56
57 /*! @enum WKUserInterfaceDirectionPolicy
58  @abstract The policy used to determine the directionality of user interface elements inside a web view.
59  @constant WKUserInterfaceDirectionPolicyContent User interface directionality follows CSS / HTML / XHTML
60  specifications.
61  @constant WKUserInterfaceDirectionPolicySystem User interface directionality follows the view's
62  userInterfaceLayoutDirection property
63  @discussion When WKUserInterfaceDirectionPolicyContent is specified, the directionality of user interface
64  elements is affected by the "dir" attribute or the "direction" CSS property. When
65  WKUserInterfaceDirectionPolicySystem is specified, the directionality of user interface elements is
66  affected by the direction of the view.
67 */
68 typedef NS_ENUM(NSInteger, WKUserInterfaceDirectionPolicy) {
69     WKUserInterfaceDirectionPolicyContent,
70     WKUserInterfaceDirectionPolicySystem,
71 } WK_API_AVAILABLE(macos(10.12));
72
73 #endif
74
75 /*! @enum WKAudiovisualMediaTypes
76  @abstract The types of audiovisual media which will require a user gesture to begin playing.
77  @constant WKAudiovisualMediaTypeNone No audiovisual media will require a user gesture to begin playing.
78  @constant WKAudiovisualMediaTypeAudio Audiovisual media containing audio will require a user gesture to begin playing.
79  @constant WKAudiovisualMediaTypeVideo Audiovisual media containing video will require a user gesture to begin playing.
80  @constant WKAudiovisualMediaTypeAll All audiovisual media will require a user gesture to begin playing.
81 */
82 typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) {
83     WKAudiovisualMediaTypeNone = 0,
84     WKAudiovisualMediaTypeAudio = 1 << 0,
85     WKAudiovisualMediaTypeVideo = 1 << 1,
86     WKAudiovisualMediaTypeAll = NSUIntegerMax
87 } WK_API_AVAILABLE(macos(10.12), ios(10.0));
88
89 /*! A WKWebViewConfiguration object is a collection of properties with
90  which to initialize a web view.
91  @helps Contains properties used to configure a @link WKWebView @/link.
92  */
93 WK_CLASS_AVAILABLE(macos(10.10), ios(8.0))
94 @interface WKWebViewConfiguration : NSObject <NSSecureCoding, NSCopying>
95
96 /*! @abstract The process pool from which to obtain the view's web content
97  process.
98  @discussion When a web view is initialized, a new web content process
99  will be created for it from the specified pool, or an existing process in
100  that pool will be used.
101 */
102 @property (nonatomic, strong) WKProcessPool *processPool;
103
104 /*! @abstract The preference settings to be used by the web view.
105 */
106 @property (nonatomic, strong) WKPreferences *preferences;
107
108 /*! @abstract The user content controller to associate with the web view.
109 */
110 @property (nonatomic, strong) WKUserContentController *userContentController;
111
112 /*! @abstract The website data store to be used by the web view.
113  */
114 @property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore WK_API_AVAILABLE(macos(10.11), ios(9.0));
115
116 /*! @abstract A Boolean value indicating whether the web view suppresses
117  content rendering until it is fully loaded into memory.
118  @discussion The default value is NO.
119  */
120 @property (nonatomic) BOOL suppressesIncrementalRendering;
121
122 /*! @abstract The name of the application as used in the user agent string.
123 */
124 @property (nullable, nonatomic, copy) NSString *applicationNameForUserAgent WK_API_AVAILABLE(macos(10.11), ios(9.0));
125
126 /*! @abstract A Boolean value indicating whether AirPlay is allowed.
127  @discussion The default value is YES.
128  */
129 @property (nonatomic) BOOL allowsAirPlayForMediaPlayback WK_API_AVAILABLE(macos(10.11), ios(9.0));
130
131 @property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback WK_API_AVAILABLE(macos(10.12), ios(10.0));
132
133 /*! @abstract The set of default webpage preferences to use when loading and rendering content.
134  @discussion These default webpage preferences are additionally passed to the navigation delegate
135  in -webView:decidePolicyForNavigationAction:preferences:decisionHandler:.
136  */
137 @property (null_resettable, nonatomic, copy) WKWebpagePreferences *defaultWebpagePreferences WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
138
139 #if TARGET_OS_IPHONE
140 /*! @abstract A Boolean value indicating whether HTML5 videos play inline
141  (YES) or use the native full-screen controller (NO).
142  @discussion The default value is NO.
143  */
144 @property (nonatomic) BOOL allowsInlineMediaPlayback;
145
146 /*! @abstract The level of granularity with which the user can interactively
147  select content in the web view.
148  @discussion Possible values are described in WKSelectionGranularity.
149  The default value is WKSelectionGranularityDynamic.
150  */
151 @property (nonatomic) WKSelectionGranularity selectionGranularity;
152
153 /*! @abstract A Boolean value indicating whether HTML5 videos may play
154  picture-in-picture.
155  @discussion The default value is YES.
156  */
157 @property (nonatomic) BOOL allowsPictureInPictureMediaPlayback WK_API_AVAILABLE(ios(9_0));
158
159 /*! @abstract An enum value indicating the type of data detection desired.
160  @discussion The default value is WKDataDetectorTypeNone.
161  An example of how this property may affect the content loaded in the WKWebView is that content like
162  'Visit apple.com on July 4th or call 1 800 555-5545' will be transformed to add links around 'apple.com', 'July 4th' and '1 800 555-5545'
163  if the dataDetectorTypes property is set to WKDataDetectorTypePhoneNumber | WKDataDetectorTypeLink | WKDataDetectorTypeCalendarEvent.
164
165  */
166 @property (nonatomic) WKDataDetectorTypes dataDetectorTypes WK_API_AVAILABLE(ios(10.0));
167
168 /*! @abstract A Boolean value indicating whether the WKWebView should always allow scaling of the web page, regardless of author intent.
169  @discussion This will override the user-scalable property.
170  The default value is NO.
171  */
172 @property (nonatomic) BOOL ignoresViewportScaleLimits WK_API_AVAILABLE(ios(10.0));
173
174 #else
175
176 /*! @abstract The directionality of user interface elements.
177  @discussion Possible values are described in WKUserInterfaceDirectionPolicy.
178  The default value is WKUserInterfaceDirectionPolicyContent.
179  */
180 @property (nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy WK_API_AVAILABLE(macos(10.12));
181
182 #endif
183
184 /* @abstract Sets the URL scheme handler object for the given URL scheme.
185  @param urlSchemeHandler The object to register.
186  @param scheme The URL scheme the object will handle.
187  @discussion Each URL scheme can only have one URL scheme handler object registered.
188  An exception will be thrown if you try to register an object for a particular URL scheme more than once.
189  URL schemes are case insensitive. e.g. "myprotocol" and "MyProtocol" are equivalent.
190  Valid URL schemes must start with an ASCII letter and can only contain ASCII letters, numbers, the '+' character,
191  the '-' character, and the '.' character.
192  An exception will be thrown if you try to register a URL scheme handler for an invalid URL scheme.
193  An exception will be thrown if you try to register a URL scheme handler for a URL scheme that WebKit handles internally.
194  You can use +[WKWebView handlesURLScheme:] to check the availability of a given URL scheme.
195  */
196 - (void)setURLSchemeHandler:(nullable id <WKURLSchemeHandler>)urlSchemeHandler forURLScheme:(NSString *)urlScheme WK_API_AVAILABLE(macos(10.13), ios(11.0));
197
198 /* @abstract Returns the currently registered URL scheme handler object for the given URL scheme.
199  @param scheme The URL scheme to lookup.
200  */
201 - (nullable id <WKURLSchemeHandler>)urlSchemeHandlerForURLScheme:(NSString *)urlScheme WK_API_AVAILABLE(macos(10.13), ios(11.0));
202
203 @end
204
205 @interface WKWebViewConfiguration (WKDeprecated)
206
207 #if TARGET_OS_IPHONE
208 @property (nonatomic) BOOL mediaPlaybackRequiresUserAction WK_API_DEPRECATED_WITH_REPLACEMENT("mediaTypesRequiringUserActionForPlayback", ios(8.0, 9.0));
209 @property (nonatomic) BOOL mediaPlaybackAllowsAirPlay WK_API_DEPRECATED_WITH_REPLACEMENT("allowsAirPlayForMediaPlayback", ios(8.0, 9.0));
210 @property (nonatomic) BOOL requiresUserActionForMediaPlayback WK_API_DEPRECATED_WITH_REPLACEMENT("mediaTypesRequiringUserActionForPlayback", ios(9.0, 10.0));
211 #endif
212
213 @end
214
215 NS_ASSUME_NONNULL_END