<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203520] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203520">203520</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2016-07-21 13:19:22 -0700 (Thu, 21 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iPhone] Playing a video on tudou.com plays only sound, no video
https://bugs.webkit.org/show_bug.cgi?id=159967
&lt;rdar://problem/26964090&gt;

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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediavideoplaysinlineexpectedtxt">trunk/LayoutTests/media/video-playsinline-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediavideoplaysinlinehtml">trunk/LayoutTests/media/video-playsinline.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmlMediaElementSessioncpp">trunk/Source/WebCore/html/MediaElementSession.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSettingscpp">trunk/Source/WebCore/page/Settings.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSettingsin">trunk/Source/WebCore/page/Settings.in</a></li>
<li><a href="#trunkSourceWebCoretestingInternalSettingscpp">trunk/Source/WebCore/testing/InternalSettings.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalSettingsh">trunk/Source/WebCore/testing/InternalSettings.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalSettingsidl">trunk/Source/WebCore/testing/InternalSettings.idl</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferenceKeysPrivateh">trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferencesmm">trunk/Source/WebKit/mac/WebView/WebPreferences.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebPreferencesPrivateh">trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesDefinitionsh">trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPreferencescpp">trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPreferencesRefPrivateh">trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaRequiresUserActionForPlaybackmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm</a></li>
<li><a href="#trunkToolsWebKitTestRunnercocoaTestControllerCocoamm">trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediavideowebkitplaysinlineexpectedtxt">trunk/LayoutTests/media/video-webkit-playsinline-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediavideowebkitplaysinlinehtml">trunk/LayoutTests/media/video-webkit-playsinline.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/LayoutTests/ChangeLog        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-07-21  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iPhone] Playing a video on tudou.com plays only sound, no video
+        https://bugs.webkit.org/show_bug.cgi?id=159967
+        &lt;rdar://problem/26964090&gt;
+
+        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
+
+        * media/video-playsinline.html: Updated.
+        * media/video-webkit-playsinline-expected.txt: Removed.
+        * media/video-webkit-playsinline.html: Removed.
+
</ins><span class="cx"> 2016-07-21  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Marking accessibility/mac/value-change/value-change-user-info-contenteditable.html as flaky on El Capitan WK2
</span></span></pre></div>
<a id="trunkLayoutTestsmediavideoplaysinlineexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/video-playsinline-expected.txt (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/video-playsinline-expected.txt        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/LayoutTests/media/video-playsinline-expected.txt        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,26 +1,130 @@
</span><del>-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
</del><ins>+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
</ins><span class="cx"> RUN(video.playsInline = false)
</span><ins>+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
</ins><span class="cx"> EVENT(canplaythrough)
</span><span class="cx"> RUN(video.play())
</span><span class="cx"> EVENT(playing)
</span><span class="cx"> EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
</span><del>-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
</del><ins>+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
+RUN(video.playsInline = false)
+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = false)
+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = false)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
</ins><span class="cx"> RUN(video.playsInline = true)
</span><ins>+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
</ins><span class="cx"> EVENT(canplaythrough)
</span><span class="cx"> RUN(video.play())
</span><span class="cx"> EVENT(playing)
</span><span class="cx"> EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
</span><del>-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
</del><ins>+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
+RUN(video.playsInline = true)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = true)
+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(true))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = true)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
</ins><span class="cx"> RUN(video.playsInline = false)
</span><ins>+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
</ins><span class="cx"> EVENT(canplaythrough)
</span><span class="cx"> RUN(video.play())
</span><span class="cx"> EVENT(playing)
</span><span class="cx"> EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
</span><del>-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
</del><ins>+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
+RUN(video.playsInline = false)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = false)
+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = false)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
</ins><span class="cx"> RUN(video.playsInline = true)
</span><ins>+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
</ins><span class="cx"> EVENT(canplaythrough)
</span><span class="cx"> RUN(video.play())
</span><span class="cx"> EVENT(playing)
</span><span class="cx"> EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
</span><ins>+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(true))
+RUN(video.playsInline = true)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = true)
+RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(false))
+RUN(internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(false))
+RUN(video.playsInline = true)
+RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
+EVENT(canplaythrough)
+RUN(video.play())
+EVENT(playing)
+EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
</ins><span class="cx"> END OF TEST
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediavideoplaysinlinehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/video-playsinline.html (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/video-playsinline.html        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/LayoutTests/media/video-playsinline.html        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -17,14 +17,16 @@
</span><span class="cx">         endTest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function testPlaysInline(requiresPlaysInline, hasPlaysInline, expectedDisplayingFullscreen)
</del><ins>+function testPlaysInline(requiresPlaysInline, requiresWebKitPlaysInline, hasPlaysInline, hasWebKitPlaysInline, expectedDisplayingFullscreen)
</ins><span class="cx"> {
</span><del>-    run('internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(' + requiresPlaysInline + ')');
</del><ins>+    run('internals.settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(' + requiresPlaysInline + ')');
+    run('internals.settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(' + requiresWebKitPlaysInline + ')');
</ins><span class="cx">     video = media = document.createElement('video');
</span><span class="cx">     document.body.appendChild(video);
</span><span class="cx">     video.controls = true;
</span><span class="cx">     video.src = findMediaFile('video', 'content/test');
</span><span class="cx">     run('video.playsInline = ' + hasPlaysInline);
</span><ins>+    run('video.' + (hasWebKitPlaysInline ? 'set' : 'remove') + 'Attribute(&quot;webkit-playsinline&quot;)');
</ins><span class="cx">     waitForEventOnce('canplaythrough', () =&gt; {
</span><span class="cx">         runWithKeyDown(() =&gt; {
</span><span class="cx">             run('video.play()');
</span><span class="lines">@@ -39,29 +41,101 @@
</span><span class="cx"> 
</span><span class="cx"> function testRequiresPlaysInlineAndDoesntHaveIt()
</span><span class="cx"> {
</span><del>-    testPlaysInline(true, false, true);
</del><ins>+    testPlaysInline(true, true, false, false, true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function testRequiresPlaysInlineAndDoesntHaveIt2()
+{
+    testPlaysInline(true, true, false, true, false);
+}
+
+function testRequiresPlaysInlineAndDoesntHaveIt3()
+{
+    testPlaysInline(true, false, false, true, true);
+}
+
+function testRequiresPlaysInlineAndDoesntHaveIt4()
+{
+    testPlaysInline(true, false, false, false, true);
+}
+
</ins><span class="cx"> function testRequiresPlaysInlineAndDoesHaveIt()
</span><span class="cx"> {
</span><del>-    testPlaysInline(true, true, false);
</del><ins>+    testPlaysInline(true, true, true, true, false);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function testRequiresPlaysInlineAndDoesHaveIt2()
+{
+    testPlaysInline(true, true, true, false, false);
+}
+
+function testRequiresPlaysInlineAndDoesHaveIt3()
+{
+    testPlaysInline(true, false, true, true, false);
+}
+
+function testRequiresPlaysInlineAndDoesHaveIt4()
+{
+    testPlaysInline(true, false, true, false, false);
+}
+
</ins><span class="cx"> function testDoesNotRequirePlaysInlineAndDoesntHaveIt()
</span><span class="cx"> {
</span><del>-    testPlaysInline(false, false, false);
</del><ins>+    testPlaysInline(false, true, false, true, false);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function testDoesNotRequirePlaysInlineAndDoesntHaveIt2()
+{
+    testPlaysInline(false, true, false, false, true);
+}
+
+function testDoesNotRequirePlaysInlineAndDoesntHaveIt3()
+{
+    testPlaysInline(false, false, false, true, false);
+}
+
+function testDoesNotRequirePlaysInlineAndDoesntHaveIt4()
+{
+    testPlaysInline(false, false, false, false, false);
+}
+
</ins><span class="cx"> function testDoesNotRequirePlaysInlineAndDoesHaveIt()
</span><span class="cx"> {
</span><del>-    testPlaysInline(false, true, false);
</del><ins>+    testPlaysInline(false, true, true, true, false);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function testDoesNotRequirePlaysInlineAndDoesHaveIt2()
+{
+    testPlaysInline(false, true, true, false, true);
+}
+
+function testDoesNotRequirePlaysInlineAndDoesHaveIt3()
+{
+    testPlaysInline(false, false, true, true, false);
+}
+
+function testDoesNotRequirePlaysInlineAndDoesHaveIt4()
+{
+    testPlaysInline(false, false, true, false, false);
+}
+
</ins><span class="cx"> var tests = [
</span><span class="cx">     testRequiresPlaysInlineAndDoesntHaveIt,
</span><ins>+    testRequiresPlaysInlineAndDoesntHaveIt2,
+    testRequiresPlaysInlineAndDoesntHaveIt3,
+    testRequiresPlaysInlineAndDoesntHaveIt4,
</ins><span class="cx">     testRequiresPlaysInlineAndDoesHaveIt,
</span><ins>+    testRequiresPlaysInlineAndDoesHaveIt2,
+    testRequiresPlaysInlineAndDoesHaveIt3,
+    testRequiresPlaysInlineAndDoesHaveIt4,
</ins><span class="cx">     testDoesNotRequirePlaysInlineAndDoesntHaveIt,
</span><ins>+    testDoesNotRequirePlaysInlineAndDoesntHaveIt2,
+    testDoesNotRequirePlaysInlineAndDoesntHaveIt3,
+    testDoesNotRequirePlaysInlineAndDoesntHaveIt4,
</ins><span class="cx">     testDoesNotRequirePlaysInlineAndDoesHaveIt,
</span><ins>+    testDoesNotRequirePlaysInlineAndDoesHaveIt2,
+    testDoesNotRequirePlaysInlineAndDoesHaveIt3,
+    testDoesNotRequirePlaysInlineAndDoesHaveIt4
</ins><span class="cx"> ];
</span><span class="cx"> 
</span><span class="cx"> &lt;/script&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediavideowebkitplaysinlineexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/media/video-webkit-playsinline-expected.txt (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/video-webkit-playsinline-expected.txt        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/LayoutTests/media/video-webkit-playsinline-expected.txt        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,26 +0,0 @@
</span><del>-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
-RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
-EVENT(canplaythrough)
-RUN(video.play())
-EVENT(playing)
-EXPECTED (video.webkitDisplayingFullscreen == 'true') OK
-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(true))
-RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
-EVENT(canplaythrough)
-RUN(video.play())
-EVENT(playing)
-EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
-RUN(video.removeAttribute(&quot;webkit-playsinline&quot;))
-EVENT(canplaythrough)
-RUN(video.play())
-EVENT(playing)
-EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
-RUN(internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(false))
-RUN(video.setAttribute(&quot;webkit-playsinline&quot;))
-EVENT(canplaythrough)
-RUN(video.play())
-EVENT(playing)
-EXPECTED (video.webkitDisplayingFullscreen == 'false') OK
-END OF TEST
-
</del></span></pre></div>
<a id="trunkLayoutTestsmediavideowebkitplaysinlinehtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/media/video-webkit-playsinline.html (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/video-webkit-playsinline.html        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/LayoutTests/media/video-webkit-playsinline.html        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,71 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;media-file.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;video-test.js&quot;&gt;&lt;/script&gt;
-&lt;script&gt;
-function go()
-{
-    runNextTest();
-}
-
-function runNextTest()
-{
-    if (tests.length)
-        tests.shift()();
-    else
-        endTest();
-}
-
-function testPlaysInline(requiresPlaysInline, hasWebkitPlaysInline, expectedDisplayingFullscreen)
-{
-    run('internals.settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(' + requiresPlaysInline + ')');
-    video = media = document.createElement('video');
-    document.body.appendChild(video);
-    video.controls = true;
-    video.src = findMediaFile('video', 'content/test');
-    run('video.' + (hasWebkitPlaysInline ? 'set' : 'remove') + 'Attribute(&quot;webkit-playsinline&quot;)');
-    waitForEventOnce('canplaythrough', () =&gt; {
-        runWithKeyDown(() =&gt; {
-            run('video.play()');
-        });
-    })
-    waitForEventOnce('playing', () =&gt; {
-        testExpected('video.webkitDisplayingFullscreen', expectedDisplayingFullscreen);
-        document.body.removeChild(video);
-        runNextTest();
-    });
-}
-
-function testRequiresPlaysInlineAndDoesntHaveIt()
-{
-    testPlaysInline(true, false, true);
-}
-
-function testRequiresPlaysInlineAndDoesHaveIt()
-{
-    testPlaysInline(true, true, false);
-}
-
-function testDoesNotRequirePlaysInlineAndDoesntHaveIt()
-{
-    testPlaysInline(false, false, false);
-}
-
-function testDoesNotRequirePlaysInlineAndDoesHaveIt()
-{
-    testPlaysInline(false, true, false);
-}
-
-var tests = [
-    testRequiresPlaysInlineAndDoesntHaveIt,
-    testRequiresPlaysInlineAndDoesHaveIt,
-    testDoesNotRequirePlaysInlineAndDoesntHaveIt,
-    testDoesNotRequirePlaysInlineAndDoesHaveIt,
-];
-
-&lt;/script&gt;
-&lt;/head&gt;
-&lt;body onload=&quot;go()&quot;&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/ChangeLog        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,3 +1,97 @@
</span><ins>+2016-07-21  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iPhone] Playing a video on tudou.com plays only sound, no video
+        https://bugs.webkit.org/show_bug.cgi?id=159967
+        &lt;rdar://problem/26964090&gt;
+
+        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
+
+        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:
+
</ins><span class="cx"> 2016-07-21  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Crash accessing null renderer inside WebCore::DeleteSelectionCommand::doApply
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlMediaElementSessioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/MediaElementSession.cpp (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/MediaElementSession.cpp        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/html/MediaElementSession.cpp        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -455,7 +455,16 @@
</span><span class="cx">     if (!settings || !settings-&gt;allowsInlineMediaPlayback())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    return settings-&gt;inlineMediaPlaybackRequiresPlaysInlineAttribute() &amp;&amp; !(element.hasAttributeWithoutSynchronization(HTMLNames::webkit_playsinlineAttr) || element.hasAttributeWithoutSynchronization(HTMLNames::playsinlineAttr));
</del><ins>+    bool requiresPlaysInline = settings-&gt;allowsInlineMediaPlaybackWithPlaysInlineAttribute();
+    bool requiresWebKitPlaysInline = settings-&gt;allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute();
+
+    if (!requiresPlaysInline &amp;&amp; !requiresWebKitPlaysInline)
+        return false;
+
+    bool hasPlaysInline = element.hasAttributeWithoutSynchronization(HTMLNames::playsinlineAttr);
+    bool hasWebKitPlaysInline = element.hasAttributeWithoutSynchronization(HTMLNames::webkit_playsinlineAttr);
+
+    return !((requiresPlaysInline &amp;&amp; hasPlaysInline) || (requiresWebKitPlaysInline &amp;&amp; hasWebKitPlaysInline));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool MediaElementSession::allowsAutomaticMediaDataLoading(const HTMLMediaElement&amp; element) const
</span></span></pre></div>
<a id="trunkSourceWebCorepageSettingscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Settings.cpp (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Settings.cpp        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/page/Settings.cpp        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -139,6 +139,8 @@
</span><span class="cx"> static const bool defaultAcceleratedCompositingForFixedPositionEnabled = true;
</span><span class="cx"> static const bool defaultAllowsInlineMediaPlayback = false;
</span><span class="cx"> static const bool defaultInlineMediaPlaybackRequiresPlaysInlineAttribute = true;
</span><ins>+static const bool defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute = true;
+static const bool defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = true;
</ins><span class="cx"> static const bool defaultVideoPlaybackRequiresUserGesture = true;
</span><span class="cx"> static const bool defaultAudioPlaybackRequiresUserGesture = true;
</span><span class="cx"> static const bool defaultMediaDataLoadsAutomatically = false;
</span><span class="lines">@@ -152,6 +154,8 @@
</span><span class="cx"> static const bool defaultAcceleratedCompositingForFixedPositionEnabled = false;
</span><span class="cx"> static const bool defaultAllowsInlineMediaPlayback = true;
</span><span class="cx"> static const bool defaultInlineMediaPlaybackRequiresPlaysInlineAttribute = false;
</span><ins>+static const bool defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute = false;
+static const bool defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = false;
</ins><span class="cx"> static const bool defaultVideoPlaybackRequiresUserGesture = false;
</span><span class="cx"> static const bool defaultAudioPlaybackRequiresUserGesture = false;
</span><span class="cx"> static const bool defaultMediaDataLoadsAutomatically = true;
</span></span></pre></div>
<a id="trunkSourceWebCorepageSettingsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Settings.in (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Settings.in        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/page/Settings.in        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -132,6 +132,8 @@
</span><span class="cx"> allowsInlineMediaPlayback initial=defaultAllowsInlineMediaPlayback
</span><span class="cx"> allowsInlineMediaPlaybackAfterFullscreen initial=true
</span><span class="cx"> inlineMediaPlaybackRequiresPlaysInlineAttribute initial=defaultInlineMediaPlaybackRequiresPlaysInlineAttribute
</span><ins>+allowsInlineMediaPlaybackWithPlaysInlineAttribute initial=defaultAllowsInlineMediaPlaybackWithPlaysInlineAttribute
+allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute initial=defaultAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
</ins><span class="cx"> allowsPictureInPictureMediaPlayback initial=defaultAllowsPictureInPictureMediaPlayback
</span><span class="cx"> mediaControlsScaleWithPageZoom initial=defaultMediaControlsScaleWithPageZoom
</span><span class="cx"> invisibleAutoplayNotPermitted initial=false
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalSettingscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/InternalSettings.cpp (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/InternalSettings.cpp        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/testing/InternalSettings.cpp        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -108,6 +108,8 @@
</span><span class="cx">     , m_allowsInlineMediaPlayback(settings.allowsInlineMediaPlayback())
</span><span class="cx">     , m_allowsInlineMediaPlaybackAfterFullscreen(settings.allowsInlineMediaPlaybackAfterFullscreen())
</span><span class="cx">     , m_inlineMediaPlaybackRequiresPlaysInlineAttribute(settings.inlineMediaPlaybackRequiresPlaysInlineAttribute())
</span><ins>+    , m_allowsInlineMediaPlaybackWithPlaysInlineAttribute(settings.allowsInlineMediaPlaybackWithPlaysInlineAttribute())
+    , m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(settings.allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute())
</ins><span class="cx"> #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
</span><span class="cx">     , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled())
</span><span class="cx"> #endif
</span><span class="lines">@@ -184,6 +186,8 @@
</span><span class="cx">     settings.setAllowsInlineMediaPlayback(m_allowsInlineMediaPlayback);
</span><span class="cx">     settings.setAllowsInlineMediaPlaybackAfterFullscreen(m_allowsInlineMediaPlaybackAfterFullscreen);
</span><span class="cx">     settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(m_inlineMediaPlaybackRequiresPlaysInlineAttribute);
</span><ins>+    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(m_allowsInlineMediaPlaybackWithPlaysInlineAttribute);
+    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute);
</ins><span class="cx">     RuntimeEnabledFeatures::sharedFeatures().setPluginReplacementEnabled(m_pluginReplacementEnabled);
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
</span><span class="cx">     RuntimeEnabledFeatures::sharedFeatures().setIndexedDBWorkersEnabled(m_indexedDBWorkersEnabled);
</span><span class="lines">@@ -580,6 +584,18 @@
</span><span class="cx">     settings()-&gt;setInlineMediaPlaybackRequiresPlaysInlineAttribute(requires);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InternalSettings::setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(bool requires, ExceptionCode&amp; ec)
+{
+    InternalSettingsGuardForSettings();
+    settings()-&gt;setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(requires);
+}
+
+void InternalSettings::setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(bool requires, ExceptionCode&amp; ec)
+{
+    InternalSettingsGuardForSettings();
+    settings()-&gt;setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(requires);
+}
+
</ins><span class="cx"> void InternalSettings::setIndexedDBWorkersEnabled(bool enabled, ExceptionCode&amp;)
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalSettingsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/InternalSettings.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/InternalSettings.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/testing/InternalSettings.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -108,6 +108,8 @@
</span><span class="cx">         bool m_allowsInlineMediaPlayback;
</span><span class="cx">         bool m_allowsInlineMediaPlaybackAfterFullscreen;
</span><span class="cx">         bool m_inlineMediaPlaybackRequiresPlaysInlineAttribute;
</span><ins>+        bool m_allowsInlineMediaPlaybackWithPlaysInlineAttribute;
+        bool m_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
</ins><span class="cx"> #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
</span><span class="cx">         bool m_indexedDBWorkersEnabled;
</span><span class="cx"> #endif
</span><span class="lines">@@ -163,6 +165,8 @@
</span><span class="cx">     void setAllowsInlineMediaPlayback(bool, ExceptionCode&amp;);
</span><span class="cx">     void setAllowsInlineMediaPlaybackAfterFullscreen(bool, ExceptionCode&amp;);
</span><span class="cx">     void setInlineMediaPlaybackRequiresPlaysInlineAttribute(bool, ExceptionCode&amp;);
</span><ins>+    void setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(bool, ExceptionCode&amp;);
+    void setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(bool, ExceptionCode&amp;);
</ins><span class="cx">     void setIndexedDBWorkersEnabled(bool, ExceptionCode&amp;);
</span><span class="cx">     String userInterfaceDirectionPolicy(ExceptionCode&amp;);
</span><span class="cx">     void setUserInterfaceDirectionPolicy(const String&amp; policy, ExceptionCode&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalSettingsidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/InternalSettings.idl (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/InternalSettings.idl        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebCore/testing/InternalSettings.idl        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -78,6 +78,8 @@
</span><span class="cx">     [RaisesException] void setAllowsInlineMediaPlayback(boolean allows);
</span><span class="cx">     [RaisesException] void setAllowsInlineMediaPlaybackAfterFullscreen(boolean allows);
</span><span class="cx">     [RaisesException] void setInlineMediaPlaybackRequiresPlaysInlineAttribute(boolean requires);
</span><ins>+    [RaisesException] void setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(boolean requires);
+    [RaisesException] void setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(boolean requires);
</ins><span class="cx"> 
</span><span class="cx">     [RaisesException] void setIndexedDBWorkersEnabled(boolean requires);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2016-07-21  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iPhone] Playing a video on tudou.com plays only sound, no video
+        https://bugs.webkit.org/show_bug.cgi?id=159967
+        &lt;rdar://problem/26964090&gt;
+
+        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
+
+        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:]):
+
</ins><span class="cx"> 2016-07-20  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r203471.
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferenceKeysPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -127,6 +127,8 @@
</span><span class="cx"> #define WebKitAllowsInlineMediaPlaybackPreferenceKey @&quot;WebKitMediaPlaybackAllowsInline&quot;
</span><span class="cx"> #define WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey @&quot;WebKitAllowsInlineMediaPlaybackAfterFullscreen&quot;
</span><span class="cx"> #define WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey @&quot;InlineMediaPlaybackRequiresPlaysInlineAttribute&quot;
</span><ins>+#define WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey @&quot;AllowsInlineMediaPlaybackWithPlaysInlineAttribute&quot;
+#define WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey @&quot;AllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute&quot;
</ins><span class="cx"> #define WebKitInvisibleAutoplayNotPermittedKey @&quot;InvisibleAutoplayNotPermitted&quot;
</span><span class="cx"> #define WebKitAllowsPictureInPictureMediaPlaybackPreferenceKey @&quot;WebKitAllowsPictureInPictureMediaPlayback&quot;
</span><span class="cx"> #define WebKitAllowsAirPlayForMediaPlaybackPreferenceKey @&quot;WebKitMediaPlaybackAllowsAirPlay&quot;
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferencesmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -525,7 +525,9 @@
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx">         [NSNumber numberWithBool:YES],  WebKitAllowsInlineMediaPlaybackPreferenceKey,
</span><span class="cx">         [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey,
</span><del>-        [NSNumber numberWithBool:NO],  WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
</del><ins>+        [NSNumber numberWithBool:NO],   WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
+        [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey,
+        [NSNumber numberWithBool:NO],   WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey,
</ins><span class="cx">         [NSNumber numberWithBool:YES],  WebKitMediaControlsScaleWithPageZoomPreferenceKey,
</span><span class="cx">         [NSNumber numberWithBool:NO],   WebKitWebAudioEnabledPreferenceKey,
</span><span class="cx">         [NSNumber numberWithBool:YES],  WebKitBackspaceKeyNavigationEnabledKey,
</span><span class="lines">@@ -539,6 +541,8 @@
</span><span class="cx">         [NSNumber numberWithBool:allowsInlineMediaPlayback],   WebKitAllowsInlineMediaPlaybackPreferenceKey,
</span><span class="cx">         [NSNumber numberWithBool:allowsInlineMediaPlaybackAfterFullscreen],   WebKitAllowsInlineMediaPlaybackAfterFullscreenPreferenceKey,
</span><span class="cx">         [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey,
</span><ins>+        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey,
+        [NSNumber numberWithBool:requiresPlaysInlineAttribute], WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey,
</ins><span class="cx">         [NSNumber numberWithBool:NO],   WebKitMediaControlsScaleWithPageZoomPreferenceKey,
</span><span class="cx">         [NSNumber numberWithUnsignedInt:AudioSession::None],  WebKitAudioSessionCategoryOverride,
</span><span class="cx">         [NSNumber numberWithBool:NO],   WebKitMediaDataLoadsAutomaticallyPreferenceKey,
</span><span class="lines">@@ -2293,6 +2297,26 @@
</span><span class="cx">     [self _setBoolValue:flag forKey:WebKitInlineMediaPlaybackRequiresPlaysInlineAttributeKey];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)allowsInlineMediaPlaybackWithPlaysInlineAttribute
+{
+    return [self _boolValueForKey:WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey];
+}
+
+- (void)setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitAllowsInlineMediaPlaybackWithPlaysInlineAttributeKey];
+}
+
+- (BOOL)allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
+{
+    return [self _boolValueForKey:WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey];
+}
+
+- (void)setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey];
+}
+
</ins><span class="cx"> - (BOOL)invisibleAutoplayNotPermitted
</span><span class="cx"> {
</span><span class="cx">     return [self _boolValueForKey:WebKitInvisibleAutoplayNotPermittedKey];
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebPreferencesPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -265,6 +265,12 @@
</span><span class="cx"> - (void)setInlineMediaPlaybackRequiresPlaysInlineAttribute:(BOOL)flag;
</span><span class="cx"> - (BOOL)inlineMediaPlaybackRequiresPlaysInlineAttribute;
</span><span class="cx"> 
</span><ins>+- (void)setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)flag;
+- (BOOL)allowsInlineMediaPlaybackWithPlaysInlineAttribute;
+
+- (void)setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)flag;
+- (BOOL)allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
+
</ins><span class="cx"> - (void)setInvisibleAutoplayNotPermitted:(BOOL)flag;
</span><span class="cx"> - (BOOL)invisibleAutoplayNotPermitted;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -2349,6 +2349,8 @@
</span><span class="cx">     settings.setAllowsInlineMediaPlayback([preferences mediaPlaybackAllowsInline]);
</span><span class="cx">     settings.setAllowsInlineMediaPlaybackAfterFullscreen([preferences allowsInlineMediaPlaybackAfterFullscreen]);
</span><span class="cx">     settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute([preferences inlineMediaPlaybackRequiresPlaysInlineAttribute]);
</span><ins>+    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute([preferences allowsInlineMediaPlaybackWithPlaysInlineAttribute]);
+    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute([preferences allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]);
</ins><span class="cx">     settings.setInvisibleAutoplayNotPermitted([preferences invisibleAutoplayNotPermitted]);
</span><span class="cx">     settings.setAllowsPictureInPictureMediaPlayback([preferences allowsPictureInPictureMediaPlayback] &amp;&amp; shouldAllowPictureInPictureMediaPlayback());
</span><span class="cx">     settings.setMediaControlsScaleWithPageZoom([preferences mediaControlsScaleWithPageZoom]);
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/ChangeLog        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2016-07-21  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iPhone] Playing a video on tudou.com plays only sound, no video
+        https://bugs.webkit.org/show_bug.cgi?id=159967
+        &lt;rdar://problem/26964090&gt;
+
+        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
+
+        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):
+
</ins><span class="cx"> 2016-07-21  Yongjun Zhang  &lt;yongjun_zhang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebBackForwardList's currentIndex could get out of bounds when filtering items.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesDefinitionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -66,6 +66,8 @@
</span><span class="cx"> #define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK false
</span><span class="cx"> #define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN true
</span><span class="cx"> #define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE true
</span><ins>+#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE true
+#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE true
</ins><span class="cx"> #define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED true
</span><span class="cx"> #define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY false
</span><span class="cx"> #define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM false
</span><span class="lines">@@ -83,6 +85,8 @@
</span><span class="cx"> #define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK true
</span><span class="cx"> #define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN false
</span><span class="cx"> #define DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE false
</span><ins>+#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE false
+#define DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE false
</ins><span class="cx"> #define DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED false
</span><span class="cx"> #define DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY true
</span><span class="cx"> #define DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM true
</span><span class="lines">@@ -153,6 +157,8 @@
</span><span class="cx">     macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK, &quot;&quot;, &quot;&quot;) \
</span><span class="cx">     macro(AllowsInlineMediaPlaybackAfterFullscreen, allowsInlineMediaPlaybackAfterFullscreen, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_AFTER_FULLSCREEN, &quot;&quot;, &quot;&quot;) \
</span><span class="cx">     macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE, &quot;&quot;, &quot;&quot;) \
</span><ins>+    macro(AllowsInlineMediaPlaybackWithPlaysInlineAttribute, allowsInlineMediaPlaybackWithPlaysInlineAttribute, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_PLAYS_INLINE_ATTRIBUTE, &quot;&quot;, &quot;&quot;) \
+    macro(AllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute, allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK_WITH_WEBKIT_PLAYS_INLINE_ATTRIBUTE, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     macro(InvisibleAutoplayNotPermitted, invisibleAutoplayNotPermitted, Bool, bool, DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED, &quot;&quot;, &quot;&quot;) \
</span><span class="cx">     macro(MediaDataLoadsAutomatically, mediaDataLoadsAutomatically, Bool, bool, DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY, &quot;&quot;, &quot;&quot;) \
</span><span class="cx">     macro(AllowsPictureInPictureMediaPlayback, allowsPictureInPictureMediaPlayback, Bool, bool, DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK, &quot;&quot;, &quot;&quot;) \
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPreferencescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -803,6 +803,26 @@
</span><span class="cx">     return toImpl(preferencesRef)-&gt;inlineMediaPlaybackRequiresPlaysInlineAttribute();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)-&gt;setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(flag);
+}
+
+bool WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)-&gt;allowsInlineMediaPlaybackWithPlaysInlineAttribute();
+}
+
+void WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)-&gt;setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(flag);
+}
+
+bool WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)-&gt;allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute();
+}
+
</ins><span class="cx"> void WKPreferencesSetMediaControlsScaleWithPageZoom(WKPreferencesRef preferencesRef, bool flag)
</span><span class="cx"> {
</span><span class="cx">     toImpl(preferencesRef)-&gt;setMediaControlsScaleWithPageZoom(flag);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPreferencesRefPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -195,6 +195,14 @@
</span><span class="cx"> WK_EXPORT void WKPreferencesSetInlineMediaPlaybackRequiresPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag);
</span><span class="cx"> WK_EXPORT bool WKPreferencesGetInlineMediaPlaybackRequiresPlaysInlineAttribute(WKPreferencesRef preferencesRef);
</span><span class="cx"> 
</span><ins>+// Defaults to true on iOS, false elsewhere.
+WK_EXPORT void WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute(WKPreferencesRef preferencesRef);
+
+// Defaults to true on iOS, false elsewhere.
+WK_EXPORT void WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(WKPreferencesRef preferencesRef);
+
</ins><span class="cx"> // Defaults to false on iOS, true elsewhere.
</span><span class="cx"> WK_EXPORT void WKPreferencesSetMediaControlsScaleWithPageZoom(WKPreferencesRef preferencesRef, bool flag);
</span><span class="cx"> WK_EXPORT bool WKPreferencesGetMediaControlsScaleWithPageZoom(WKPreferencesRef preferencesRef);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -456,6 +456,8 @@
</span><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsInlineMediaPlayback]));
</span><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackAfterFullscreenKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackAfterFullscreen]));
</span><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _inlineMediaPlaybackRequiresPlaysInlineAttribute]));
</span><ins>+    pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackWithPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]));
+    pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]));
</ins><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] &amp;&amp; shouldAllowPictureInPictureMediaPlayback()));
</span><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::userInterfaceDirectionPolicyKey(), WebKit::WebPreferencesStore::Value(static_cast&lt;uint32_t&gt;(WebCore::UserInterfaceDirectionPolicy::Content)));
</span><span class="cx">     pageConfiguration-&gt;preferenceValues().set(WebKit::WebPreferencesKey::systemLayoutDirectionKey(), WebKit::WebPreferencesStore::Value(static_cast&lt;uint32_t&gt;(WebCore::LTR)));
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -108,6 +108,8 @@
</span><span class="cx">     BOOL _alwaysRunsAtForegroundPriority;
</span><span class="cx">     BOOL _allowsInlineMediaPlayback;
</span><span class="cx">     BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute;
</span><ins>+    BOOL _allowsInlineMediaPlaybackWithPlaysInlineAttribute;
+    BOOL _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
</ins><span class="cx">     BOOL _allowsInlineMediaPlaybackAfterFullscreen;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -138,6 +140,8 @@
</span><span class="cx">     _allowsPictureInPictureMediaPlayback = YES;
</span><span class="cx">     _allowsInlineMediaPlayback = WebCore::deviceClass() == MGDeviceClassiPad;
</span><span class="cx">     _inlineMediaPlaybackRequiresPlaysInlineAttribute = !_allowsInlineMediaPlayback;
</span><ins>+    _allowsInlineMediaPlaybackWithPlaysInlineAttribute = !_allowsInlineMediaPlayback;
+    _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = !_allowsInlineMediaPlayback;
</ins><span class="cx">     _allowsInlineMediaPlaybackAfterFullscreen = !_allowsInlineMediaPlayback;
</span><span class="cx">     _mediaDataLoadsAutomatically = NO;
</span><span class="cx">     if (linkedOnOrAfter(WebKit::LibraryVersion::FirstWithMediaTypesRequiringUserActionForPlayback))
</span><span class="lines">@@ -289,6 +293,8 @@
</span><span class="cx">     configuration-&gt;_allowsInlineMediaPlayback = self-&gt;_allowsInlineMediaPlayback;
</span><span class="cx">     configuration-&gt;_allowsInlineMediaPlaybackAfterFullscreen = self-&gt;_allowsInlineMediaPlaybackAfterFullscreen;
</span><span class="cx">     configuration-&gt;_inlineMediaPlaybackRequiresPlaysInlineAttribute = self-&gt;_inlineMediaPlaybackRequiresPlaysInlineAttribute;
</span><ins>+    configuration-&gt;_allowsInlineMediaPlaybackWithPlaysInlineAttribute = self-&gt;_allowsInlineMediaPlaybackWithPlaysInlineAttribute;
+    configuration-&gt;_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = self-&gt;_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
</ins><span class="cx">     configuration-&gt;_allowsPictureInPictureMediaPlayback = self-&gt;_allowsPictureInPictureMediaPlayback;
</span><span class="cx">     configuration-&gt;_alwaysRunsAtForegroundPriority = _alwaysRunsAtForegroundPriority;
</span><span class="cx">     configuration-&gt;_selectionGranularity = self-&gt;_selectionGranularity;
</span><span class="lines">@@ -578,6 +584,26 @@
</span><span class="cx">     _inlineMediaPlaybackRequiresPlaysInlineAttribute = requires;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)_allowsInlineMediaPlaybackWithPlaysInlineAttribute
+{
+    return _allowsInlineMediaPlaybackWithPlaysInlineAttribute;
+}
+
+- (void)_setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:(BOOL)requires
+{
+    _allowsInlineMediaPlaybackWithPlaysInlineAttribute = requires;
+}
+
+- (BOOL)_allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute
+{
+    return _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute;
+}
+
+- (void)_setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:(BOOL)requires
+{
+    _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = requires;
+}
+
</ins><span class="cx"> - (BOOL)_allowsInlineMediaPlaybackAfterFullscreen
</span><span class="cx"> {
</span><span class="cx">     return _allowsInlineMediaPlaybackAfterFullscreen;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewConfigurationPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -60,6 +60,8 @@
</span><span class="cx"> #if TARGET_OS_IPHONE
</span><span class="cx"> @property (nonatomic, setter=_setAlwaysRunsAtForegroundPriority:) BOOL _alwaysRunsAtForegroundPriority WK_API_AVAILABLE(ios(9_0));
</span><span class="cx"> @property (nonatomic, setter=_setInlineMediaPlaybackRequiresPlaysInlineAttribute:) BOOL _inlineMediaPlaybackRequiresPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
</span><ins>+@property (nonatomic, setter=_setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:) BOOL _allowsInlineMediaPlaybackWithPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
+@property (nonatomic, setter=_setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:) BOOL _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute WK_API_AVAILABLE(ios(WK_IOS_TBA));
</ins><span class="cx"> @property (nonatomic, setter=_setAllowsInlineMediaPlaybackAfterFullscreen:) BOOL _allowsInlineMediaPlaybackAfterFullscreen  WK_API_AVAILABLE(ios(WK_IOS_TBA));
</span><span class="cx"> #else
</span><span class="cx"> @property (nonatomic, setter=_setShowsURLsInToolTips:) BOOL _showsURLsInToolTips WK_API_AVAILABLE(macosx(WK_MAC_TBA));
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -2986,6 +2986,8 @@
</span><span class="cx">     settings.setAllowsInlineMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackKey()));
</span><span class="cx">     settings.setAllowsInlineMediaPlaybackAfterFullscreen(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackAfterFullscreenKey()));
</span><span class="cx">     settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::inlineMediaPlaybackRequiresPlaysInlineAttributeKey()));
</span><ins>+    settings.setAllowsInlineMediaPlaybackWithPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackWithPlaysInlineAttributeKey()));
+    settings.setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackWithWebKitPlaysInlineAttributeKey()));
</ins><span class="cx">     settings.setInvisibleAutoplayNotPermitted(store.getBoolValueForKey(WebPreferencesKey::invisibleAutoplayNotPermittedKey()));
</span><span class="cx">     settings.setMediaDataLoadsAutomatically(store.getBoolValueForKey(WebPreferencesKey::mediaDataLoadsAutomaticallyKey()));
</span><span class="cx"> #if ENABLE(ATTACHMENT_ELEMENT)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Tools/ChangeLog        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-07-21  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iPhone] Playing a video on tudou.com plays only sound, no video
+        https://bugs.webkit.org/show_bug.cgi?id=159967
+        &lt;rdar://problem/26964090&gt;
+
+        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.
+
+        Migrate tests to use new SPI.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
+        (RequiresUserActionForPlaybackTest::SetUp):
+        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+        (WTR::initializeWebViewConfiguration):
+
</ins><span class="cx"> 2016-07-21  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Clarify testing mode names in run-jsc-stress-tests
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaRequiresUserActionForPlaybackmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -77,6 +77,8 @@
</span><span class="cx"> #if TARGET_OS_IPHONE
</span><span class="cx">         configuration.get().allowsInlineMediaPlayback = YES;
</span><span class="cx">         configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO;
</span><ins>+        configuration.get()._allowsInlineMediaPlaybackWithPlaysInlineAttribute = NO;
+        configuration.get()._allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = NO;
</ins><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnercocoaTestControllerCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (203519 => 203520)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm        2016-07-21 20:04:10 UTC (rev 203519)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm        2016-07-21 20:19:22 UTC (rev 203520)
</span><span class="lines">@@ -62,6 +62,8 @@
</span><span class="cx"> #if TARGET_OS_IPHONE
</span><span class="cx">     globalWebViewConfiguration.allowsInlineMediaPlayback = YES;
</span><span class="cx">     globalWebViewConfiguration._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO;
</span><ins>+    globalWebViewConfiguration._allowsInlineMediaPlaybackWithPlaysInlineAttribute = NO;
+    globalWebViewConfiguration._allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute = NO;
</ins><span class="cx">     globalWebViewConfiguration._invisibleAutoplayNotPermitted = NO;
</span><span class="cx">     globalWebViewConfiguration._mediaDataLoadsAutomatically = YES;
</span><span class="cx">     globalWebViewConfiguration.requiresUserActionForMediaPlayback = NO;
</span></span></pre>
</div>
</div>

</body>
</html>