<!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>[212980] 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/212980">212980</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2017-02-24 17:03:30 -0800 (Fri, 24 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Modern Media Controls] &lt;audio&gt; controls should center in their container when the page is scaled
https://bugs.webkit.org/show_bug.cgi?id=168841
&lt;rdar://problem/28612794&gt;

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

Source/WebCore:

When dealing with &lt;audio&gt; elements, we vertically center the controls relative to their containing
media element such that if the controls visually overflow, they overflow equally above and below
to minimize the likelihood of overlap with surrounding elements.

Test: media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html

* Modules/modern-media-controls/controls/media-controls.js:
(MediaControls.prototype.get shouldCenterControlsVertically):
(MediaControls.prototype.set shouldCenterControlsVertically):
(MediaControls.prototype.commitProperty):
* Modules/modern-media-controls/media/media-controller.js:
(MediaController.prototype.get isAudio):
(MediaController.prototype.get layoutTraits):
(MediaController.prototype._updateControlsSize):

LayoutTests:

Adding test coverage for the &quot;top&quot; property set on the media controls to achieve vertical centering,
and creating a new test that checks the behavior for an &lt;audio&gt; element on iOS.

* TestExpectations:
* media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt: Added.
* media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html: Added.
* media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt:
* media/modern-media-controls/media-controller/media-controller-scale-factor.html:
* platform/ios-simulator/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor.html</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorTestExpectations">trunk/LayoutTests/platform/ios-simulator/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudioexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudiohtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/LayoutTests/ChangeLog        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-02-24  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] &lt;audio&gt; controls should center in their container when the page is scaled
+        https://bugs.webkit.org/show_bug.cgi?id=168841
+        &lt;rdar://problem/28612794&gt;
+
+        Reviewed by Eric Carlson.
+
+        Adding test coverage for the &quot;top&quot; property set on the media controls to achieve vertical centering,
+        and creating a new test that checks the behavior for an &lt;audio&gt; element on iOS.
+
+        * TestExpectations:
+        * media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt: Added.
+        * media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html: Added.
+        * media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt:
+        * media/modern-media-controls/media-controller/media-controller-scale-factor.html:
+        * platform/ios-simulator/TestExpectations:
+
</ins><span class="cx"> 2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Download attribute should be sanitized before being used as suggested filename
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/LayoutTests/TestExpectations        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -1034,6 +1034,7 @@
</span><span class="cx"> 
</span><span class="cx"> # iOS-specific test
</span><span class="cx"> media/modern-media-controls/media-controller/media-controller-scale-factor.html [ Skip ]
</span><ins>+media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html [ Skip ]
</ins><span class="cx"> 
</span><span class="cx"> webkit.org/b/166911 fast/dom/Window/window-properties-performance.html [ Pass Failure ]
</span><span class="cx"> webkit.org/b/166911 fast/dom/Window/window-properties-performance-resource-timing.html [ Pass Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudioexpectedtxtfromrev212977trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt (from rev 212977, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt) (0 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Testing that we apply a CSS zoom to ensure controls are always 50 device points tall on iOS for audio and also center the controls vertically.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS shadowRoot.querySelector('.media-controls').style.width is &quot;800px&quot;
+PASS shadowRoot.querySelector('.media-controls').style.height is &quot;100px&quot;
+PASS shadowRoot.querySelector('.media-controls').style.zoom is &quot;0.5&quot;
+PASS shadowRoot.querySelector('.media-controls').style.top is &quot;-25px&quot;
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudiohtmlfromrev212977trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorhtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html (from rev 212977, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor.html) (0 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;meta name=&quot;viewport&quot; content=&quot;width=400&quot;&gt;
+&lt;body&gt;
+&lt;audio src=&quot;../../content/test.mp3&quot; style=&quot;position: absolute; top: 100px; left: 0; width: 400px;&quot; controls&gt;&lt;/audio&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing that we apply a CSS zoom to ensure controls are always 50 device points tall on iOS for audio and also center the controls vertically.&quot;);
+
+const media = document.querySelector(&quot;audio&quot;);
+const shadowRoot = window.internals.shadowRoot(media);
+
+window.requestAnimationFrame(() =&gt; {
+    shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.width&quot;, &quot;800px&quot;);
+    shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.height&quot;, &quot;100px&quot;);
+    shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.zoom&quot;, &quot;0.5&quot;);
+    shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.top&quot;, &quot;-25px&quot;);
+
+    debug(&quot;&quot;);
+    media.remove();
+    finishJSTest();
+});
+
+&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-expected.txt        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-Testing the MediaController has a single container for captions and media controls.
</del><ins>+Testing that we apply a CSS zoom to ensure controls are always 50 device points tall on iOS.
</ins><span class="cx"> 
</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="lines">@@ -6,6 +6,7 @@
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.width is &quot;800px&quot;
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.height is &quot;600px&quot;
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.zoom is &quot;0.5&quot;
</span><ins>+PASS shadowRoot.querySelector('.media-controls').style.top is &quot;auto&quot;
</ins><span class="cx"> 
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactorhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor.html (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor.html        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor.html        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -7,7 +7,7 @@
</span><span class="cx"> 
</span><span class="cx"> window.jsTestIsAsync = true;
</span><span class="cx"> 
</span><del>-description(&quot;Testing the &lt;code&gt;MediaController&lt;/code&gt; has a single container for captions and media controls.&quot;);
</del><ins>+description(&quot;Testing that we apply a CSS zoom to ensure controls are always 50 device points tall on iOS.&quot;);
</ins><span class="cx"> 
</span><span class="cx"> const media = document.querySelector(&quot;video&quot;);
</span><span class="cx"> const shadowRoot = window.internals.shadowRoot(media);
</span><span class="lines">@@ -16,6 +16,7 @@
</span><span class="cx">     shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.width&quot;, &quot;800px&quot;);
</span><span class="cx">     shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.height&quot;, &quot;600px&quot;);
</span><span class="cx">     shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.zoom&quot;, &quot;0.5&quot;);
</span><ins>+    shouldBeEqualToString(&quot;shadowRoot.querySelector('.media-controls').style.top&quot;, &quot;auto&quot;);
</ins><span class="cx"> 
</span><span class="cx">     debug(&quot;&quot;);
</span><span class="cx">     media.remove();
</span></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -2779,6 +2779,7 @@
</span><span class="cx"> 
</span><span class="cx"> # iOS-specific test
</span><span class="cx"> media/modern-media-controls/media-controller/media-controller-scale-factor.html [ Pass ]
</span><ins>+media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html [ Pass ]
</ins><span class="cx"> 
</span><span class="cx"> # The tracks menu is never used in media controls on iOS
</span><span class="cx"> media/modern-media-controls/tracks-panel [ Skip ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/Source/WebCore/ChangeLog        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2017-02-24  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] &lt;audio&gt; controls should center in their container when the page is scaled
+        https://bugs.webkit.org/show_bug.cgi?id=168841
+        &lt;rdar://problem/28612794&gt;
+
+        Reviewed by Eric Carlson.
+
+        When dealing with &lt;audio&gt; elements, we vertically center the controls relative to their containing
+        media element such that if the controls visually overflow, they overflow equally above and below
+        to minimize the likelihood of overlap with surrounding elements.
+
+        Test: media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html
+
+        * Modules/modern-media-controls/controls/media-controls.js:
+        (MediaControls.prototype.get shouldCenterControlsVertically):
+        (MediaControls.prototype.set shouldCenterControlsVertically):
+        (MediaControls.prototype.commitProperty):
+        * Modules/modern-media-controls/media/media-controller.js:
+        (MediaController.prototype.get isAudio):
+        (MediaController.prototype.get layoutTraits):
+        (MediaController.prototype._updateControlsSize):
+
</ins><span class="cx"> 2017-02-24  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Non-special relative URLs should not ignore extra slashes
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx">         super(`&lt;div class=&quot;media-controls&quot;&gt;&lt;/div&gt;`);
</span><span class="cx"> 
</span><span class="cx">         this._scaleFactor = 1;
</span><ins>+        this._shouldCenterControlsVertically = false;
</ins><span class="cx"> 
</span><span class="cx">         this.width = width;
</span><span class="cx">         this.height = height;
</span><span class="lines">@@ -96,6 +97,20 @@
</span><span class="cx">         this.markDirtyProperty(&quot;scaleFactor&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    get shouldCenterControlsVertically()
+    {
+        return this._shouldCenterControlsVertically;
+    }
+
+    set shouldCenterControlsVertically(flag)
+    {
+        if (this._shouldCenterControlsVertically === flag)
+            return;
+
+        this._shouldCenterControlsVertically = flag;
+        this.markDirtyProperty(&quot;scaleFactor&quot;);
+    }
+
</ins><span class="cx">     get showsPlacard()
</span><span class="cx">     {
</span><span class="cx">         return this.children[0] instanceof Placard;
</span><span class="lines">@@ -126,9 +141,13 @@
</span><span class="cx"> 
</span><span class="cx">     commitProperty(propertyName)
</span><span class="cx">     {
</span><del>-        if (propertyName === &quot;scaleFactor&quot;)
-            this.element.style.zoom = 1 / this._scaleFactor;
-        else
</del><ins>+        if (propertyName === &quot;scaleFactor&quot;) {
+            const zoom = 1 / this._scaleFactor;
+            // We want to maintain the controls at a constant device height.
+            this.element.style.zoom = zoom;
+            // We also want to optionally center them vertically compared to their container.
+            this.element.style.top = this._shouldCenterControlsVertically ? `${(this.height / 2) * (zoom - 1)}px` : &quot;auto&quot;; 
+        } else
</ins><span class="cx">             super.commitProperty(propertyName);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (212979 => 212980)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-02-25 00:47:00 UTC (rev 212979)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-02-25 01:03:30 UTC (rev 212980)
</span><span class="lines">@@ -60,6 +60,11 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><ins>+    get isAudio()
+    {
+        return this.media instanceof HTMLAudioElement || (this.media.readyState &gt;= HTMLMediaElement.HAVE_METADATA &amp;&amp; this.media.videoWidth === 0);
+    }
+
</ins><span class="cx">     get layoutTraits()
</span><span class="cx">     {
</span><span class="cx">         let traits = window.navigator.platform === &quot;MacIntel&quot; ? LayoutTraits.macOS : LayoutTraits.iOS;
</span><span class="lines">@@ -73,7 +78,7 @@
</span><span class="cx">         if (controlsWidth &lt;= CompactModeMaxWidth)
</span><span class="cx">             return traits | LayoutTraits.Compact;
</span><span class="cx"> 
</span><del>-        const isAudio = this.media instanceof HTMLAudioElement || this.media.videoTracks.length === 0;
</del><ins>+        const isAudio = this.isAudio;
</ins><span class="cx">         if (isAudio &amp;&amp; controlsWidth &lt;= AudioTightPaddingMaxWidth)
</span><span class="cx">             return traits | LayoutTraits.TightPadding;
</span><span class="cx"> 
</span><span class="lines">@@ -178,6 +183,7 @@
</span><span class="cx">     {
</span><span class="cx">         this.controls.width = this._controlsWidth();
</span><span class="cx">         this.controls.height = Math.round(this.container.getBoundingClientRect().height * this.controls.scaleFactor);
</span><ins>+        this.controls.shouldCenterControlsVertically = this.isAudio;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _controlsWidth()
</span></span></pre>
</div>
</div>

</body>
</html>