⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 203520 in webkit


Ignore:
Timestamp:
Jul 21, 2016, 1:19:22 PM (10 years ago)
Author:
mmaxfield@apple.com
Message:

[iPhone] Playing a video on tudou.com plays only sound, no video
​https://bugs.webkit.org/show_bug.cgi?id=159967
<rdar://problem/26964090>

Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.

Source/WebCore:

WebKit recently starting honoring the playsinline and webkit-playsinline
attribute on iPhones. However, because these attributes previously did
nothing, some sites (such as Todou) were setting them on their content
and expecting that they are not honored. In this specific case, the
video is absolutely positioned to be 1 pixel x 1 pixel.

Previously, with iOS 9, apps could set the allowsInlineMediaPlayback
property on their WKWebView, which would honor the webkit-playsinline
attribute. Safari on iPhones didn't do this.

In order to not break these existing apps, it's important that the
allowsInlineMediaPlayback preference still allows webkit-playsinline
videos to play inline in apps using WKWebView. However, in Safari, these
videos should play fullscreen. (Todou videos have webkit-playsinline
but not playsinline.)

Therefore, in Safari, videos with playsinline should be inline, but
videos with webkit-playsinline should be fullscreen. In apps using
WKWebViews, if the app sets allowsInlineMediaPlayback, then videos with
playsinline should be inline, and videos with webkit-playsinline should
also be inline. Videos on iPad and Mac should all be inline by default.

We can create some truth tables for the cases which need to be covered:

All apps on Mac / iPad:
Presence of playsinline | Presence of webkit-playsinline | Result
========================|================================|===========
Not present | Not present | Inline
Present | Not present | Inline
Not Present | Present | Inline
Present | Present | Inline

Safari on iPhone:
Presence of playsinline | Presence of webkit-playsinline | Result
========================|================================|===========
Not present | Not present | Fullscreen
Present | Not present | Inline
Not Present | Present | Fullscreen
Present | Present | Inline

App on iPhone which sets allowsInlineMediaPlayback:
Presence of playsinline | Presence of webkit-playsinline | Result
========================|================================|===========
Not present | Not present | Fullscreen
Present | Not present | Inline
Not Present | Present | Inline
Present | Present | Inline

The way to distinguish Safari from another app is to create an SPI
boolean preference which Safari can set. This is already how the
iPhone and iPad are differentiated using the requiresPlayInlineAttribute
which Safari sets but other apps don't. However, this preference is
no longer sufficient because Safari should now be discriminating
between the playsinline and webkit-playsinline attributes. Therefore,
this preference should be extended to two boolean preferences, which
this patch adds:

allowsInlineMediaPlaybackWithPlaysInlineAttribute
allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute

Safari on iPhone will set
allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute to true,
and allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute to
false. Other apps on iPhone will get their defaults values (because they
are SPI) which means they will both be true. On iPad and Mac, apps will
use the defaults values where both are false.

This patch adds support for these two preferences, but does not remove
the existing inlineMediaPlaybackRequiresPlaysInlineAttribute preference.
I will remove the exising preference as soon as I update Safari to migrate
off of it.

Test: media/video-playsinline.html

  • html/MediaElementSession.cpp:

(WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):

  • page/Settings.cpp:
  • page/Settings.in:
  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::Backup::Backup):
(WebCore::InternalSettings::Backup::restoreTo):
(WebCore::InternalSettings::setAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
(WebCore::InternalSettings::setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):

  • testing/InternalSettings.h:
  • testing/InternalSettings.idl:

Source/WebKit/mac:

Add the two preferences to WebPreferences.

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

(+[WebPreferences initialize]):
(-[WebPreferences allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
(-[WebPreferences setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
(-[WebPreferences allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
(-[WebPreferences setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):

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

(-[WebView _preferencesChanged:]):

Source/WebKit2:

Add the two preferences to WKWebViewConfiguration and WKPreferences to cover both
the Obj-C API and the C SPI.

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

(WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
(WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
(WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
(WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):

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

(-[WKWebView _initializeWithConfiguration:]):

  • UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

(-[WKWebViewConfiguration init]):
(-[WKWebViewConfiguration copyWithZone:]):
(-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
(-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
(-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
(-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):

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

(WebKit::WebPage::updatePreferences):

Tools:

Migrate tests to use new SPI.

  • TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:

(RequiresUserActionForPlaybackTest::SetUp):

  • WebKitTestRunner/cocoa/TestControllerCocoa.mm:

(WTR::initializeWebViewConfiguration):

LayoutTests:

  • media/video-playsinline.html: Updated.
  • media/video-webkit-playsinline-expected.txt: Removed.
  • media/video-webkit-playsinline.html: Removed.
Location:
trunk
Files:
2 deleted
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r203519 r203520  
     12016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [iPhone] Playing a video on tudou.com plays only sound, no video
     4        https://bugs.webkit.org/show_bug.cgi?id=159967
     5        <rdar://problem/26964090>
     6
     7        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
     8
     9        * media/video-playsinline.html: Updated.
     10        * media/video-webkit-playsinline-expected.txt: Removed.
     11        * media/video-webkit-playsinline.html: Removed.
     12
    1132016-07-21  Ryan Haddad  <ryanhaddad@apple.com>
    214
  • trunk/LayoutTests/media/video-playsinline-expected.txt

    r203511 r203520  
    1 RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
     1RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     2RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
    23RUN(video.playsInline = false)
     4RUN(video.removeAttribute("webkit-playsinline"))
    35EVENT(canplaythrough)
    46RUN(video.play())
    57EVENT(playing)
    68EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
    7 RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
    8 RUN(video.playsInline = true)
     9RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     10RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     11RUN(video.playsInline = false)
     12RUN(video.setAttribute("webkit-playsinline"))
    913EVENT(canplaythrough)
    1014RUN(video.play())
    1115EVENT(playing)
    1216EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
    13 RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
     17RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     18RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
    1419RUN(video.playsInline = false)
     20RUN(video.setAttribute("webkit-playsinline"))
     21EVENT(canplaythrough)
     22RUN(video.play())
     23EVENT(playing)
     24EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
     25RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     26RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     27RUN(video.playsInline = false)
     28RUN(video.removeAttribute("webkit-playsinline"))
     29EVENT(canplaythrough)
     30RUN(video.play())
     31EVENT(playing)
     32EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
     33RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     34RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     35RUN(video.playsInline = true)
     36RUN(video.setAttribute("webkit-playsinline"))
    1537EVENT(canplaythrough)
    1638RUN(video.play())
    1739EVENT(playing)
    1840EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
    19 RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
     41RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     42RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
    2043RUN(video.playsInline = true)
     44RUN(video.removeAttribute("webkit-playsinline"))
     45EVENT(canplaythrough)
     46RUN(video.play())
     47EVENT(playing)
     48EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     49RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     50RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     51RUN(video.playsInline = true)
     52RUN(video.setAttribute("webkit-playsinline"))
     53EVENT(canplaythrough)
     54RUN(video.play())
     55EVENT(playing)
     56EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     57RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
     58RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     59RUN(video.playsInline = true)
     60RUN(video.removeAttribute("webkit-playsinline"))
     61EVENT(canplaythrough)
     62RUN(video.play())
     63EVENT(playing)
     64EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     65RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     66RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     67RUN(video.playsInline = false)
     68RUN(video.setAttribute("webkit-playsinline"))
     69EVENT(canplaythrough)
     70RUN(video.play())
     71EVENT(playing)
     72EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     73RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     74RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     75RUN(video.playsInline = false)
     76RUN(video.removeAttribute("webkit-playsinline"))
     77EVENT(canplaythrough)
     78RUN(video.play())
     79EVENT(playing)
     80EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
     81RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     82RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     83RUN(video.playsInline = false)
     84RUN(video.setAttribute("webkit-playsinline"))
     85EVENT(canplaythrough)
     86RUN(video.play())
     87EVENT(playing)
     88EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     89RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     90RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     91RUN(video.playsInline = false)
     92RUN(video.removeAttribute("webkit-playsinline"))
     93EVENT(canplaythrough)
     94RUN(video.play())
     95EVENT(playing)
     96EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     97RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     98RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     99RUN(video.playsInline = true)
     100RUN(video.setAttribute("webkit-playsinline"))
     101EVENT(canplaythrough)
     102RUN(video.play())
     103EVENT(playing)
     104EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     105RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     106RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
     107RUN(video.playsInline = true)
     108RUN(video.removeAttribute("webkit-playsinline"))
     109EVENT(canplaythrough)
     110RUN(video.play())
     111EVENT(playing)
     112EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
     113RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     114RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     115RUN(video.playsInline = true)
     116RUN(video.setAttribute("webkit-playsinline"))
     117EVENT(canplaythrough)
     118RUN(video.play())
     119EVENT(playing)
     120EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
     121RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
     122RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
     123RUN(video.playsInline = true)
     124RUN(video.removeAttribute("webkit-playsinline"))
    21125EVENT(canplaythrough)
    22126RUN(video.play())
  • trunk/LayoutTests/media/video-playsinline.html

    r203511 r203520  
    1818}
    1919
    20 function testPlaysInline(requiresPlaysInline, hasPlaysInline, expectedDisplayingFullscreen)
     20function testPlaysInline(requiresPlaysInline, requiresWebKitPlaysInline, hasPlaysInline, hasWebKitPlaysInline, expectedDisplayingFullscreen)
    2121{
    22     run('internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(' + requiresPlaysInline + ')');
     22    run('internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(' + requiresPlaysInline + ')');
     23    run('internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(' + requiresWebKitPlaysInline + ')');
    2324    video = media = document.createElement('video');
    2425    document.body.appendChild(video);
    … …  
    2627    video.src = findMediaFile('video', 'content/test');
    2728    run('video.playsInline = ' + hasPlaysInline);
     29    run('video.' + (hasWebKitPlaysInline ? 'set' : 'remove') + 'Attribute("webkit-playsinline")');
    2830    waitForEventOnce('canplaythrough', () => {
    2931        runWithKeyDown(() => {
    … …  
    4042function testRequiresPlaysInlineAndDoesntHaveIt()
    4143{
    42     testPlaysInline(true, false, true);
     44    testPlaysInline(true, true, false, false, true);
     45}
     46
     47function testRequiresPlaysInlineAndDoesntHaveIt2()
     48{
     49    testPlaysInline(true, true, false, true, false);
     50}
     51
     52function testRequiresPlaysInlineAndDoesntHaveIt3()
     53{
     54    testPlaysInline(true, false, false, true, true);
     55}
     56
     57function testRequiresPlaysInlineAndDoesntHaveIt4()
     58{
     59    testPlaysInline(true, false, false, false, true);
    4360}
    4461
    4562function testRequiresPlaysInlineAndDoesHaveIt()
    4663{
    47     testPlaysInline(true, true, false);
     64    testPlaysInline(true, true, true, true, false);
     65}
     66
     67function testRequiresPlaysInlineAndDoesHaveIt2()
     68{
     69    testPlaysInline(true, true, true, false, false);
     70}
     71
     72function testRequiresPlaysInlineAndDoesHaveIt3()
     73{
     74    testPlaysInline(true, false, true, true, false);
     75}
     76
     77function testRequiresPlaysInlineAndDoesHaveIt4()
     78{
     79    testPlaysInline(true, false, true, false, false);
    4880}
    4981
    5082function testDoesNotRequirePlaysInlineAndDoesntHaveIt()
    5183{
    52     testPlaysInline(false, false, false);
     84    testPlaysInline(false, true, false, true, false);
     85}
     86
     87function testDoesNotRequirePlaysInlineAndDoesntHaveIt2()
     88{
     89    testPlaysInline(false, true, false, false, true);
     90}
     91
     92function testDoesNotRequirePlaysInlineAndDoesntHaveIt3()
     93{
     94    testPlaysInline(false, false, false, true, false);
     95}
     96
     97function testDoesNotRequirePlaysInlineAndDoesntHaveIt4()
     98{
     99    testPlaysInline(false, false, false, false, false);
    53100}
    54101
    55102function testDoesNotRequirePlaysInlineAndDoesHaveIt()
    56103{
    57     testPlaysInline(false, true, false);
     104    testPlaysInline(false, true, true, true, false);
     105}
     106
     107function testDoesNotRequirePlaysInlineAndDoesHaveIt2()
     108{
     109    testPlaysInline(false, true, true, false, true);
     110}
     111
     112function testDoesNotRequirePlaysInlineAndDoesHaveIt3()
     113{
     114    testPlaysInline(false, false, true, true, false);
     115}
     116
     117function testDoesNotRequirePlaysInlineAndDoesHaveIt4()
     118{
     119    testPlaysInline(false, false, true, false, false);
    58120}
    59121
    60122var tests = [
    61123    testRequiresPlaysInlineAndDoesntHaveIt,
     124    testRequiresPlaysInlineAndDoesntHaveIt2,
     125    testRequiresPlaysInlineAndDoesntHaveIt3,
     126    testRequiresPlaysInlineAndDoesntHaveIt4,
    62127    testRequiresPlaysInlineAndDoesHaveIt,
     128    testRequiresPlaysInlineAndDoesHaveIt2,
     129    testRequiresPlaysInlineAndDoesHaveIt3,
     130    testRequiresPlaysInlineAndDoesHaveIt4,
    63131    testDoesNotRequirePlaysInlineAndDoesntHaveIt,
     132    testDoesNotRequirePlaysInlineAndDoesntHaveIt2,
     133    testDoesNotRequirePlaysInlineAndDoesntHaveIt3,
     134    testDoesNotRequirePlaysInlineAndDoesntHaveIt4,
    64135    testDoesNotRequirePlaysInlineAndDoesHaveIt,
     136    testDoesNotRequirePlaysInlineAndDoesHaveIt2,
     137    testDoesNotRequirePlaysInlineAndDoesHaveIt3,
     138    testDoesNotRequirePlaysInlineAndDoesHaveIt4
    65139];
    66140
  • trunk/Source/WebCore/ChangeLog

    r203518 r203520  
     12016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [iPhone] Playing a video on tudou.com plays only sound, no video
     4        https://bugs.webkit.org/show_bug.cgi?id=159967
     5        <rdar://problem/26964090>
     6
     7        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
     8
     9        WebKit recently starting honoring the playsinline and webkit-playsinline
     10        attribute on iPhones. However, because these attributes previously did
     11        nothing, some sites (such as Todou) were setting them on their content
     12        and expecting that they are not honored. In this specific case, the
     13        video is absolutely positioned to be 1 pixel x 1 pixel.
     14
     15        Previously, with iOS 9, apps could set the allowsInlineMediaPlayback
     16        property on their WKWebView, which would honor the webkit-playsinline
     17        attribute. Safari on iPhones didn't do this.
     18
     19        In order to not break these existing apps, it's important that the
     20        allowsInlineMediaPlayback preference still allows webkit-playsinline
     21        videos to play inline in apps using WKWebView. However, in Safari, these
     22        videos should play fullscreen. (Todou videos have webkit-playsinline
     23        but not playsinline.)
     24
     25        Therefore, in Safari, videos with playsinline should be inline, but
     26        videos with webkit-playsinline should be fullscreen. In apps using
     27        WKWebViews, if the app sets allowsInlineMediaPlayback, then videos with
     28        playsinline should be inline, and videos with webkit-playsinline should
     29        also be inline. Videos on iPad and Mac should all be inline by default.
     30
     31        We can create some truth tables for the cases which need to be covered:
     32
     33        All apps on Mac / iPad:
     34        Presence of playsinline | Presence of webkit-playsinline | Result
     35        ========================|================================|===========
     36        Not present             | Not present                    | Inline
     37        Present                 | Not present                    | Inline
     38        Not Present             | Present                        | Inline
     39        Present                 | Present                        | Inline
     40
     41        Safari on iPhone:
     42        Presence of playsinline | Presence of webkit-playsinline | Result
     43        ========================|================================|===========
     44        Not present             | Not present                    | Fullscreen
     45        Present                 | Not present                    | Inline
     46        Not Present             | Present                        | Fullscreen
     47        Present                 | Present                        | Inline
     48
     49        App on iPhone which sets allowsInlineMediaPlayback:
     50        Presence of playsinline | Presence of webkit-playsinline | Result
     51        ========================|================================|===========
     52        Not present             | Not present                    | Fullscreen
     53        Present                 | Not present                    | Inline
     54        Not Present             | Present                        | Inline
     55        Present                 | Present                        | Inline
     56
     57        The way to distinguish Safari from another app is to create an SPI
     58        boolean preference which Safari can set. This is already how the
     59        iPhone and iPad are differentiated using the requiresPlayInlineAttribute
     60        which Safari sets but other apps don't. However, this preference is
     61        no longer sufficient because Safari should now be discriminating
     62        between the playsinline and webkit-playsinline attributes. Therefore,
     63        this preference should be extended to two boolean preferences, which
     64        this patch adds:
     65
     66        allowsInlineMediaPlaybackWithPlaysInlineAttribute
     67        allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
     68
     69        Safari on iPhone will set
     70        allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute to true,
     71        and allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute to
     72        false. Other apps on iPhone will get their defaults values (because they
     73        are SPI) which means they will both be true. On iPad and Mac, apps will
     74        use the defaults values where both are false.
     75
     76        This patch adds support for these two preferences, but does not remove
     77        the existing inlineMediaPlaybackRequiresPlaysInlineAttribute preference.
     78        I will remove the exising preference as soon as I update Safari to migrate
     79        off of it.
     80
     81        Test: media/video-playsinline.html
     82
     83        * html/MediaElementSession.cpp:
     84        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):
     85        * page/Settings.cpp:
     86        * page/Settings.in:
     87        * testing/InternalSettings.cpp:
     88        (WebCore::InternalSettings::Backup::Backup):
     89        (WebCore::InternalSettings::Backup::restoreTo):
     90        (WebCore::InternalSettings::setAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
     91        (WebCore::InternalSettings::setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
     92        * testing/InternalSettings.h:
     93        * testing/InternalSettings.idl:
     94
    1952016-07-21  Ryosuke Niwa  <rniwa@webkit.org>
    296
  • trunk/Source/WebCore/html/MediaElementSession.cpp

    r203484 r203520  
    456456        return true;
    457457
    458     return settings->inlineMediaPlaybackRequiresPlaysInlineAttribute() && !(element.hasAttributeWithoutSynchronization(HTMLNames::webkit_playsinlineAttr) || element.hasAttributeWithoutSynchronization(HTMLNames::playsinlineAttr));
     458    bool requiresPlaysInline = settings->allowsInlineMediaPlaybackWithPlaysInlineAttribute();
     459    bool requiresWebKitPlaysInline = settings->allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute();
     460
     461    if (!requiresPlaysInline && !requiresWebKitPlaysInline)
     462        return false;
     463
     464    bool hasPlaysInline = element.hasAttributeWithoutSynchronization(HTMLNames::playsinlineAttr);
     465    bool hasWebKitPlaysInline = element.hasAttributeWithoutSynchronization(HTMLNames::webkit_playsinlineAttr);
     466
     467    return !((requiresPlaysInline && hasPlaysInline) || (requiresWebKitPlaysInline && hasWebKitPlaysInline));
    459468}
    460469
  • trunk/Source/WebCore/page/Settings.cpp

    r203484 r203520  
    140140static const bool defaultAllowsInlineMediaPlayback = false;
    141141static const bool defaultInlineMediaPlaybackRequiresPlaysInlineAttribute = true;
     142static const bool defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute = true;
     143static const bool defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = true;
    142144static const bool defaultVideoPlaybackRequiresUserGesture = true;
    143145static const bool defaultAudioPlaybackRequiresUserGesture = true;
    … …  
    153155static const bool defaultAllowsInlineMediaPlayback = true;
    154156static const bool defaultInlineMediaPlaybackRequiresPlaysInlineAttribute = false;
     157static const bool defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute = false;
     158static const bool defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = false;
    155159static const bool defaultVideoPlaybackRequiresUserGesture = false;
    156160static const bool defaultAudioPlaybackRequiresUserGesture = false;
  • trunk/Source/WebCore/page/Settings.in

    r203484 r203520  
    133133allowsInlineMediaPlaybackAfterFullscreen initial=true
    134134inlineMediaPlaybackRequiresPlaysInlineAttribute initial=defaultInlineMediaPlaybackRequiresPlaysInlineAttribute
     135allowsInlineMediaPlaybackWithPlaysInlineAttribute initial=defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute
     136allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute initial=defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
    135137allowsPictureInPictureMediaPlayback initial=defaultAllowsPictureInPictureMediaPlayback
    136138mediaControlsScaleWithPageZoom initial=defaultMediaControlsScaleWithPageZoom
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r203484 r203520  
    109109    , m_allowsInlineMediaPlaybackAfterFullscreen(settings.allowsInlineMediaPlaybackAfterFullscreen())
    110110    , m_inlineMediaPlaybackRequiresPlaysInlineAttribute(settings.inlineMediaPlaybackRequiresPlaysInlineAttribute())
     111    , m_allowsInlineMediaPlaybackWithPlaysInlineAttribute(settings.allowsInlineMediaPlaybackWithPlaysInlineAttribute())
     112    , m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(settings.allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute())
    111113#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
    112114    , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled())
    … …  
    185187    settings.setAllowsInlineMediaPlaybackAfterFullscreen(m_allowsInlineMediaPlaybackAfterFullscreen);
    186188    settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(m_inlineMediaPlaybackRequiresPlaysInlineAttribute);
     189    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(m_allowsInlineMediaPlaybackWithPlaysInlineAttribute);
     190    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute);
    187191    RuntimeEnabledFeatures::sharedFeatures().setPluginReplacementEnabled(m_pluginReplacementEnabled);
    188192#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
    … …  
    581585}
    582586
     587void InternalSettings::setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(bool requires, ExceptionCode& ec)
     588{
     589    InternalSettingsGuardForSettings();
     590    settings()->setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(requires);
     591}
     592
     593void InternalSettings::setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(bool requires, ExceptionCode& ec)
     594{
     595    InternalSettingsGuardForSettings();
     596    settings()->setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(requires);
     597}
     598
    583599void InternalSettings::setIndexedDBWorkersEnabled(bool enabled, ExceptionCode&)
    584600{
  • trunk/Source/WebCore/testing/InternalSettings.h

    r203484 r203520  
    109109        bool m_allowsInlineMediaPlaybackAfterFullscreen;
    110110        bool m_inlineMediaPlaybackRequiresPlaysInlineAttribute;
     111        bool m_allowsInlineMediaPlaybackWithPlaysInlineAttribute;
     112        bool m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
    111113#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
    112114        bool m_indexedDBWorkersEnabled;
    … …  
    164166    void setAllowsInlineMediaPlaybackAfterFullscreen(bool, ExceptionCode&);
    165167    void setInlineMediaPlaybackRequiresPlaysInlineAttribute(bool, ExceptionCode&);
     168    void setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(bool, ExceptionCode&);
     169    void setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(bool, ExceptionCode&);
    166170    void setIndexedDBWorkersEnabled(bool, ExceptionCode&);
    167171    String userInterfaceDirectionPolicy(ExceptionCode&);
  • trunk/Source/WebCore/testing/InternalSettings.idl

    r203484 r203520  
    7979    [RaisesException] void setAllowsInlineMediaPlaybackAfterFullscreen(boolean allows);
    8080    [RaisesException] void setInlineMediaPlaybackRequiresPlaysInlineAttribute(boolean requires);
     81    [RaisesException] void setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(boolean requires);
     82    [RaisesException] void setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(boolean requires);
    8183
    8284    [RaisesException] void setIndexedDBWorkersEnabled(boolean requires);
  • trunk/Source/WebKit/mac/ChangeLog

    r203484 r203520  
     12016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [iPhone] Playing a video on tudou.com plays only sound, no video
     4        https://bugs.webkit.org/show_bug.cgi?id=159967
     5        <rdar://problem/26964090>
     6
     7        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
     8
     9        Add the two preferences to WebPreferences.
     10
     11        * WebView/WebPreferenceKeysPrivate.h:
     12        * WebView/WebPreferences.mm:
     13        (+[WebPreferences initialize]):
     14        (-[WebPreferences allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
     15        (-[WebPreferences setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
     16        (-[WebPreferences allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
     17        (-[WebPreferences setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):
     18        * WebView/WebPreferencesPrivate.h:
     19        * WebView/WebView.mm:
     20        (-[WebView _preferencesChanged:]):
     21
    1222016-07-20  Commit Queue  <commit-queue@webkit.org>
    223
  • trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h

    r203484 r203520  
    128128#define WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey @"WebKitAllowsInlineMediaPlaybackAfterFullscreen"
    129129#define WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey @"InlineMediaPlaybackRequiresPlaysInlineAttribute"
     130#define WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey @"AllowsInlineMediaPlaybackWithPlaysInlineAttribute"
     131#define WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey @"AllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute"
    130132#define WebKitInvisibleAutoplayNotPermittedKey @"InvisibleAutoplayNotPermitted"
    131133#define WebKitAllowsPictureInPictureMediaPlaybackPreferenceKey @"WebKitAllowsPictureInPictureMediaPlayback"
  • trunk/Source/WebKit/mac/WebView/WebPreferences.mm

    r203484 r203520  
    526526        [NSNumber numberWithBool:YES],  WebKitAllowsInlineMediaPlaybackPreferenceKey,
    527527        [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey,
    528         [NSNumber numberWithBool:NO],  WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
     528        [NSNumber numberWithBool:NO],   WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
     529        [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey,
     530        [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey,
    529531        [NSNumber numberWithBool:YES],  WebKitMediaControlsScaleWithPageZoomPreferenceKey,
    530532        [NSNumber numberWithBool:NO],   WebKitWebAudioEnabledPreferenceKey,
    … …  
    540542        [NSNumber numberWithBool:allowsInlineMediaPlaybackAfterFullscreen],   WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey,
    541543        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
     544        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey,
     545        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey,
    542546        [NSNumber numberWithBool:NO],   WebKitMediaControlsScaleWithPageZoomPreferenceKey,
    543547        [NSNumber numberWithUnsignedInt:AudioSession::None],  WebKitAudioSessionCategoryOverride,
    … …  
    22942298}
    22952299
     2300- (BOOL)allowsInlineMediaPlaybackWithPlaysInlineAttribute
     2301{
     2302    return [self _boolValueForKey:WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey];
     2303}
     2304
     2305- (void)setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)flag
     2306{
     2307    [self _setBoolValue:flag forKey:WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey];
     2308}
     2309
     2310- (BOOL)allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
     2311{
     2312    return [self _boolValueForKey:WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey];
     2313}
     2314
     2315- (void)setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)flag
     2316{
     2317    [self _setBoolValue:flag forKey:WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey];
     2318}
     2319
    22962320- (BOOL)invisibleAutoplayNotPermitted
    22972321{
  • trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h

    r203484 r203520  
    266266- (BOOL)inlineMediaPlaybackRequiresPlaysInlineAttribute;
    267267
     268- (void)setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)flag;
     269- (BOOL)allowsInlineMediaPlaybackWithPlaysInlineAttribute;
     270
     271- (void)setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)flag;
     272- (BOOL)allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
     273
    268274- (void)setInvisibleAutoplayNotPermitted:(BOOL)flag;
    269275- (BOOL)invisibleAutoplayNotPermitted;
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r203484 r203520  
    23502350    settings.setAllowsInlineMediaPlaybackAfterFullscreen([preferences allowsInlineMediaPlaybackAfterFullscreen]);
    23512351    settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute([preferences inlineMediaPlaybackRequiresPlaysInlineAttribute]);
     2352    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute([preferences allowsInlineMediaPlaybackWithPlaysInlineAttribute]);
     2353    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute([preferences allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]);
    23522354    settings.setInvisibleAutoplayNotPermitted([preferences invisibleAutoplayNotPermitted]);
    23532355    settings.setAllowsPictureInPictureMediaPlayback([preferences allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback());
  • trunk/Source/WebKit2/ChangeLog

    r203508 r203520  
     12016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [iPhone] Playing a video on tudou.com plays only sound, no video
     4        https://bugs.webkit.org/show_bug.cgi?id=159967
     5        <rdar://problem/26964090>
     6
     7        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
     8
     9        Add the two preferences to WKWebViewConfiguration and WKPreferences to cover both
     10        the Obj-C API and the C SPI.
     11
     12        * Shared/WebPreferencesDefinitions.h:
     13        * UIProcess/API/C/WKPreferences.cpp:
     14        (WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
     15        (WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
     16        (WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
     17        (WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
     18        * UIProcess/API/C/WKPreferencesRefPrivate.h:
     19        * UIProcess/API/Cocoa/WKWebView.mm:
     20        (-[WKWebView _initializeWithConfiguration:]):
     21        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
     22        (-[WKWebViewConfiguration init]):
     23        (-[WKWebViewConfiguration copyWithZone:]):
     24        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
     25        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
     26        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
     27        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):
     28        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
     29        * WebProcess/WebPage/WebPage.cpp:
     30        (WebKit::WebPage::updatePreferences):
     31
    1322016-07-21  Yongjun Zhang  <yongjun_zhang@apple.com>
    233
  • trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h

    r203484 r203520  
    6767#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN true
    6868#define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE true
     69#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE true
     70#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE true
    6971#define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED true
    7072#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY false
    … …  
    8486#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN false
    8587#define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE false
     88#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE false
     89#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE false
    8690#define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED false
    8791#define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY true
    … …  
    154158    macro(AllowsInlineMediaPlaybackAfterFullscreen, allowsInlineMediaPlaybackAfterFullscreen, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN, "", "") \
    155159    macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE, "", "") \
     160    macro(AllowsInlineMediaPlaybackWithPlaysInlineAttribute, allowsInlineMediaPlaybackWithPlaysInlineAttribute, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE, "", "") \
     161    macro(AllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute, allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE, "", "") \
    156162    macro(InvisibleAutoplayNotPermitted, invisibleAutoplayNotPermitted, Bool, bool, DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED, "", "") \
    157163    macro(MediaDataLoadsAutomatically, mediaDataLoadsAutomatically, Bool, bool, DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY, "", "") \
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp

    r203484 r203520  
    804804}
    805805
     806void WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag)
     807{
     808    toImpl(preferencesRef)->setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(flag);
     809}
     810
     811bool WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef)
     812{
     813    return toImpl(preferencesRef)->allowsInlineMediaPlaybackWithPlaysInlineAttribute();
     814}
     815
     816void WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag)
     817{
     818    toImpl(preferencesRef)->setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(flag);
     819}
     820
     821bool WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef)
     822{
     823    return toImpl(preferencesRef)->allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute();
     824}
     825
    806826void WKPreferencesSetMediaControlsScaleWithPageZoom(WKPreferencesRef preferencesRef, bool flag)
    807827{
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h

    r203484 r203520  
    196196WK_EXPORT bool WKPreferencesGetInlineMediaPlaybackRequiresPlaysInlineAttribute(WKPreferencesRef preferencesRef);
    197197
     198// Defaults to true on iOS, false elsewhere.
     199WK_EXPORT void WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag);
     200WK_EXPORT bool WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef);
     201
     202// Defaults to true on iOS, false elsewhere.
     203WK_EXPORT void WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag);
     204WK_EXPORT bool WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef);
     205
    198206// Defaults to false on iOS, true elsewhere.
    199207WK_EXPORT void WKPreferencesSetMediaControlsScaleWithPageZoom(WKPreferencesRef preferencesRef, bool flag);
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r203484 r203520  
    457457    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackAfterFullscreenKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackAfterFullscreen]));
    458458    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _inlineMediaPlaybackRequiresPlaysInlineAttribute]));
     459    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackWithPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]));
     460    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]));
    459461    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback()));
    460462    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::userInterfaceDirectionPolicyKey(), WebKit::WebPreferencesStore::Value(static_cast<uint32_t>(WebCore::UserInterfaceDirectionPolicy::Content)));
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm

    r203484 r203520  
    109109    BOOL _allowsInlineMediaPlayback;
    110110    BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute;
     111    BOOL _allowsInlineMediaPlaybackWithPlaysInlineAttribute;
     112    BOOL _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
    111113    BOOL _allowsInlineMediaPlaybackAfterFullscreen;
    112114#endif
    … …  
    139141    _allowsInlineMediaPlayback = WebCore::deviceClass() == MGDeviceClassiPad;
    140142    _inlineMediaPlaybackRequiresPlaysInlineAttribute = !_allowsInlineMediaPlayback;
     143    _allowsInlineMediaPlaybackWithPlaysInlineAttribute = !_allowsInlineMediaPlayback;
     144    _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = !_allowsInlineMediaPlayback;
    141145    _allowsInlineMediaPlaybackAfterFullscreen = !_allowsInlineMediaPlayback;
    142146    _mediaDataLoadsAutomatically = NO;
    … …  
    290294    configuration->_allowsInlineMediaPlaybackAfterFullscreen = self->_allowsInlineMediaPlaybackAfterFullscreen;
    291295    configuration->_inlineMediaPlaybackRequiresPlaysInlineAttribute = self->_inlineMediaPlaybackRequiresPlaysInlineAttribute;
     296    configuration->_allowsInlineMediaPlaybackWithPlaysInlineAttribute = self->_allowsInlineMediaPlaybackWithPlaysInlineAttribute;
     297    configuration->_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = self->_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
    292298    configuration->_allowsPictureInPictureMediaPlayback = self->_allowsPictureInPictureMediaPlayback;
    293299    configuration->_alwaysRunsAtForegroundPriority = _alwaysRunsAtForegroundPriority;
    … …  
    579585}
    580586
     587- (BOOL)_allowsInlineMediaPlaybackWithPlaysInlineAttribute
     588{
     589    return _allowsInlineMediaPlaybackWithPlaysInlineAttribute;
     590}
     591
     592- (void)_setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)requires
     593{
     594    _allowsInlineMediaPlaybackWithPlaysInlineAttribute = requires;
     595}
     596
     597- (BOOL)_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
     598{
     599    return _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
     600}
     601
     602- (void)_setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)requires
     603{
     604    _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = requires;
     605}
     606
    581607- (BOOL)_allowsInlineMediaPlaybackAfterFullscreen
    582608{
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h

    r203484 r203520  
    6161@property (nonatomic, setter=_setAlwaysRunsAtForegroundPriority:) BOOL _alwaysRunsAtForegroundPriority WK_API_AVAILABLE(ios(9_0));
    6262@property (nonatomic, setter=_setInlineMediaPlaybackRequiresPlaysInlineAttribute:) BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
     63@property (nonatomic, setter=_setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:) BOOL _allowsInlineMediaPlaybackWithPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
     64@property (nonatomic, setter=_setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:) BOOL _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
    6365@property (nonatomic, setter=_setAllowsInlineMediaPlaybackAfterFullscreen:) BOOL _allowsInlineMediaPlaybackAfterFullscreen  WK_API_AVAILABLE(ios(WK_IOS_TBA));
    6466#else
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r203484 r203520  
    29872987    settings.setAllowsInlineMediaPlaybackAfterFullscreen(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackAfterFullscreenKey()));
    29882988    settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey()));
     2989    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackWithPlaysInlineAttributeKey()));
     2990    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey()));
    29892991    settings.setInvisibleAutoplayNotPermitted(store.getBoolValueForKey(WebPreferencesKey::invisibleAutoplayNotPermittedKey()));
    29902992    settings.setMediaDataLoadsAutomatically(store.getBoolValueForKey(WebPreferencesKey::mediaDataLoadsAutomaticallyKey()));
  • trunk/Tools/ChangeLog

    r203512 r203520  
     12016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [iPhone] Playing a video on tudou.com plays only sound, no video
     4        https://bugs.webkit.org/show_bug.cgi?id=159967
     5        <rdar://problem/26964090>
     6
     7        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
     8
     9        Migrate tests to use new SPI.
     10
     11        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
     12        (RequiresUserActionForPlaybackTest::SetUp):
     13        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
     14        (WTR::initializeWebViewConfiguration):
     15
    1162016-07-21  Csaba Osztrogonác  <ossy@webkit.org>
    217
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm

    r200951 r203520  
    7878        configuration.get().allowsInlineMediaPlayback = YES;
    7979        configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO;
     80        configuration.get()._allowsInlineMediaPlaybackWithPlaysInlineAttribute = NO;
     81        configuration.get()._allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = NO;
    8082#endif
    8183    }
  • trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm

    r203075 r203520  
    6363    globalWebViewConfiguration.allowsInlineMediaPlayback = YES;
    6464    globalWebViewConfiguration._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO;
     65    globalWebViewConfiguration._allowsInlineMediaPlaybackWithPlaysInlineAttribute = NO;
     66    globalWebViewConfiguration._allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = NO;
    6567    globalWebViewConfiguration._invisibleAutoplayNotPermitted = NO;
    6668    globalWebViewConfiguration._mediaDataLoadsAutomatically = YES;
Note: See TracChangeset for help on using the changeset viewer.