Changeset 192589 in webkit


Ignore:
Timestamp:
Nov 18, 2015 3:04:36 PM (9 years ago)
Author:
jer.noble@apple.com
Message:

Expose WebCore's AudioPlaybackRequiresUserGesture setting to WebKit & WebKit2
https://bugs.webkit.org/show_bug.cgi?id=151274

Reviewed by Anders Carlsson.

Source/WebKit/mac:

Add a WebKit preference key, WebKitAudioPlaybackRequiresUserGesture, and a matching WebPreference
property, and transfer those preferences to WebCore's settings when they change.

  • WebView/WebPreferenceKeysPrivate.h:
  • WebView/WebPreferences.mm:

(+[WebPreferences initialize]):
(-[WebPreferences audioPlaybackRequiresUserGesture]):
(-[WebPreferences setAudioPlaybackRequiresUserGesture:]):

  • WebView/WebPreferencesPrivate.h:
  • WebView/WebView.mm:

(-[WebView _preferencesChanged:]):

Source/WebKit2:

Add a new, private, WKWebViewConfiguration property, _requiresUserActionForAudioPlayback,
and use that configuration property to set WebCore's AudioPlaybackRequiresUserGesture setting
during page creation.

  • Shared/WebPreferencesDefinitions.h:
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetAudioPlaybackRequiresUserGesture): Add legacy C API for setting this new WK preference.
(WKPreferencesGetAudioPlaybackRequiresUserGesture): Ditto.

  • UIProcess/API/C/WKPreferencesRefPrivate.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView initWithFrame:configuration:]): Set the page configuration value from preferences.

  • UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

(-[WKWebViewConfiguration init]): Default the value of the new configuration property to YES for iOS.
(-[WKWebViewConfiguration copyWithZone:]): Copy the value across.
(-[WKWebViewConfiguration _requiresUserActionForAudioPlayback]): Simple getter.
(-[WKWebViewConfiguration _setRequiresUserActionForAudioPlayback:]): Simple setter.

  • UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::updatePreferences): Set WebCore's audioPlaybackRequiresUserGesture Setting.

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/mac/ChangeLog

    r192393 r192589  
     12015-11-18  Jer Noble  <jer.noble@apple.com>
     2
     3        Expose WebCore's AudioPlaybackRequiresUserGesture setting to WebKit & WebKit2
     4        https://bugs.webkit.org/show_bug.cgi?id=151274
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Add a WebKit preference key, WebKitAudioPlaybackRequiresUserGesture, and a matching WebPreference
     9        property, and transfer those preferences to WebCore's settings when they change.
     10
     11        * WebView/WebPreferenceKeysPrivate.h:
     12        * WebView/WebPreferences.mm:
     13        (+[WebPreferences initialize]):
     14        (-[WebPreferences audioPlaybackRequiresUserGesture]):
     15        (-[WebPreferences setAudioPlaybackRequiresUserGesture:]):
     16        * WebView/WebPreferencesPrivate.h:
     17        * WebView/WebView.mm:
     18        (-[WebView _preferencesChanged:]):
     19
    1202015-11-12  Anders Carlsson  <andersca@apple.com>
    221
  • trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h

    r189129 r192589  
    121121#define WebKitHixie76WebSocketProtocolEnabledKey @"WebKitHixie76WebSocketProtocolEnabled"
    122122#define WebKitRequiresUserGestureForMediaPlaybackPreferenceKey @"WebKitMediaPlaybackRequiresUserGesture"
     123#define WebKitRequiresUserGestureForAudioPlaybackPreferenceKey @"WebKitAudioPlaybackRequiresUserGesture"
    123124#define WebKitAllowsInlineMediaPlaybackPreferenceKey @"WebKitMediaPlaybackAllowsInline"
    124125#define WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey @"InlineMediaPlaybackRequiresPlaysInlineAttribute"
  • trunk/Source/WebKit/mac/WebView/WebPreferences.mm

    r191904 r192589  
    523523#if !PLATFORM(IOS)
    524524        [NSNumber numberWithBool:NO],   WebKitRequiresUserGestureForMediaPlaybackPreferenceKey,
     525        [NSNumber numberWithBool:NO],   WebKitRequiresUserGestureForAudioPlaybackPreferenceKey,
    525526        [NSNumber numberWithBool:YES],  WebKitAllowsInlineMediaPlaybackPreferenceKey,
    526527        [NSNumber numberWithBool:YES],  WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
     
    536537#else
    537538        [NSNumber numberWithBool:YES],  WebKitRequiresUserGestureForMediaPlaybackPreferenceKey,
     539        [NSNumber numberWithBool:YES],  WebKitRequiresUserGestureForAudioPlaybackPreferenceKey,
    538540        [NSNumber numberWithBool:allowsInlineMediaPlayback],   WebKitAllowsInlineMediaPlaybackPreferenceKey,
    539541        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
     
    21872189}
    21882190
     2191- (BOOL)audioPlaybackRequiresUserGesture
     2192{
     2193    return [self _boolValueForKey:WebKitRequiresUserGestureForAudioPlaybackPreferenceKey];
     2194}
     2195
     2196- (void)setAudioPlaybackRequiresUserGesture:(BOOL)flag
     2197{
     2198    [self _setBoolValue:flag forKey:WebKitRequiresUserGestureForAudioPlaybackPreferenceKey];
     2199}
     2200
    21892201- (BOOL)mediaPlaybackAllowsInline
    21902202{
  • trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h

    r190841 r192589  
    246246- (BOOL)mediaPlaybackRequiresUserGesture;
    247247
     248- (void)setAudioPlaybackRequiresUserGesture:(BOOL)flag;
     249- (BOOL)audioPlaybackRequiresUserGesture;
     250
    248251- (void)setMediaPlaybackAllowsInline:(BOOL)flag;
    249252- (BOOL)mediaPlaybackAllowsInline;
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r192200 r192589  
    23042304
    23052305    settings.setRequiresUserGestureForMediaPlayback([preferences mediaPlaybackRequiresUserGesture]);
     2306    settings.setAudioPlaybackRequiresUserGesture([preferences audioPlaybackRequiresUserGesture]);
    23062307    settings.setAllowsInlineMediaPlayback([preferences mediaPlaybackAllowsInline]);
    23072308    settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute([preferences inlineMediaPlaybackRequiresPlaysInlineAttribute]);
  • trunk/Source/WebKit2/ChangeLog

    r192583 r192589  
     12015-11-18  Jer Noble  <jer.noble@apple.com>
     2
     3        Expose WebCore's AudioPlaybackRequiresUserGesture setting to WebKit & WebKit2
     4        https://bugs.webkit.org/show_bug.cgi?id=151274
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Add a new, private, WKWebViewConfiguration property, _requiresUserActionForAudioPlayback,
     9        and use that configuration property to set WebCore's AudioPlaybackRequiresUserGesture setting
     10        during page creation.
     11
     12        * Shared/WebPreferencesDefinitions.h:
     13        * UIProcess/API/C/WKPreferences.cpp:
     14        (WKPreferencesSetAudioPlaybackRequiresUserGesture): Add legacy C API for setting this new WK preference.
     15        (WKPreferencesGetAudioPlaybackRequiresUserGesture): Ditto.
     16        * UIProcess/API/C/WKPreferencesRefPrivate.h:
     17        * UIProcess/API/Cocoa/WKWebView.mm:
     18        (-[WKWebView initWithFrame:configuration:]): Set the page configuration value from preferences.
     19        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
     20        (-[WKWebViewConfiguration init]): Default the value of the new configuration property to YES for iOS.
     21        (-[WKWebViewConfiguration copyWithZone:]): Copy the value across.
     22        (-[WKWebViewConfiguration _requiresUserActionForAudioPlayback]): Simple getter.
     23        (-[WKWebViewConfiguration _setRequiresUserActionForAudioPlayback:]): Simple setter.
     24        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
     25        * WebProcess/WebPage/WebPage.cpp:
     26        (WebKit::WebPage::updatePreferences): Set WebCore's audioPlaybackRequiresUserGesture Setting.
     27
    1282015-11-18  Daniel Bates  <dabates@apple.com>
    229
  • trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h

    r192093 r192589  
    6262#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY false
    6363#define DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK true
     64#define DEFAULT_REQUIRES_USER_GESTURE_FOR_AUDIO_PLAYBACK true
    6465#define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM false
    6566#define DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED false
     
    7778#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY true
    7879#define DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK false
     80#define DEFAULT_REQUIRES_USER_GESTURE_FOR_AUDIO_PLAYBACK false
    7981#define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM true
    8082#define DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED true
     
    139141    macro(AVFoundationEnabled, isAVFoundationEnabled, Bool, bool, true) \
    140142    macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK) \
     143    macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_AUDIO_PLAYBACK) \
    141144    macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK) \
    142145    macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE) \
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp

    r192093 r192589  
    749749}
    750750
     751void WKPreferencesSetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef, bool flag)
     752{
     753    toImpl(preferencesRef)->setRequiresUserGestureForAudioPlayback(flag);
     754}
     755
     756bool WKPreferencesGetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef)
     757{
     758    return toImpl(preferencesRef)->requiresUserGestureForAudioPlayback();
     759}
     760
    751761void WKPreferencesSetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef, bool flag)
    752762{
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h

    r192093 r192589  
    178178WK_EXPORT bool WKPreferencesGetMediaPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef);
    179179
     180// Defaults to false.
     181WK_EXPORT void WKPreferencesSetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef, bool flag);
     182WK_EXPORT bool WKPreferencesGetAudioPlaybackRequiresUserGesture(WKPreferencesRef preferencesRef);
     183
    180184// Defaults to true.
    181185WK_EXPORT void WKPreferencesSetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef, bool flag);
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r192447 r192589  
    361361    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback()));
    362362    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration requiresUserActionForMediaPlayback]));
     363    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForAudioPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration _requiresUserActionForAudioPlayback]));
    363364    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::mediaDataLoadsAutomaticallyKey(), WebKit::WebPreferencesStore::Value(!![_configuration _mediaDataLoadsAutomatically]));
    364365#endif
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm

    r192253 r192589  
    105105    BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute;
    106106    BOOL _mediaDataLoadsAutomatically;
     107    BOOL _requiresUserActionForAudioPlayback;
    107108#endif
    108109#if PLATFORM(MAC)
     
    120121#if PLATFORM(IOS)
    121122    _requiresUserActionForMediaPlayback = YES;
     123    _requiresUserActionForAudioPlayback = YES;
    122124    _allowsPictureInPictureMediaPlayback = YES;
    123125    _allowsInlineMediaPlayback = WebCore::deviceClass() == MGDeviceClassiPad;
     
    186188    configuration->_alwaysRunsAtForegroundPriority = _alwaysRunsAtForegroundPriority;
    187189    configuration->_requiresUserActionForMediaPlayback = self->_requiresUserActionForMediaPlayback;
     190    configuration->_requiresUserActionForAudioPlayback = self->_requiresUserActionForAudioPlayback;
    188191    configuration->_selectionGranularity = self->_selectionGranularity;
    189192#endif
     
    463466    _mediaDataLoadsAutomatically = mediaDataLoadsAutomatically;
    464467}
     468
     469- (BOOL)_requiresUserActionForAudioPlayback
     470{
     471    return _requiresUserActionForAudioPlayback;
     472}
     473
     474- (void)_setRequiresUserActionForAudioPlayback:(BOOL)requiresUserActionForAudioPlayback
     475{
     476    _requiresUserActionForAudioPlayback = requiresUserActionForAudioPlayback;
     477}
     478
    465479#endif // PLATFORM(IOS)
    466480
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h

    r192253 r192589  
    5454@property (nonatomic, setter=_setAlwaysRunsAtForegroundPriority:) BOOL _alwaysRunsAtForegroundPriority WK_AVAILABLE(NA, 9_0);
    5555
     56@property (nonatomic, setter=_setRequiresUserActionForAudioPlayback:) BOOL _requiresUserActionForAudioPlayback WK_AVAILABLE(NA, WK_IOS_TBA);
    5657@property (nonatomic, setter=_setInlineMediaPlaybackRequiresPlaysInlineAttribute:) BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute WK_AVAILABLE(NA, WK_IOS_TBA);
    5758@property (nonatomic, setter=_setMediaDataLoadsAutomatically:) BOOL _mediaDataLoadsAutomatically WK_AVAILABLE(NA, WK_IOS_TBA);
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r192437 r192589  
    27812781    settings.setAccelerated2dCanvasEnabled(store.getBoolValueForKey(WebPreferencesKey::accelerated2dCanvasEnabledKey()));
    27822782    settings.setRequiresUserGestureForMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForMediaPlaybackKey()));
     2783    settings.setAudioPlaybackRequiresUserGesture(store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForAudioPlaybackKey()));
    27832784    settings.setAllowsInlineMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackKey()));
    27842785    settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey()));
Note: See TracChangeset for help on using the changeset viewer.