2 * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
27 #import "WKWebViewConfigurationInternal.h"
31 #import "APIPageConfiguration.h"
32 #import "VersionChecks.h"
33 #import "WKPreferences.h"
34 #import "WKProcessPool.h"
35 #import "WKUserContentController.h"
36 #import "WKWebViewContentProviderRegistry.h"
37 #import "WeakObjCPtr.h"
38 #import "_WKVisitedLinkProvider.h"
39 #import "_WKWebsiteDataStoreInternal.h"
40 #import <WebCore/RuntimeApplicationChecks.h>
41 #import <wtf/RetainPtr.h>
45 #import <WebCore/Device.h>
48 using namespace WebCore;
50 template<typename T> class LazyInitialized {
52 typedef typename WTF::GetPtrHelper<T>::PtrType PtrType;
57 if (!m_isInitialized) {
59 m_isInitialized = true;
68 m_isInitialized = true;
74 m_isInitialized = true;
83 bool m_isInitialized = false;
87 @implementation WKWebViewConfiguration {
88 LazyInitialized<RetainPtr<WKProcessPool>> _processPool;
89 LazyInitialized<RetainPtr<WKPreferences>> _preferences;
90 LazyInitialized<RetainPtr<WKUserContentController>> _userContentController;
91 LazyInitialized<RetainPtr<_WKVisitedLinkStore>> _visitedLinkStore;
92 LazyInitialized<RetainPtr<WKWebsiteDataStore>> _websiteDataStore;
93 WebKit::WeakObjCPtr<WKWebView> _relatedWebView;
94 WebKit::WeakObjCPtr<WKWebView> _alternateWebViewForNavigationGestures;
95 BOOL _treatsSHA1SignedCertificatesAsInsecure;
96 RetainPtr<NSString> _groupIdentifier;
97 LazyInitialized<RetainPtr<NSString>> _applicationNameForUserAgent;
98 BOOL _respectsImageOrientation;
99 BOOL _printsBackgrounds;
100 CGFloat _incrementalRenderingSuppressionTimeout;
101 BOOL _allowsJavaScriptMarkup;
102 BOOL _convertsPositionStyleOnCopy;
103 BOOL _allowsMetaRefresh;
104 BOOL _allowUniversalAccessFromFileURLs;
107 LazyInitialized<RetainPtr<WKWebViewContentProviderRegistry>> _contentProviderRegistry;
108 BOOL _alwaysRunsAtForegroundPriority;
109 BOOL _allowsInlineMediaPlayback;
110 BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute;
111 BOOL _allowsInlineMediaPlaybackAfterFullscreen;
114 BOOL _invisibleAutoplayNotPermitted;
115 BOOL _mediaDataLoadsAutomatically;
116 BOOL _attachmentElementEnabled;
117 BOOL _mainContentUserGestureOverrideEnabled;
120 BOOL _showsURLsInToolTips;
121 BOOL _serviceControlsEnabled;
122 BOOL _imageControlsEnabled;
123 BOOL _requiresUserActionForEditingControlsManager;
125 BOOL _initialCapitalizationEnabled;
127 #if ENABLE(APPLE_PAY)
128 BOOL _applePayEnabled;
134 if (!(self = [super init]))
138 _allowsPictureInPictureMediaPlayback = YES;
139 _allowsInlineMediaPlayback = WebCore::deviceClass() == MGDeviceClassiPad;
140 _inlineMediaPlaybackRequiresPlaysInlineAttribute = !_allowsInlineMediaPlayback;
141 _allowsInlineMediaPlaybackAfterFullscreen = !_allowsInlineMediaPlayback;
142 _mediaDataLoadsAutomatically = NO;
143 if (linkedOnOrAfter(WebKit::LibraryVersion::FirstWithMediaTypesRequiringUserActionForPlayback))
144 _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAudio;
146 _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
147 _ignoresViewportScaleLimits = NO;
149 _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
150 _mediaDataLoadsAutomatically = YES;
151 _userInterfaceDirectionPolicy = WKUserInterfaceDirectionPolicyContent;
153 _mainContentUserGestureOverrideEnabled = NO;
154 _invisibleAutoplayNotPermitted = NO;
156 // FIXME: <rdar://problem/25135244> Should default to NO once clients have adopted the setting.
158 _attachmentElementEnabled = IOSApplication::isMobileMail();
160 _attachmentElementEnabled = MacApplication::isAppleMail();
164 _respectsImageOrientation = YES;
165 _printsBackgrounds = YES;
169 _printsBackgrounds = NO;
170 _respectsImageOrientation = NO;
171 _showsURLsInToolTips = NO;
172 _serviceControlsEnabled = NO;
173 _imageControlsEnabled = NO;
174 _requiresUserActionForEditingControlsManager = NO;
176 _initialCapitalizationEnabled = YES;
178 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
179 _allowsAirPlayForMediaPlayback = YES;
182 _incrementalRenderingSuppressionTimeout = 5;
183 _allowsJavaScriptMarkup = YES;
184 _convertsPositionStyleOnCopy = NO;
185 _allowsMetaRefresh = YES;
186 _allowUniversalAccessFromFileURLs = NO;
187 _treatsSHA1SignedCertificatesAsInsecure = YES;
192 - (NSString *)description
194 return [NSString stringWithFormat:@"<%@: %p; processPool = %@; preferences = %@>", NSStringFromClass(self.class), self, self.processPool, self.preferences];
197 // FIXME: Encode the process pool, user content controller and website data store.
199 - (void)encodeWithCoder:(NSCoder *)coder
201 [coder encodeObject:self.processPool forKey:@"processPool"];
202 [coder encodeObject:self.preferences forKey:@"preferences"];
203 [coder encodeObject:self.userContentController forKey:@"userContentController"];
204 [coder encodeObject:self.websiteDataStore forKey:@"websiteDataStore"];
206 [coder encodeBool:self.suppressesIncrementalRendering forKey:@"suppressesIncrementalRendering"];
207 [coder encodeObject:self.applicationNameForUserAgent forKey:@"applicationNameForUserAgent"];
208 [coder encodeBool:self.allowsAirPlayForMediaPlayback forKey:@"allowsAirPlayForMediaPlayback"];
211 [coder encodeInteger:self.dataDetectorTypes forKey:@"dataDetectorTypes"];
212 [coder encodeBool:self.allowsInlineMediaPlayback forKey:@"allowsInlineMediaPlayback"];
213 [coder encodeBool:self._allowsInlineMediaPlaybackAfterFullscreen forKey:@"allowsInlineMediaPlaybackAfterFullscreen"];
214 [coder encodeBool:self.mediaTypesRequiringUserActionForPlayback forKey:@"mediaTypesRequiringUserActionForPlayback"];
215 [coder encodeInteger:self.selectionGranularity forKey:@"selectionGranularity"];
216 [coder encodeBool:self.allowsPictureInPictureMediaPlayback forKey:@"allowsPictureInPictureMediaPlayback"];
217 [coder encodeBool:self.ignoresViewportScaleLimits forKey:@"ignoresViewportScaleLimits"];
219 [coder encodeInteger:self.userInterfaceDirectionPolicy forKey:@"userInterfaceDirectionPolicy"];
223 - (instancetype)initWithCoder:(NSCoder *)coder
225 if (!(self = [self init]))
228 self.processPool = [coder decodeObjectForKey:@"processPool"];
229 self.preferences = [coder decodeObjectForKey:@"preferences"];
230 self.userContentController = [coder decodeObjectForKey:@"userContentController"];
231 self.websiteDataStore = [coder decodeObjectForKey:@"websiteDataStore"];
233 self.suppressesIncrementalRendering = [coder decodeBoolForKey:@"suppressesIncrementalRendering"];
234 self.applicationNameForUserAgent = [coder decodeObjectForKey:@"applicationNameForUserAgent"];
235 self.allowsAirPlayForMediaPlayback = [coder decodeBoolForKey:@"allowsAirPlayForMediaPlayback"];
238 self.dataDetectorTypes = [coder decodeIntegerForKey:@"dataDetectorTypes"];
239 self.allowsInlineMediaPlayback = [coder decodeBoolForKey:@"allowsInlineMediaPlayback"];
240 self._allowsInlineMediaPlaybackAfterFullscreen = [coder decodeBoolForKey:@"allowsInlineMediaPlaybackAfterFullscreen"];
241 self.mediaTypesRequiringUserActionForPlayback = [coder decodeBoolForKey:@"mediaTypesRequiringUserActionForPlayback"];
242 self.selectionGranularity = static_cast<WKSelectionGranularity>([coder decodeIntegerForKey:@"selectionGranularity"]);
243 self.allowsPictureInPictureMediaPlayback = [coder decodeBoolForKey:@"allowsPictureInPictureMediaPlayback"];
244 self.ignoresViewportScaleLimits = [coder decodeBoolForKey:@"ignoresViewportScaleLimits"];
246 auto userInterfaceDirectionPolicyCandidate = static_cast<WKUserInterfaceDirectionPolicy>([coder decodeIntegerForKey:@"userInterfaceDirectionPolicy"]);
247 if (userInterfaceDirectionPolicyCandidate == WKUserInterfaceDirectionPolicyContent || userInterfaceDirectionPolicyCandidate == WKUserInterfaceDirectionPolicySystem)
248 self.userInterfaceDirectionPolicy = userInterfaceDirectionPolicyCandidate;
254 - (id)copyWithZone:(NSZone *)zone
256 WKWebViewConfiguration *configuration = [(WKWebViewConfiguration *)[[self class] allocWithZone:zone] init];
258 configuration.processPool = self.processPool;
259 configuration.preferences = self.preferences;
260 configuration.userContentController = self.userContentController;
261 configuration.websiteDataStore = self.websiteDataStore;
262 configuration._visitedLinkStore = self._visitedLinkStore;
263 configuration._relatedWebView = _relatedWebView.get().get();
264 configuration._alternateWebViewForNavigationGestures = _alternateWebViewForNavigationGestures.get().get();
265 configuration->_treatsSHA1SignedCertificatesAsInsecure = _treatsSHA1SignedCertificatesAsInsecure;
267 configuration._contentProviderRegistry = self._contentProviderRegistry;
270 configuration->_suppressesIncrementalRendering = self->_suppressesIncrementalRendering;
271 configuration.applicationNameForUserAgent = self.applicationNameForUserAgent;
273 configuration->_respectsImageOrientation = self->_respectsImageOrientation;
274 configuration->_printsBackgrounds = self->_printsBackgrounds;
275 configuration->_incrementalRenderingSuppressionTimeout = self->_incrementalRenderingSuppressionTimeout;
276 configuration->_allowsJavaScriptMarkup = self->_allowsJavaScriptMarkup;
277 configuration->_convertsPositionStyleOnCopy = self->_convertsPositionStyleOnCopy;
278 configuration->_allowsMetaRefresh = self->_allowsMetaRefresh;
279 configuration->_allowUniversalAccessFromFileURLs = self->_allowUniversalAccessFromFileURLs;
281 configuration->_invisibleAutoplayNotPermitted = self->_invisibleAutoplayNotPermitted;
282 configuration->_mediaDataLoadsAutomatically = self->_mediaDataLoadsAutomatically;
283 configuration->_attachmentElementEnabled = self->_attachmentElementEnabled;
284 configuration->_mediaTypesRequiringUserActionForPlayback = self->_mediaTypesRequiringUserActionForPlayback;
285 configuration->_mainContentUserGestureOverrideEnabled = self->_mainContentUserGestureOverrideEnabled;
286 configuration->_initialCapitalizationEnabled = self->_initialCapitalizationEnabled;
289 configuration->_allowsInlineMediaPlayback = self->_allowsInlineMediaPlayback;
290 configuration->_allowsInlineMediaPlaybackAfterFullscreen = self->_allowsInlineMediaPlaybackAfterFullscreen;
291 configuration->_inlineMediaPlaybackRequiresPlaysInlineAttribute = self->_inlineMediaPlaybackRequiresPlaysInlineAttribute;
292 configuration->_allowsPictureInPictureMediaPlayback = self->_allowsPictureInPictureMediaPlayback;
293 configuration->_alwaysRunsAtForegroundPriority = _alwaysRunsAtForegroundPriority;
294 configuration->_selectionGranularity = self->_selectionGranularity;
295 configuration->_ignoresViewportScaleLimits = self->_ignoresViewportScaleLimits;
298 configuration->_userInterfaceDirectionPolicy = self->_userInterfaceDirectionPolicy;
299 configuration->_showsURLsInToolTips = self->_showsURLsInToolTips;
300 configuration->_serviceControlsEnabled = self->_serviceControlsEnabled;
301 configuration->_imageControlsEnabled = self->_imageControlsEnabled;
302 configuration->_requiresUserActionForEditingControlsManager = self->_requiresUserActionForEditingControlsManager;
304 #if ENABLE(DATA_DETECTION) && PLATFORM(IOS)
305 configuration->_dataDetectorTypes = self->_dataDetectorTypes;
307 #if ENABLE(WIRELESS_TARGET_PLAYBACK)
308 configuration->_allowsAirPlayForMediaPlayback = self->_allowsAirPlayForMediaPlayback;
310 #if ENABLE(APPLE_PAY)
311 configuration->_applePayEnabled = self->_applePayEnabled;
314 return configuration;
317 - (WKProcessPool *)processPool
319 return _processPool.get([] { return adoptNS([[WKProcessPool alloc] init]); });
322 - (void)setProcessPool:(WKProcessPool *)processPool
324 _processPool.set(processPool);
327 - (WKPreferences *)preferences
329 return _preferences.get([] { return adoptNS([[WKPreferences alloc] init]); });
332 - (void)setPreferences:(WKPreferences *)preferences
334 _preferences.set(preferences);
337 - (WKUserContentController *)userContentController
339 return _userContentController.get([] { return adoptNS([[WKUserContentController alloc] init]); });
342 - (void)setUserContentController:(WKUserContentController *)userContentController
344 _userContentController.set(userContentController);
347 - (WKWebsiteDataStore *)websiteDataStore
349 return _websiteDataStore.get([] { return [WKWebsiteDataStore defaultDataStore]; });
352 - (void)setWebsiteDataStore:(WKWebsiteDataStore *)websiteDataStore
354 _websiteDataStore.set(websiteDataStore);
357 static NSString *defaultApplicationNameForUserAgent()
360 return [@"Mobile/" stringByAppendingString:[UIDevice currentDevice].buildVersion];
366 - (NSString *)applicationNameForUserAgent
368 return _applicationNameForUserAgent.get([] { return defaultApplicationNameForUserAgent(); });
371 - (void)setApplicationNameForUserAgent:(NSString *)applicationNameForUserAgent
373 _applicationNameForUserAgent.set(adoptNS([applicationNameForUserAgent copy]));
376 - (_WKVisitedLinkStore *)_visitedLinkStore
378 return _visitedLinkStore.get([] { return adoptNS([[_WKVisitedLinkStore alloc] init]); });
381 - (void)_setVisitedLinkStore:(_WKVisitedLinkStore *)visitedLinkStore
383 _visitedLinkStore.set(visitedLinkStore);
386 #pragma clang diagnostic push
387 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
389 - (_WKWebsiteDataStore *)_websiteDataStore
391 return self.websiteDataStore ? adoptNS([[_WKWebsiteDataStore alloc] initWithDataStore:self.websiteDataStore]).autorelease() : nullptr;
394 - (void)_setWebsiteDataStore:(_WKWebsiteDataStore *)websiteDataStore
396 self.websiteDataStore = websiteDataStore ? websiteDataStore->_dataStore.get() : nullptr;
399 -(_WKVisitedLinkProvider *)_visitedLinkProvider
401 return (_WKVisitedLinkProvider *)self._visitedLinkStore;
404 - (void)_setVisitedLinkProvider:(_WKVisitedLinkProvider *)_visitedLinkProvider
406 self._visitedLinkStore = _visitedLinkProvider;
409 #pragma clang diagnostic pop
412 - (WKWebViewContentProviderRegistry *)_contentProviderRegistry
414 return _contentProviderRegistry.get([] { return adoptNS([[WKWebViewContentProviderRegistry alloc] init]); });
417 - (void)_setContentProviderRegistry:(WKWebViewContentProviderRegistry *)registry
419 _contentProviderRegistry.set(registry);
425 if (!self.processPool)
426 [NSException raise:NSInvalidArgumentException format:@"configuration.processPool is nil"];
428 if (!self.preferences)
429 [NSException raise:NSInvalidArgumentException format:@"configuration.preferences is nil"];
431 if (!self.userContentController)
432 [NSException raise:NSInvalidArgumentException format:@"configuration.userContentController is nil"];
434 if (!self.websiteDataStore)
435 [NSException raise:NSInvalidArgumentException format:@"configuration.websiteDataStore is nil"];
437 if (!self._visitedLinkStore)
438 [NSException raise:NSInvalidArgumentException format:@"configuration._visitedLinkStore is nil"];
441 if (!self._contentProviderRegistry)
442 [NSException raise:NSInvalidArgumentException format:@"configuration._contentProviderRegistry is nil"];
448 @implementation WKWebViewConfiguration (WKPrivate)
450 - (WKWebView *)_relatedWebView
452 return _relatedWebView.getAutoreleased();
455 - (void)_setRelatedWebView:(WKWebView *)relatedWebView
457 _relatedWebView = relatedWebView;
460 - (WKWebView *)_alternateWebViewForNavigationGestures
462 return _alternateWebViewForNavigationGestures.getAutoreleased();
465 - (void)_setAlternateWebViewForNavigationGestures:(WKWebView *)alternateView
467 _alternateWebViewForNavigationGestures = alternateView;
470 - (NSString *)_groupIdentifier
472 return _groupIdentifier.get();
475 - (void)_setGroupIdentifier:(NSString *)groupIdentifier
477 _groupIdentifier = groupIdentifier;
480 - (BOOL)_treatsSHA1SignedCertificatesAsInsecure
482 return _treatsSHA1SignedCertificatesAsInsecure;
485 - (void)_setTreatsSHA1SignedCertificatesAsInsecure:(BOOL)insecure
487 _treatsSHA1SignedCertificatesAsInsecure = insecure;
490 - (BOOL)_respectsImageOrientation
492 return _respectsImageOrientation;
495 - (void)_setRespectsImageOrientation:(BOOL)respectsImageOrientation
497 _respectsImageOrientation = respectsImageOrientation;
500 - (BOOL)_printsBackgrounds
502 return _printsBackgrounds;
505 - (void)_setPrintsBackgrounds:(BOOL)printsBackgrounds
507 _printsBackgrounds = printsBackgrounds;
510 - (CGFloat)_incrementalRenderingSuppressionTimeout
512 return _incrementalRenderingSuppressionTimeout;
515 - (void)_setIncrementalRenderingSuppressionTimeout:(CGFloat)incrementalRenderingSuppressionTimeout
517 _incrementalRenderingSuppressionTimeout = incrementalRenderingSuppressionTimeout;
520 - (BOOL)_allowsJavaScriptMarkup
522 return _allowsJavaScriptMarkup;
525 - (void)_setAllowsJavaScriptMarkup:(BOOL)allowsJavaScriptMarkup
527 _allowsJavaScriptMarkup = allowsJavaScriptMarkup;
530 - (BOOL)_allowUniversalAccessFromFileURLs
532 return _allowUniversalAccessFromFileURLs;
535 - (void)_setAllowUniversalAccessFromFileURLs:(BOOL)allowUniversalAccessFromFileURLs
537 _allowUniversalAccessFromFileURLs = allowUniversalAccessFromFileURLs;
540 - (BOOL)_convertsPositionStyleOnCopy
542 return _convertsPositionStyleOnCopy;
545 - (void)_setConvertsPositionStyleOnCopy:(BOOL)convertsPositionStyleOnCopy
547 _convertsPositionStyleOnCopy = convertsPositionStyleOnCopy;
550 - (BOOL)_allowsMetaRefresh
552 return _allowsMetaRefresh;
555 - (void)_setAllowsMetaRefresh:(BOOL)allowsMetaRefresh
557 _allowsMetaRefresh = allowsMetaRefresh;
561 - (BOOL)_alwaysRunsAtForegroundPriority
563 return _alwaysRunsAtForegroundPriority;
566 - (void)_setAlwaysRunsAtForegroundPriority:(BOOL)alwaysRunsAtForegroundPriority
568 _alwaysRunsAtForegroundPriority = alwaysRunsAtForegroundPriority;
571 - (BOOL)_inlineMediaPlaybackRequiresPlaysInlineAttribute
573 return _inlineMediaPlaybackRequiresPlaysInlineAttribute;
576 - (void)_setInlineMediaPlaybackRequiresPlaysInlineAttribute:(BOOL)requires
578 _inlineMediaPlaybackRequiresPlaysInlineAttribute = requires;
581 - (BOOL)_allowsInlineMediaPlaybackAfterFullscreen
583 return _allowsInlineMediaPlaybackAfterFullscreen;
586 - (void)_setAllowsInlineMediaPlaybackAfterFullscreen:(BOOL)allows
588 _allowsInlineMediaPlaybackAfterFullscreen = allows;
590 #endif // PLATFORM(IOS)
592 - (BOOL)_invisibleAutoplayNotPermitted
594 return _invisibleAutoplayNotPermitted;
597 - (void)_setInvisibleAutoplayNotPermitted:(BOOL)notPermitted
599 _invisibleAutoplayNotPermitted = notPermitted;
602 - (BOOL)_mediaDataLoadsAutomatically
604 return _mediaDataLoadsAutomatically;
607 - (void)_setMediaDataLoadsAutomatically:(BOOL)mediaDataLoadsAutomatically
609 _mediaDataLoadsAutomatically = mediaDataLoadsAutomatically;
612 - (BOOL)_attachmentElementEnabled
614 return _attachmentElementEnabled;
617 - (void)_setAttachmentElementEnabled:(BOOL)attachmentElementEnabled
619 _attachmentElementEnabled = attachmentElementEnabled;
622 - (BOOL)_requiresUserActionForVideoPlayback
624 return self.mediaTypesRequiringUserActionForPlayback & WKAudiovisualMediaTypeVideo;
627 - (void)_setRequiresUserActionForVideoPlayback:(BOOL)requiresUserActionForVideoPlayback
629 if (requiresUserActionForVideoPlayback)
630 self.mediaTypesRequiringUserActionForPlayback |= WKAudiovisualMediaTypeVideo;
632 self.mediaTypesRequiringUserActionForPlayback &= ~WKAudiovisualMediaTypeVideo;
635 - (BOOL)_requiresUserActionForAudioPlayback
637 return self.mediaTypesRequiringUserActionForPlayback & WKAudiovisualMediaTypeAudio;
640 - (void)_setRequiresUserActionForAudioPlayback:(BOOL)requiresUserActionForAudioPlayback
642 if (requiresUserActionForAudioPlayback)
643 self.mediaTypesRequiringUserActionForPlayback |= WKAudiovisualMediaTypeAudio;
645 self.mediaTypesRequiringUserActionForPlayback &= ~WKAudiovisualMediaTypeAudio;
648 - (BOOL)_mainContentUserGestureOverrideEnabled
650 return _mainContentUserGestureOverrideEnabled;
653 - (void)_setMainContentUserGestureOverrideEnabled:(BOOL)mainContentUserGestureOverrideEnabled
655 _mainContentUserGestureOverrideEnabled = mainContentUserGestureOverrideEnabled;
658 - (BOOL)_initialCapitalizationEnabled
660 return _initialCapitalizationEnabled;
663 - (void)_setInitialCapitalizationEnabled:(BOOL)initialCapitalizationEnabled
665 _initialCapitalizationEnabled = initialCapitalizationEnabled;
669 - (BOOL)_showsURLsInToolTips
671 return _showsURLsInToolTips;
674 - (void)_setShowsURLsInToolTips:(BOOL)showsURLsInToolTips
676 _showsURLsInToolTips = showsURLsInToolTips;
679 - (BOOL)_serviceControlsEnabled
681 return _serviceControlsEnabled;
684 - (void)_setServiceControlsEnabled:(BOOL)serviceControlsEnabled
686 _serviceControlsEnabled = serviceControlsEnabled;
689 - (BOOL)_imageControlsEnabled
691 return _imageControlsEnabled;
694 - (void)_setImageControlsEnabled:(BOOL)imageControlsEnabled
696 _imageControlsEnabled = imageControlsEnabled;
699 - (BOOL)_requiresUserActionForEditingControlsManager
701 return _requiresUserActionForEditingControlsManager;
704 - (void)_setRequiresUserActionForEditingControlsManager:(BOOL)requiresUserAction
706 _requiresUserActionForEditingControlsManager = requiresUserAction;
709 #endif // PLATFORM(MAC)
711 - (BOOL)_applePayEnabled
713 #if ENABLE(APPLE_PAY)
714 return _applePayEnabled;
720 - (void)_setApplePayEnabled:(BOOL)applePayEnabled
722 #if ENABLE(APPLE_PAY)
723 _applePayEnabled = applePayEnabled;
729 @implementation WKWebViewConfiguration (WKDeprecated)
732 - (BOOL)mediaPlaybackAllowsAirPlay
734 return self.allowsAirPlayForMediaPlayback;
737 - (void)setMediaPlaybackAllowsAirPlay:(BOOL)allowed
739 self.allowsAirPlayForMediaPlayback = allowed;
742 - (BOOL)mediaPlaybackRequiresUserAction
744 return self.requiresUserActionForMediaPlayback;
747 - (void)setMediaPlaybackRequiresUserAction:(BOOL)required
749 self.requiresUserActionForMediaPlayback = required;
752 - (BOOL)requiresUserActionForMediaPlayback
754 return self.mediaTypesRequiringUserActionForPlayback == WKAudiovisualMediaTypeAll;
757 - (void)setRequiresUserActionForMediaPlayback:(BOOL)requiresUserActionForMediaPlayback
759 self.mediaTypesRequiringUserActionForPlayback = requiresUserActionForMediaPlayback ? WKAudiovisualMediaTypeAll : WKAudiovisualMediaTypeNone;
762 #endif // PLATFORM(IOS)
766 #endif // WK_API_ENABLED