Diff
Modified: trunk/Source/WebCore/ChangeLog (197967 => 197968)
--- trunk/Source/WebCore/ChangeLog 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebCore/ChangeLog 2016-03-11 00:34:57 UTC (rev 197968)
@@ -1,3 +1,15 @@
+2016-03-10 Jer Noble <jer.no...@apple.com>
+
+ Add WebCore, WebKit, & WebKit2 preference/setting to enable Main Content heuristic.
+ https://bugs.webkit.org/show_bug.cgi?id=155326
+ <rdar://problem/25095408>
+
+ Reviewed by Beth Dakin.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::HTMLMediaElement): Set the OverrideUserGestureRequirementForMainContent if the new setting is enabled.
+ * page/Settings.in:
+
2016-03-10 Said Abou-Hallawa <sabouhall...@apple.com>
REGRESSION: GuardMallloc crash in SVGListPropertyTearOff<SVGPointList>::processIncomingListItemWrapper
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (197967 => 197968)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-03-11 00:34:57 UTC (rev 197968)
@@ -450,6 +450,9 @@
m_captionDisplayMode = document.page()->group().captionPreferences().captionDisplayMode();
#endif
+ if (settings && settings->mainContentUserGestureOverrideEnabled())
+ m_mediaSession->addBehaviorRestriction(MediaElementSession::OverrideUserGestureRequirementForMainContent);
+
#if ENABLE(MEDIA_SESSION)
m_elementID = nextElementID();
elementIDsToElements().add(m_elementID, this);
Modified: trunk/Source/WebCore/page/Settings.in (197967 => 197968)
--- trunk/Source/WebCore/page/Settings.in 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebCore/page/Settings.in 2016-03-11 00:34:57 UTC (rev 197968)
@@ -127,6 +127,7 @@
allowRunningOfInsecureContent initial=false
videoPlaybackRequiresUserGesture initial=defaultVideoPlaybackRequiresUserGesture
audioPlaybackRequiresUserGesture initial=defaultAudioPlaybackRequiresUserGesture
+mainContentUserGestureOverrideEnabled initial=false
allowsInlineMediaPlayback initial=defaultAllowsInlineMediaPlayback
inlineMediaPlaybackRequiresPlaysInlineAttribute initial=defaultInlineMediaPlaybackRequiresPlaysInlineAttribute
allowsPictureInPictureMediaPlayback initial=defaultAllowsPictureInPictureMediaPlayback
Modified: trunk/Source/WebKit/mac/ChangeLog (197967 => 197968)
--- trunk/Source/WebKit/mac/ChangeLog 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit/mac/ChangeLog 2016-03-11 00:34:57 UTC (rev 197968)
@@ -1,3 +1,21 @@
+2016-03-10 Jer Noble <jer.no...@apple.com>
+
+ Add WebCore, WebKit, & WebKit2 preference/setting to enable Main Content heuristic.
+ https://bugs.webkit.org/show_bug.cgi?id=155326
+ <rdar://problem/25095408>
+
+ Reviewed by Beth Dakin.
+
+ Add SPI to get and set the new preference.
+
+ * WebView/WebPreferenceKeysPrivate.h:
+ * WebView/WebPreferences.mm:
+ (-[WebPreferences overrideUserGestureRequirementForMainContent]):
+ (-[WebPreferences setOverrideUserGestureRequirementForMainContent:]):
+ * WebView/WebPreferencesPrivate.h:
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChanged:]):
+
2016-03-07 Jer Noble <jer.no...@apple.com>
Add separate WK and WK2 preferences for requiring user gestures for video media, distinct from user gestures for media generally
Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (197967 => 197968)
--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2016-03-11 00:34:57 UTC (rev 197968)
@@ -124,6 +124,7 @@
#define WebKitRequiresUserGestureForMediaPlaybackPreferenceKey @"WebKitMediaPlaybackRequiresUserGesture"
#define WebKitRequiresUserGestureForVideoPlaybackPreferenceKey @"WebKitVideoPlaybackRequiresUserGesture"
#define WebKitRequiresUserGestureForAudioPlaybackPreferenceKey @"WebKitAudioPlaybackRequiresUserGesture"
+#define WebKitMainContentUserGestureOverrideEnabledPreferenceKey @"WebKitMainContentUserGestureOverrideEnabled"
#define WebKitAllowsInlineMediaPlaybackPreferenceKey @"WebKitMediaPlaybackAllowsInline"
#define WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey @"InlineMediaPlaybackRequiresPlaysInlineAttribute"
#define WebKitInvisibleAutoplayNotPermittedKey @"InvisibleAutoplayNotPermitted"
Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (197967 => 197968)
--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2016-03-11 00:34:57 UTC (rev 197968)
@@ -2248,6 +2248,16 @@
[self _setBoolValue:flag forKey:WebKitRequiresUserGestureForAudioPlaybackPreferenceKey];
}
+- (BOOL)overrideUserGestureRequirementForMainContent
+{
+ return [self _boolValueForKey:WebKitMainContentUserGestureOverrideEnabledPreferenceKey];
+}
+
+- (void)setOverrideUserGestureRequirementForMainContent:(BOOL)flag
+{
+ [self _setBoolValue:flag forKey:WebKitMainContentUserGestureOverrideEnabledPreferenceKey];
+}
+
- (BOOL)mediaPlaybackAllowsInline
{
return [self _boolValueForKey:WebKitAllowsInlineMediaPlaybackPreferenceKey];
Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (197967 => 197968)
--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2016-03-11 00:34:57 UTC (rev 197968)
@@ -259,6 +259,9 @@
- (void)setAudioPlaybackRequiresUserGesture:(BOOL)flag;
- (BOOL)audioPlaybackRequiresUserGesture;
+- (void)setOverrideUserGestureRequirementForMainContent:(BOOL)flag;
+- (BOOL)overrideUserGestureRequirementForMainContent;
+
- (void)setMediaPlaybackAllowsInline:(BOOL)flag;
- (BOOL)mediaPlaybackAllowsInline;
Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (197967 => 197968)
--- trunk/Source/WebKit/mac/WebView/WebView.mm 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm 2016-03-11 00:34:57 UTC (rev 197968)
@@ -2334,6 +2334,7 @@
BOOL mediaPlaybackRequiresUserGesture = [preferences mediaPlaybackRequiresUserGesture];
settings.setVideoPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture || [preferences videoPlaybackRequiresUserGesture]);
settings.setAudioPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture || [preferences audioPlaybackRequiresUserGesture]);
+ settings.setMainContentUserGestureOverrideEnabled([preferences overrideUserGestureRequirementForMainContent]);
settings.setAllowsInlineMediaPlayback([preferences mediaPlaybackAllowsInline]);
settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute([preferences inlineMediaPlaybackRequiresPlaysInlineAttribute]);
settings.setInvisibleAutoplayNotPermitted([preferences invisibleAutoplayNotPermitted]);
Modified: trunk/Source/WebKit2/ChangeLog (197967 => 197968)
--- trunk/Source/WebKit2/ChangeLog 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/ChangeLog 2016-03-11 00:34:57 UTC (rev 197968)
@@ -1,3 +1,29 @@
+2016-03-10 Jer Noble <jer.no...@apple.com>
+
+ Add WebCore, WebKit, & WebKit2 preference/setting to enable Main Content heuristic.
+ https://bugs.webkit.org/show_bug.cgi?id=155326
+ <rdar://problem/25095408>
+
+ Reviewed by Beth Dakin.
+
+ Add SPI to get and set the new preference.
+
+ * Shared/WebPreferencesDefinitions.h:
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetMainContentUserGestureOverrideEnabled):
+ (WKPreferencesGetMainContentUserGestureOverrideEnabled):
+ * UIProcess/API/C/WKPreferencesRefPrivate.h:
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]):
+ * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
+ (-[WKWebViewConfiguration init]):
+ (-[WKWebViewConfiguration copyWithZone:]):
+ (-[WKWebViewConfiguration _mainContentUserGestureOverrideEnabled]):
+ (-[WKWebViewConfiguration _setMainContentUserGestureOverrideEnabled:]):
+ * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updatePreferences):
+
2016-03-10 Alex Christensen <achristen...@webkit.org>
Remove firing assertion after r197865.
Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (197967 => 197968)
--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2016-03-11 00:34:57 UTC (rev 197968)
@@ -151,6 +151,7 @@
macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK) \
macro(RequiresUserGestureForVideoPlayback, requiresUserGestureForVideoPlayback, Bool, bool, false) \
macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, false) \
+ 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) \
macro(InvisibleAutoplayNotPermitted, invisibleAutoplayNotPermitted, Bool, bool, DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED) \
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (197967 => 197968)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp 2016-03-11 00:34:57 UTC (rev 197968)
@@ -778,6 +778,16 @@
return toImpl(preferencesRef)->requiresUserGestureForAudioPlayback();
}
+void WKPreferencesSetMainContentUserGestureOverrideEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+ toImpl(preferencesRef)->setMainContentUserGestureOverrideEnabled(flag);
+}
+
+bool WKPreferencesGetMainContentUserGestureOverrideEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->mainContentUserGestureOverrideEnabled();
+}
+
void WKPreferencesSetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef, bool flag)
{
toImpl(preferencesRef)->setAllowsInlineMediaPlayback(flag);
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h (197967 => 197968)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h 2016-03-11 00:34:57 UTC (rev 197968)
@@ -185,6 +185,10 @@
WK_EXPORT void WKPreferencesSetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef, bool flag);
WK_EXPORT bool WKPreferencesGetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef);
+// Defaults to false.
+WK_EXPORT void WKPreferencesSetMainContentUserGestureOverrideEnabled(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetMainContentUserGestureOverrideEnabled(WKPreferencesRef preferencesRef);
+
// Defaults to true.
WK_EXPORT void WKPreferencesSetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef, bool flag);
WK_EXPORT bool WKPreferencesGetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef);
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (197967 => 197968)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2016-03-11 00:34:57 UTC (rev 197968)
@@ -405,6 +405,7 @@
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForVideoPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration _requiresUserActionForVideoPlayback]));
pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForAudioPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration _requiresUserActionForAudioPlayback]));
+ 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.mm (197967 => 197968)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2016-03-11 00:34:57 UTC (rev 197968)
@@ -110,6 +110,7 @@
BOOL _mediaDataLoadsAutomatically;
BOOL _requiresUserActionForVideoPlayback;
BOOL _requiresUserActionForAudioPlayback;
+ BOOL _mainContentUserGestureOverrideEnabled;
#if PLATFORM(MAC)
BOOL _showsURLsInToolTips;
@@ -138,6 +139,7 @@
#endif
_requiresUserActionForVideoPlayback = NO;
_requiresUserActionForAudioPlayback = NO;
+ _mainContentUserGestureOverrideEnabled = NO;
_invisibleAutoplayNotPermitted = NO;
#if PLATFORM(IOS)
@@ -249,6 +251,7 @@
configuration->_mediaDataLoadsAutomatically = self->_mediaDataLoadsAutomatically;
configuration->_requiresUserActionForVideoPlayback = self->_requiresUserActionForVideoPlayback;
configuration->_requiresUserActionForAudioPlayback = self->_requiresUserActionForAudioPlayback;
+ configuration->_mainContentUserGestureOverrideEnabled = self->_mainContentUserGestureOverrideEnabled;
#if PLATFORM(IOS)
configuration->_allowsInlineMediaPlayback = self->_allowsInlineMediaPlayback;
@@ -582,6 +585,16 @@
_requiresUserActionForAudioPlayback = requiresUserActionForAudioPlayback;
}
+- (BOOL)_mainContentUserGestureOverrideEnabled
+{
+ return _mainContentUserGestureOverrideEnabled;
+}
+
+- (void)_setMainContentUserGestureOverrideEnabled:(BOOL)mainContentUserGestureOverrideEnabled
+{
+ _mainContentUserGestureOverrideEnabled = mainContentUserGestureOverrideEnabled;
+}
+
#if PLATFORM(MAC)
- (BOOL)_showsURLsInToolTips
{
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h (197967 => 197968)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h 2016-03-11 00:34:57 UTC (rev 197968)
@@ -52,6 +52,7 @@
@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);
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (197967 => 197968)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2016-03-11 00:32:51 UTC (rev 197967)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2016-03-11 00:34:57 UTC (rev 197968)
@@ -2898,6 +2898,7 @@
bool requiresUserGestureForMedia = store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForMediaPlaybackKey());
settings.setVideoPlaybackRequiresUserGesture(requiresUserGestureForMedia || store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForVideoPlaybackKey()));
settings.setAudioPlaybackRequiresUserGesture(requiresUserGestureForMedia || store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForAudioPlaybackKey()));
+ settings.setMainContentUserGestureOverrideEnabled(store.getBoolValueForKey(WebPreferencesKey::mainContentUserGestureOverrideEnabledKey()));
settings.setAllowsInlineMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackKey()));
settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey()));
settings.setInvisibleAutoplayNotPermitted(store.getBoolValueForKey(WebPreferencesKey::invisibleAutoplayNotPermittedKey()));