Diff
Modified: trunk/Source/WebKit2/ChangeLog (200950 => 200951)
--- trunk/Source/WebKit2/ChangeLog 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/ChangeLog 2016-05-16 18:23:22 UTC (rev 200951)
@@ -1,3 +1,30 @@
+2016-04-06 Jer Noble <jer.no...@apple.com>
+
+ [WK2] Add API to WKWebViewConfiguration to control autoplay policy.
+ https://bugs.webkit.org/show_bug.cgi?id=156312
+
+ Reviewed by Dan Bernstein.
+
+ Add a new API to WKWebViewConfiguration to allow fine-grained control over when media is allowed
+ to play without a user gesture, and simultaneously deprecate the existing, all-or-nothing API,
+ and deprecated the equivalent SPIs.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]):
+ * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
+ * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
+ (-[WKWebViewConfiguration init]):
+ (-[WKWebViewConfiguration encodeWithCoder:]):
+ (-[WKWebViewConfiguration initWithCoder:]):
+ (-[WKWebViewConfiguration copyWithZone:]):
+ (-[WKWebViewConfiguration _requiresUserActionForVideoPlayback]):
+ (-[WKWebViewConfiguration _setRequiresUserActionForVideoPlayback:]):
+ (-[WKWebViewConfiguration _requiresUserActionForAudioPlayback]):
+ (-[WKWebViewConfiguration _setRequiresUserActionForAudioPlayback:]):
+ (-[WKWebViewConfiguration requiresUserActionForMediaPlayback]):
+ (-[WKWebViewConfiguration setRequiresUserActionForMediaPlayback:]):
+ * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
+
2016-05-16 Brian Burg <bb...@apple.com>
Web Automation: WebAutomationSessionProxy.js gets injected more than once sometimes
Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (200950 => 200951)
--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2016-05-16 18:23:22 UTC (rev 200951)
@@ -74,7 +74,6 @@
#define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE true
#define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED true
#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY false
-#define DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK true
#define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM false
#define DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED false
#else
@@ -89,7 +88,6 @@
#define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE false
#define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED false
#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY true
-#define DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK false
#define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM true
#define DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED true
#endif
@@ -150,9 +148,9 @@
macro(AllowFileAccessFromFileURLs, allowFileAccessFromFileURLs, Bool, bool, false, "", "") \
macro(AVFoundationEnabled, isAVFoundationEnabled, Bool, bool, true, "", "") \
macro(AVFoundationNSURLSessionEnabled, isAVFoundationNSURLSessionEnabled, Bool, bool, true, "", "") \
- macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK, "", "") \
+ macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, false, "", "") \
macro(RequiresUserGestureForVideoPlayback, requiresUserGestureForVideoPlayback, Bool, bool, false, "", "") \
- macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, false, "", "") \
+ macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, true, "", "") \
macro(MainContentUserGestureOverrideEnabled, mainContentUserGestureOverrideEnabled, Bool, bool, false, "", "") \
macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK, "", "") \
macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE, "", "") \
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (200950 => 200951)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-05-16 18:23:22 UTC (rev 200951)
@@ -457,13 +457,13 @@
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsInlineMediaPlayback]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _inlineMediaPlaybackRequiresPlaysInlineAttribute]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback()));
- pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration requiresUserActionForMediaPlayback]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::userInterfaceDirectionPolicyKey(), WebKit::WebPreferencesStore::Value(static_cast<uint32_t>(WebCore::UserInterfaceDirectionPolicy::Content)));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::systemLayoutDirectionKey(), WebKit::WebPreferencesStore::Value(static_cast<uint32_t>(WebCore::LTR)));
#endif
- pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForVideoPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration _requiresUserActionForVideoPlayback]));
- pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForAudioPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration _requiresUserActionForAudioPlayback]));
+ WKAudiovisualMediaTypes mediaTypesRequiringUserGesture = [_configuration mediaTypesRequiringUserActionForPlayback];
+ pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForVideoPlaybackKey(), WebKit::WebPreferencesStore::Value((mediaTypesRequiringUserGesture & WKAudiovisualMediaTypeVideo) == WKAudiovisualMediaTypeVideo));
+ pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForAudioPlaybackKey(), WebKit::WebPreferencesStore::Value(((mediaTypesRequiringUserGesture & WKAudiovisualMediaTypeAudio) == WKAudiovisualMediaTypeAudio)));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::mainContentUserGestureOverrideEnabledKey(), WebKit::WebPreferencesStore::Value(!![_configuration _mainContentUserGestureOverrideEnabled]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::invisibleAutoplayNotPermittedKey(), WebKit::WebPreferencesStore::Value(!![_configuration _invisibleAutoplayNotPermitted]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::mediaDataLoadsAutomaticallyKey(), WebKit::WebPreferencesStore::Value(!![_configuration _mediaDataLoadsAutomatically]));
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h (200950 => 200951)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h 2016-05-16 18:23:22 UTC (rev 200951)
@@ -95,6 +95,20 @@
#endif
+/*! @enum WKAudiovisualMediaTypes
+ @abstract The types of audiovisual media which will require a user gesture to begin playing.
+ @constant WKAudiovisualMediaTypeNone No audiovisual media will require a user gesture to begin playing.
+ @constant WKAudiovisualMediaTypeAudio Audiovisual media containing audio will require a user gesture to begin playing.
+ @constant WKAudiovisualMediaTypeVideo Audiovisual media containing video will require a user gesture to begin playing.
+ @constant WKAudiovisualMediaTypeAll All audiovisual media will require a user gesture to begin playing.
+*/
+typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) {
+ WKAudiovisualMediaTypeNone = 0,
+ WKAudiovisualMediaTypeAudio = 1 << 0,
+ WKAudiovisualMediaTypeVideo = 1 << 1,
+ WKAudiovisualMediaTypeAll = NSUIntegerMax
+} WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+
/*! A WKWebViewConfiguration object is a collection of properties with
which to initialize a web view.
@helps Contains properties used to configure a @link WKWebView @/link.
@@ -137,6 +151,8 @@
*/
@property (nonatomic) BOOL allowsAirPlayForMediaPlayback WK_AVAILABLE(10_11, 9_0);
+@property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+
#if TARGET_OS_IPHONE
/*! @abstract A Boolean value indicating whether HTML5 videos play inline
(YES) or use the native full-screen controller (NO).
@@ -144,12 +160,6 @@
*/
@property (nonatomic) BOOL allowsInlineMediaPlayback;
-/*! @abstract A Boolean value indicating whether HTML5 videos require the
- user to start playing them (YES) or can play automatically (NO).
- @discussion The default value is YES.
- */
-@property (nonatomic) BOOL requiresUserActionForMediaPlayback WK_AVAILABLE(NA, 9_0);
-
/*! @abstract The level of granularity with which the user can interactively
select content in the web view.
@discussion Possible values are described in WKSelectionGranularity.
@@ -189,6 +199,7 @@
#if TARGET_OS_IPHONE
@property (nonatomic) BOOL mediaPlaybackRequiresUserAction WK_DEPRECATED(NA, NA, 8_0, 9_0, "Please use requiresUserActionForMediaPlayback");
@property (nonatomic) BOOL mediaPlaybackAllowsAirPlay WK_DEPRECATED(NA, NA, 8_0, 9_0, "Please use allowsAirPlayForMediaPlayback");
+@property (nonatomic) BOOL requiresUserActionForMediaPlayback WK_DEPRECATED(NA, NA, 9_0, 10_0, "Please use mediaTypesRequiringUserActionForPlayback");
#endif
@end
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm (200950 => 200951)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2016-05-16 18:23:22 UTC (rev 200951)
@@ -29,6 +29,7 @@
#if WK_API_ENABLED
#import "APIPageConfiguration.h"
+#import "VersionChecks.h"
#import "WKPreferences.h"
#import "WKProcessPool.h"
#import "WKUserContentController.h"
@@ -112,8 +113,6 @@
BOOL _invisibleAutoplayNotPermitted;
BOOL _mediaDataLoadsAutomatically;
BOOL _attachmentElementEnabled;
- BOOL _requiresUserActionForVideoPlayback;
- BOOL _requiresUserActionForAudioPlayback;
BOOL _mainContentUserGestureOverrideEnabled;
#if PLATFORM(MAC)
@@ -133,7 +132,6 @@
return nil;
#if PLATFORM(IOS)
- _requiresUserActionForMediaPlayback = YES;
_allowsPictureInPictureMediaPlayback = YES;
_allowsInlineMediaPlayback = WebCore::deviceClass() == MGDeviceClassiPad;
_inlineMediaPlaybackRequiresPlaysInlineAttribute = !_allowsInlineMediaPlayback;
@@ -142,8 +140,10 @@
_mediaDataLoadsAutomatically = YES;
_userInterfaceDirectionPolicy = WKUserInterfaceDirectionPolicyContent;
#endif
- _requiresUserActionForVideoPlayback = NO;
- _requiresUserActionForAudioPlayback = NO;
+ if (linkedOnOrAfter(WebKit::LibraryVersion::FirstWithMediaTypesRequiringUserActionForPlayback))
+ _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAudio;
+ else
+ _mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll;
_mainContentUserGestureOverrideEnabled = NO;
_invisibleAutoplayNotPermitted = NO;
@@ -202,7 +202,7 @@
#if PLATFORM(IOS)
[coder encodeInteger:self.dataDetectorTypes forKey:@"dataDetectorTypes"];
[coder encodeBool:self.allowsInlineMediaPlayback forKey:@"allowsInlineMediaPlayback"];
- [coder encodeBool:self.requiresUserActionForMediaPlayback forKey:@"requiresUserActionForMediaPlayback"];
+ [coder encodeBool:self.mediaTypesRequiringUserActionForPlayback forKey:@"mediaTypesRequiringUserActionForPlayback"];
[coder encodeInteger:self.selectionGranularity forKey:@"selectionGranularity"];
[coder encodeBool:self.allowsPictureInPictureMediaPlayback forKey:@"allowsPictureInPictureMediaPlayback"];
#else
@@ -227,7 +227,7 @@
#if PLATFORM(IOS)
self.dataDetectorTypes = [coder decodeIntegerForKey:@"dataDetectorTypes"];
self.allowsInlineMediaPlayback = [coder decodeBoolForKey:@"allowsInlineMediaPlayback"];
- self.requiresUserActionForMediaPlayback = [coder decodeBoolForKey:@"requiresUserActionForMediaPlayback"];
+ self.mediaTypesRequiringUserActionForPlayback = [coder decodeBoolForKey:@"mediaTypesRequiringUserActionForPlayback"];
self.selectionGranularity = static_cast<WKSelectionGranularity>([coder decodeIntegerForKey:@"selectionGranularity"]);
self.allowsPictureInPictureMediaPlayback = [coder decodeBoolForKey:@"allowsPictureInPictureMediaPlayback"];
#else
@@ -269,14 +269,12 @@
configuration->_invisibleAutoplayNotPermitted = self->_invisibleAutoplayNotPermitted;
configuration->_mediaDataLoadsAutomatically = self->_mediaDataLoadsAutomatically;
configuration->_attachmentElementEnabled = self->_attachmentElementEnabled;
- configuration->_requiresUserActionForVideoPlayback = self->_requiresUserActionForVideoPlayback;
- configuration->_requiresUserActionForAudioPlayback = self->_requiresUserActionForAudioPlayback;
+ configuration->_mediaTypesRequiringUserActionForPlayback = self->_mediaTypesRequiringUserActionForPlayback;
configuration->_mainContentUserGestureOverrideEnabled = self->_mainContentUserGestureOverrideEnabled;
#if PLATFORM(IOS)
configuration->_allowsInlineMediaPlayback = self->_allowsInlineMediaPlayback;
configuration->_inlineMediaPlaybackRequiresPlaysInlineAttribute = self->_inlineMediaPlaybackRequiresPlaysInlineAttribute;
- configuration->_requiresUserActionForMediaPlayback = self->_requiresUserActionForMediaPlayback;
configuration->_allowsPictureInPictureMediaPlayback = self->_allowsPictureInPictureMediaPlayback;
configuration->_alwaysRunsAtForegroundPriority = _alwaysRunsAtForegroundPriority;
configuration->_selectionGranularity = self->_selectionGranularity;
@@ -598,22 +596,28 @@
- (BOOL)_requiresUserActionForVideoPlayback
{
- return _requiresUserActionForVideoPlayback;
+ return self.mediaTypesRequiringUserActionForPlayback & WKAudiovisualMediaTypeVideo;
}
- (void)_setRequiresUserActionForVideoPlayback:(BOOL)requiresUserActionForVideoPlayback
{
- _requiresUserActionForVideoPlayback = requiresUserActionForVideoPlayback;
+ if (requiresUserActionForVideoPlayback)
+ self.mediaTypesRequiringUserActionForPlayback |= WKAudiovisualMediaTypeVideo;
+ else
+ self.mediaTypesRequiringUserActionForPlayback &= ~WKAudiovisualMediaTypeVideo;
}
- (BOOL)_requiresUserActionForAudioPlayback
{
- return _requiresUserActionForAudioPlayback;
+ return self.mediaTypesRequiringUserActionForPlayback & WKAudiovisualMediaTypeAudio;
}
- (void)_setRequiresUserActionForAudioPlayback:(BOOL)requiresUserActionForAudioPlayback
{
- _requiresUserActionForAudioPlayback = requiresUserActionForAudioPlayback;
+ if (requiresUserActionForAudioPlayback)
+ self.mediaTypesRequiringUserActionForPlayback |= WKAudiovisualMediaTypeAudio;
+ else
+ self.mediaTypesRequiringUserActionForPlayback &= ~WKAudiovisualMediaTypeAudio;
}
- (BOOL)_mainContentUserGestureOverrideEnabled
@@ -686,6 +690,17 @@
{
self.requiresUserActionForMediaPlayback = required;
}
+
+- (BOOL)requiresUserActionForMediaPlayback
+{
+ return self.mediaTypesRequiringUserActionForPlayback == WKAudiovisualMediaTypeAll;
+}
+
+- (void)setRequiresUserActionForMediaPlayback:(BOOL)requiresUserActionForMediaPlayback
+{
+ self.mediaTypesRequiringUserActionForPlayback = requiresUserActionForMediaPlayback ? WKAudiovisualMediaTypeAll : WKAudiovisualMediaTypeNone;
+}
+
#endif // PLATFORM(IOS)
@end
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h (200950 => 200951)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h 2016-05-16 18:23:22 UTC (rev 200951)
@@ -50,8 +50,6 @@
@property (nonatomic, setter=_setConvertsPositionStyleOnCopy:) BOOL _convertsPositionStyleOnCopy WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@property (nonatomic, setter=_setAllowsMetaRefresh:) BOOL _allowsMetaRefresh WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@property (nonatomic, setter=_setAllowUniversalAccessFromFileURLs:) BOOL _allowUniversalAccessFromFileURLs WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
-@property (nonatomic, setter=_setRequiresUserActionForAudioPlayback:) BOOL _requiresUserActionForAudioPlayback WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
-@property (nonatomic, setter=_setRequiresUserActionForVideoPlayback:) BOOL _requiresUserActionForVideoPlayback WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@property (nonatomic, setter=_setMainContentUserGestureOverrideEnabled:) BOOL _mainContentUserGestureOverrideEnabled WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@property (nonatomic, setter=_setInvisibleAutoplayNotPermitted:) BOOL _invisibleAutoplayNotPermitted WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@property (nonatomic, setter=_setMediaDataLoadsAutomatically:) BOOL _mediaDataLoadsAutomatically WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
@@ -69,6 +67,8 @@
@property (nonatomic, strong, setter=_setVisitedLinkProvider:) _WKVisitedLinkProvider *_visitedLinkProvider WK_DEPRECATED(10_10, WK_MAC_TBA, 8_0, WK_IOS_TBA, "Please use _visitedLinkStore instead");
@property (nonatomic, strong, setter=_setWebsiteDataStore:) _WKWebsiteDataStore *_websiteDataStore WK_DEPRECATED(10_10, 10_11, 8_0, 9_0, "Please use websiteDataStore instead");
+@property (nonatomic, setter=_setRequiresUserActionForAudioPlayback:) BOOL _requiresUserActionForAudioPlayback WK_DEPRECATED(WK_MAC_TBA, WK_MAC_TBA, WK_IOS_TBA, WK_IOS_TBA, "Please use mediaTypesRequiringUserActionForPlayback");
+@property (nonatomic, setter=_setRequiresUserActionForVideoPlayback:) BOOL _requiresUserActionForVideoPlayback WK_DEPRECATED(WK_MAC_TBA, WK_MAC_TBA, WK_IOS_TBA, WK_IOS_TBA, "Please use mediaTypesRequiringUserActionForPlayback");
@end
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h (200950 => 200951)
--- trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h 2016-05-16 18:23:22 UTC (rev 200951)
@@ -39,6 +39,7 @@
*/
enum class LibraryVersion {
FirstWithNetworkCache = 0x02590116, // 601.1.22
+ FirstWithMediaTypesRequiringUserActionForPlayback = 0x025A0121, // 602.1.33
};
bool linkedOnOrAfter(LibraryVersion);
Modified: trunk/Tools/ChangeLog (200950 => 200951)
--- trunk/Tools/ChangeLog 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Tools/ChangeLog 2016-05-16 18:23:22 UTC (rev 200951)
@@ -1,3 +1,15 @@
+2016-04-06 Jer Noble <jer.no...@apple.com>
+
+ [WK2] Add API to WKWebViewConfiguration to control autoplay policy.
+ https://bugs.webkit.org/show_bug.cgi?id=156312
+
+ Reviewed by Dan Bernstein.
+
+ * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+ (WTR::initializeWebViewConfiguration):
+ * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
+ (TEST_F):
+
2016-05-16 Brent Fulgham <bfulg...@apple.com>
REGRESSION (r192098): Content missing after copy and paste to Notes App on retina displays
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm (200950 => 200951)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm 2016-05-16 18:23:22 UTC (rev 200951)
@@ -77,7 +77,6 @@
#if TARGET_OS_IPHONE
configuration.get().allowsInlineMediaPlayback = YES;
configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO;
- configuration.get().requiresUserActionForMediaPlayback = NO;
#endif
}
@@ -169,6 +168,45 @@
TEST_F(RequiresUserActionForPlaybackTest, RequiresUserActionForAudioAndVideoPlayback)
{
+ configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAudio | WKAudiovisualMediaTypeVideo;
+ createWebView();
+
+ testVideoWithAudio();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+ testVideoWithoutAudio();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+ testAudioOnly();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+}
+
+TEST_F(RequiresUserActionForPlaybackTest, RequiresUserActionForAudioButNotVideoPlayback)
+{
+ configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAudio;
+ createWebView();
+
+ testVideoWithAudio();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+ testVideoWithoutAudio();
+ EXPECT_WK_STREQ(@"playing", (NSString *)[lastScriptMessage body]);
+ testAudioOnly();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+}
+
+TEST_F(RequiresUserActionForPlaybackTest, RequiresUserActionForVideoButNotAudioPlayback)
+{
+ configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeVideo;
+ createWebView();
+
+ testVideoWithAudio();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+ testVideoWithoutAudio();
+ EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
+ testAudioOnly();
+ EXPECT_WK_STREQ(@"playing", (NSString *)[lastScriptMessage body]);
+}
+
+TEST_F(RequiresUserActionForPlaybackTest, DeprecatedRequiresUserActionForAudioAndVideoPlayback)
+{
configuration.get()._requiresUserActionForAudioPlayback = YES;
configuration.get()._requiresUserActionForVideoPlayback = YES;
createWebView();
@@ -181,7 +219,7 @@
EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
}
-TEST_F(RequiresUserActionForPlaybackTest, RequiresUserActionForAudioButNotVideoPlayback)
+TEST_F(RequiresUserActionForPlaybackTest, DeprecatedRequiresUserActionForAudioButNotVideoPlayback)
{
configuration.get()._requiresUserActionForAudioPlayback = YES;
configuration.get()._requiresUserActionForVideoPlayback = NO;
@@ -195,7 +233,7 @@
EXPECT_WK_STREQ(@"not playing", (NSString *)[lastScriptMessage body]);
}
-TEST_F(RequiresUserActionForPlaybackTest, RequiresUserActionForVideoButNotAudioPlayback)
+TEST_F(RequiresUserActionForPlaybackTest, DeprecatedRequiresUserActionForVideoButNotAudioPlayback)
{
configuration.get()._requiresUserActionForAudioPlayback = NO;
configuration.get()._requiresUserActionForVideoPlayback = YES;
Modified: trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (200950 => 200951)
--- trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm 2016-05-16 18:09:46 UTC (rev 200950)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm 2016-05-16 18:23:22 UTC (rev 200951)
@@ -66,6 +66,7 @@
globalWebViewConfiguration._mediaDataLoadsAutomatically = YES;
globalWebViewConfiguration.requiresUserActionForMediaPlayback = NO;
#endif
+ globalWebViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
#endif
}