<!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>[212948] 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/212948">212948</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2017-02-23 23:38:41 -0800 (Thu, 23 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Modern Media Controls] No controls are shown for &lt;audio preload=&quot;none&quot;&gt;
https://bugs.webkit.org/show_bug.cgi?id=168800
&lt;rdar://problem/30652142&gt;

Patch by Antoine Quint &lt;graouts@apple.com&gt; on 2017-02-23
Reviewed by Eric Carlson.

Source/WebCore:

A media element's currentSrc property will only be set when data has started
to load. In the case where preload=&quot;none&quot; is used, regardless of whether a
source is specified, currentSrc would be the empty string and we wouldn't
show controls at all. Identifying whether a source is specified is a little
tricky because it could be specified in a variety of ways and dynamically
as well.

So instead we optimistically show controls always provided the &quot;controls&quot;
attribute is set.

* Modules/modern-media-controls/media/controls-visibility-support.js:
(ControlsVisibilitySupport.prototype._updateControls):
(ControlsVisibilitySupport):
* Modules/modern-media-controls/media/start-support.js:
(StartSupport.prototype._shouldShowStartButton):
(StartSupport):

LayoutTests:

Update tests to account for the new rules for controls visibility and force an older test
not to use modern media controls since we now show the play button and there is a bug
that prevents the play button from being positioned correctly when inside a region
(see https://bugs.webkit.org/show_bug.cgi?id=168823).

* fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html
* fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html
* media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt:
* media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html:
* media/modern-media-controls/start-support/start-support-no-source-expected.txt:
* media/modern-media-controls/start-support/start-support-no-source.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastregionsinlineblockinsideanonymousoverflowwithcoveredcontrolsexpectedhtml">trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsinlineblockinsideanonymousoverflowwithcoveredcontrolshtml">trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolscontrolsvisibilitysupportcontrolsvisibilitysupportcontrolsonaudioexpectedtxt">trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolscontrolsvisibilitysupportcontrolsvisibilitysupportcontrolsonaudiohtml">trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourceexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourcehtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediacontrolsvisibilitysupportjs">trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediastartsupportjs">trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/ChangeLog        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2017-02-23  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] No controls are shown for &lt;audio preload=&quot;none&quot;&gt;
+        https://bugs.webkit.org/show_bug.cgi?id=168800
+        &lt;rdar://problem/30652142&gt;
+
+        Reviewed by Eric Carlson.
+
+        Update tests to account for the new rules for controls visibility and force an older test
+        not to use modern media controls since we now show the play button and there is a bug
+        that prevents the play button from being positioned correctly when inside a region
+        (see https://bugs.webkit.org/show_bug.cgi?id=168823).
+
+        * fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html
+        * fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html
+        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt:
+        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html:
+        * media/modern-media-controls/start-support/start-support-no-source-expected.txt:
+        * media/modern-media-controls/start-support/start-support-no-source.html:
+
</ins><span class="cx"> 2017-02-23  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Resource Timing] Gather timing information with reliable responseEnd time
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsinlineblockinsideanonymousoverflowwithcoveredcontrolsexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-&lt;!DOCTYPE html&gt;
</del><ins>+&lt;!DOCTYPE html&gt;&lt;!-- webkit-test-runner [ enableModernMediaControls=false ] --&gt;
</ins><span class="cx"> &lt;html&gt;
</span><span class="cx">     &lt;head&gt;
</span><span class="cx">         &lt;style&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsinlineblockinsideanonymousoverflowwithcoveredcontrolshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-&lt;!DOCTYPE html&gt;
</del><ins>+&lt;!DOCTYPE html&gt;&lt;!-- webkit-test-runner [ enableModernMediaControls=false ] --&gt;
</ins><span class="cx"> &lt;html&gt;
</span><span class="cx">     &lt;head&gt;
</span><span class="cx">         &lt;style&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolscontrolsvisibilitysupportcontrolsvisibilitysupportcontrolsonaudioexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio-expected.txt        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -3,9 +3,9 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-Media has not begun loading yet, no UI is showing yet as we wait for enough information to tell if we'll be able to play
-PASS mediaController.controls.controlsBar.visible is false
-PASS mediaController.controls.startButton.visible is false
</del><ins>+Media has not begun loading yet
+PASS mediaController.controls.controlsBar.visible is true
+PASS mediaController.controls.startButton.visible is true
</ins><span class="cx"> 
</span><span class="cx"> Media has loaded metadata
</span><span class="cx"> PASS mediaController.controls.controlsBar.visible is true
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolscontrolsvisibilitysupportcontrolsvisibilitysupportcontrolsonaudiohtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-audio.html        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -13,9 +13,9 @@
</span><span class="cx"> const media = document.querySelector(&quot;audio&quot;);
</span><span class="cx"> const mediaController = createControls(shadowRoot, media, null);
</span><span class="cx"> 
</span><del>-debug(&quot;Media has not begun loading yet, no UI is showing yet as we wait for enough information to tell if we'll be able to play&quot;);
-shouldBeFalse(&quot;mediaController.controls.controlsBar.visible&quot;);
-shouldBeFalse(&quot;mediaController.controls.startButton.visible&quot;);
</del><ins>+debug(&quot;Media has not begun loading yet&quot;);
+shouldBeTrue(&quot;mediaController.controls.controlsBar.visible&quot;);
+shouldBeTrue(&quot;mediaController.controls.startButton.visible&quot;);
</ins><span class="cx"> 
</span><span class="cx"> media.addEventListener(&quot;loadedmetadata&quot;, function() {
</span><span class="cx">     debug(&quot;&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourceexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -3,7 +3,7 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS mediaController.controls.showsStartButton is false
</del><ins>+PASS mediaController.controls.showsStartButton is true
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourcehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx"> const media = document.querySelector(&quot;video&quot;);
</span><span class="cx"> const mediaController = createControls(shadowRoot, media, null);
</span><span class="cx"> 
</span><del>-shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
</del><ins>+shouldBeTrue(&quot;mediaController.controls.showsStartButton&quot;);
</ins><span class="cx"> 
</span><span class="cx"> shadowRoot.host.remove();
</span><span class="cx"> media.remove();
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/Source/WebCore/ChangeLog        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2017-02-23  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] No controls are shown for &lt;audio preload=&quot;none&quot;&gt;
+        https://bugs.webkit.org/show_bug.cgi?id=168800
+        &lt;rdar://problem/30652142&gt;
+
+        Reviewed by Eric Carlson.
+
+        A media element's currentSrc property will only be set when data has started
+        to load. In the case where preload=&quot;none&quot; is used, regardless of whether a
+        source is specified, currentSrc would be the empty string and we wouldn't
+        show controls at all. Identifying whether a source is specified is a little
+        tricky because it could be specified in a variety of ways and dynamically
+        as well.
+
+        So instead we optimistically show controls always provided the &quot;controls&quot;
+        attribute is set.
+
+        * Modules/modern-media-controls/media/controls-visibility-support.js:
+        (ControlsVisibilitySupport.prototype._updateControls):
+        (ControlsVisibilitySupport):
+        * Modules/modern-media-controls/media/start-support.js:
+        (StartSupport.prototype._shouldShowStartButton):
+        (StartSupport):
+
</ins><span class="cx"> 2017-02-23  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Resource Timing] Gather timing information with reliable responseEnd time
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediacontrolsvisibilitysupportjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -63,10 +63,8 @@
</span><span class="cx">     _updateControls()
</span><span class="cx">     {
</span><span class="cx">         const media = this.mediaController.media;
</span><ins>+        const shouldShowControls = !!media.controls;
</ins><span class="cx">         const isVideo = media instanceof HTMLVideoElement &amp;&amp; media.videoTracks.length &gt; 0;
</span><del>-        let shouldShowControls = media.controls &amp;&amp; !!media.currentSrc;
-        if (isVideo)
-            shouldShowControls = shouldShowControls &amp;&amp; media.readyState &gt; HTMLMediaElement.HAVE_NOTHING;
</del><span class="cx"> 
</span><span class="cx">         const controls = this.mediaController.controls;
</span><span class="cx">         controls.startButton.visible = shouldShowControls;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediastartsupportjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js (212947 => 212948)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js        2017-02-24 07:17:48 UTC (rev 212947)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js        2017-02-24 07:38:41 UTC (rev 212948)
</span><span class="lines">@@ -77,9 +77,6 @@
</span><span class="cx">         if (media.webkitDisplayingFullscreen)
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        if (!media.currentSrc)
-            return false;
-
</del><span class="cx">         if (media.error)
</span><span class="cx">             return false;
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>