Title: [197968] trunk/Source
Revision
197968
Author
jer.no...@apple.com
Date
2016-03-10 16:34:57 -0800 (Thu, 10 Mar 2016)

Log Message

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.

Source/WebCore:

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::HTMLMediaElement): Set the OverrideUserGestureRequirementForMainContent if the new setting is enabled.
* page/Settings.in:

Source/WebKit/mac:

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:]):

Source/WebKit2:

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):

Modified Paths

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()));
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to