<!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>[209431] 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/209431">209431</a></dd>
<dt>Author</dt> <dd>graouts@webkit.org</dd>
<dt>Date</dt> <dd>2016-12-06 15:45:02 -0800 (Tue, 06 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Modern Media Controls] Rendering issues with controls bar when captions are on
https://bugs.webkit.org/show_bug.cgi?id=165390

Reviewed by Dean Jackson.

We would face some layout issues with captions due to RenderImage::layoutShadowControls()
expecting a single RenderBox in the media controls shadow root, which was the case with
legacy media controls, but no longer the case with modern media controls. We now host
both the captions and the media controls elements under a single container, and add
an asertion in RenderImage to check that a single RenderBox child exists.

Test: media/modern-media-controls/media-controller/media-controller-single-container.html

* Modules/modern-media-controls/controls/media-controls.css:
(.media-controls-container):
(.media-controls-container,):
(.media-controls-container &gt; *):
(.media-controls):
* Modules/modern-media-controls/controls/text-tracks.css:
(video::-webkit-media-text-track-container):
* Modules/modern-media-controls/media/media-controller.js:
(MediaController):
(MediaController.prototype._updateControlsIfNeeded):
* rendering/RenderImage.cpp:
(WebCore::RenderImage::layoutShadowControls):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfadecontrolswhenenteringfullscreenexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfadecontrolswhenenteringfullscreenhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfullscreenltrhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolscss">trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.css</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolstexttrackscss">trunk/Source/WebCore/Modules/modern-media-controls/controls/text-tracks.css</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderImagecpp">trunk/Source/WebCore/rendering/RenderImage.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollersinglecontainerexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollersinglecontainerhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/LayoutTests/ChangeLog        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -1,5 +1,23 @@
</span><span class="cx"> 2016-12-06  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [Modern Media Controls] Rendering issues with controls bar when captions are on
+        https://bugs.webkit.org/show_bug.cgi?id=165390
+
+        Reviewed by Dean Jackson.
+
+        We add a new test that checks we have the expected element structure with a single &lt;div&gt; containing
+        the captions and the media controls elements. Three other tests needed updating since they made
+        assumptions on the DOM structure that were no longer holding.
+
+        * media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen-expected.txt:
+        * media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html:
+        * media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html:
+        * media/modern-media-controls/media-controller/media-controller-resize.html:
+        * media/modern-media-controls/media-controller/media-controller-single-container-expected.txt: Added.
+        * media/modern-media-controls/media-controller/media-controller-single-container.html: Added.
+
+2016-12-06  Antoine Quint  &lt;graouts@apple.com&gt;
+
</ins><span class="cx">         [Modern Media Controls] Automatically hide the controls bar when the mouse is idle
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=165492
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfadecontrolswhenenteringfullscreenexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen-expected.txt (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen-expected.txt        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen-expected.txt        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -4,12 +4,12 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> We should not fade the controls in when showing them inline the first time
</span><del>-PASS shadowRoot.lastChild.classList.contains('fade-in') is false
</del><ins>+PASS mediaControls.classList.contains('fade-in') is false
</ins><span class="cx"> Clicking on the fullscreen button
</span><span class="cx"> Obtained a webkitfullscreenchange event
</span><span class="cx"> PASS media.webkitDisplayingFullscreen is true
</span><span class="cx"> We should fade the controls in when showing them fullscreen
</span><del>-PASS shadowRoot.lastChild.classList.contains('fade-in') is true
</del><ins>+PASS mediaControls.classList.contains('fade-in') is true
</ins><span class="cx"> 
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfadecontrolswhenenteringfullscreenhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fade-controls-when-entering-fullscreen.html        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -10,6 +10,7 @@
</span><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><ins>+let mediaControls = shadowRoot.lastElementChild.lastElementChild;
</ins><span class="cx"> 
</span><span class="cx"> media.addEventListener(&quot;play&quot;, () =&gt; {
</span><span class="cx">     media.pause();
</span><span class="lines">@@ -16,14 +17,15 @@
</span><span class="cx"> 
</span><span class="cx">     window.requestAnimationFrame(() =&gt; {
</span><span class="cx">         debug(&quot;We should not fade the controls in when showing them inline the first time&quot;);
</span><del>-        shouldBeFalse(&quot;shadowRoot.lastChild.classList.contains('fade-in')&quot;);
</del><ins>+        shouldBeFalse(&quot;mediaControls.classList.contains('fade-in')&quot;);
</ins><span class="cx">         
</span><span class="cx">         clickOnFullscreenButton();
</span><span class="cx">         media.addEventListener(&quot;webkitfullscreenchange&quot;, () =&gt; {
</span><ins>+            mediaControls = shadowRoot.lastElementChild.lastElementChild;
</ins><span class="cx">             debug(&quot;Obtained a webkitfullscreenchange event&quot;);
</span><span class="cx">             shouldBeTrue(&quot;media.webkitDisplayingFullscreen&quot;);
</span><span class="cx">             debug(&quot;We should fade the controls in when showing them fullscreen&quot;);
</span><del>-            shouldBeTrue(&quot;shadowRoot.lastChild.classList.contains('fade-in')&quot;);
</del><ins>+            shouldBeTrue(&quot;mediaControls.classList.contains('fade-in')&quot;);
</ins><span class="cx"> 
</span><span class="cx">             debug(&quot;&quot;);
</span><span class="cx">             media.remove();
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerfullscreenltrhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-fullscreen-ltr.html        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx">         window.requestAnimationFrame(() =&gt; {
</span><span class="cx">             debug(&quot;Media entered fullscreen&quot;);
</span><span class="cx"> 
</span><del>-            mediaControlsElement = shadowRoot.lastChild;
</del><ins>+            mediaControlsElement = shadowRoot.lastElementChild.lastElementChild;
</ins><span class="cx">             volumeSliderElement = mediaControlsElement.querySelector(&quot;.volume.slider&quot;);
</span><span class="cx">         
</span><span class="cx">             shouldBeTrue(&quot;mediaControlsElement.classList.contains('uses-ltr-user-interface-layout-direction')&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><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><del>-const mediaControls = shadowRoot.lastChild;
</del><ins>+const mediaControls = shadowRoot.lastElementChild.lastElementChild;
</ins><span class="cx"> 
</span><span class="cx"> debug(&quot;Checking initial size&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;mediaControls.style.width&quot;, &quot;320px&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollersinglecontainerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container-expected.txt (0 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container-expected.txt        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+Testing the MediaController has a single container for captions and media controls.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS shadowRoot.childElementCount is 2
+PASS shadowRoot.firstElementChild.localName is &quot;style&quot;
+PASS shadowRoot.lastElementChild.localName is &quot;div&quot;
+PASS shadowRoot.lastElementChild.className is &quot;media-controls-container&quot;
+PASS shadowRoot.lastElementChild.childElementCount is 2
+PASS shadowRoot.lastElementChild.firstElementChild.localName is &quot;div&quot;
+PASS shadowRoot.lastElementChild.firstElementChild.getAttribute('pseudo') is &quot;-webkit-media-text-track-container&quot;
+PASS shadowRoot.lastElementChild.lastElementChild.localName is &quot;div&quot;
+PASS shadowRoot.lastElementChild.lastElementChild.classList.contains('media-controls') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollersinglecontainerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container.html (0 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-single-container.html        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+&lt;!DOCTYPE html&gt;&lt;!-- webkit-test-runner [ enableModernMediaControls=true ] --&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot; controls&gt;&lt;/video&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing the &lt;code&gt;MediaController&lt;/code&gt; has a single container for captions and media controls.&quot;);
+
+const media = document.querySelector(&quot;video&quot;);
+const shadowRoot = window.internals.shadowRoot(media);
+
+shouldBe(&quot;shadowRoot.childElementCount&quot;, &quot;2&quot;);
+shouldBeEqualToString(&quot;shadowRoot.firstElementChild.localName&quot;, &quot;style&quot;);
+shouldBeEqualToString(&quot;shadowRoot.lastElementChild.localName&quot;, &quot;div&quot;);
+shouldBeEqualToString(&quot;shadowRoot.lastElementChild.className&quot;, &quot;media-controls-container&quot;);
+
+shouldBe(&quot;shadowRoot.lastElementChild.childElementCount&quot;, &quot;2&quot;);
+shouldBeEqualToString(&quot;shadowRoot.lastElementChild.firstElementChild.localName&quot;, &quot;div&quot;);
+shouldBeEqualToString(&quot;shadowRoot.lastElementChild.firstElementChild.getAttribute('pseudo')&quot;, &quot;-webkit-media-text-track-container&quot;);
+shouldBeEqualToString(&quot;shadowRoot.lastElementChild.lastElementChild.localName&quot;, &quot;div&quot;);
+shouldBeTrue(&quot;shadowRoot.lastElementChild.lastElementChild.classList.contains('media-controls')&quot;);
+
+&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="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/Source/WebCore/ChangeLog        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -1,5 +1,33 @@
</span><span class="cx"> 2016-12-06  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [Modern Media Controls] Rendering issues with controls bar when captions are on
+        https://bugs.webkit.org/show_bug.cgi?id=165390
+
+        Reviewed by Dean Jackson.
+
+        We would face some layout issues with captions due to RenderImage::layoutShadowControls()
+        expecting a single RenderBox in the media controls shadow root, which was the case with
+        legacy media controls, but no longer the case with modern media controls. We now host
+        both the captions and the media controls elements under a single container, and add
+        an asertion in RenderImage to check that a single RenderBox child exists.
+
+        Test: media/modern-media-controls/media-controller/media-controller-single-container.html
+
+        * Modules/modern-media-controls/controls/media-controls.css:
+        (.media-controls-container):
+        (.media-controls-container,):
+        (.media-controls-container &gt; *):
+        (.media-controls):
+        * Modules/modern-media-controls/controls/text-tracks.css:
+        (video::-webkit-media-text-track-container):
+        * Modules/modern-media-controls/media/media-controller.js:
+        (MediaController):
+        (MediaController.prototype._updateControlsIfNeeded):
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::layoutShadowControls):
+
+2016-12-06  Antoine Quint  &lt;graouts@apple.com&gt;
+
</ins><span class="cx">         [Modern Media Controls] Automatically hide the controls bar when the mouse is idle
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=165492
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolscss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.css (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.css        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.css        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -29,8 +29,23 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /* We need to use relative positioning due to webkit.org/b/163603 */
</span><ins>+.media-controls-container {
+    position: relative;
+}
+
+.media-controls-container,
+.media-controls-container &gt; * {
+    left: 0;
+    top: 0;
+    width: 100%;
+}
+
+.media-controls-container &gt; * {
+    position: absolute;
+}
+
</ins><span class="cx"> .media-controls {
</span><del>-    position: relative;
</del><ins>+    height: 100%;
</ins><span class="cx">     font-family: -apple-system;
</span><span class="cx">     -webkit-user-select: none;
</span><span class="cx">     cursor: default;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolstexttrackscss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/text-tracks.css (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/text-tracks.css        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/text-tracks.css        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -24,8 +24,6 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> video::-webkit-media-text-track-container {
</span><del>-    position: relative;
-    width: 100%;
</del><span class="cx">     bottom: 50px;
</span><span class="cx">     overflow: hidden;
</span><span class="cx">     padding-bottom: 5px;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -32,9 +32,12 @@
</span><span class="cx">         this.media = media;
</span><span class="cx">         this.host = host;
</span><span class="cx"> 
</span><ins>+        this.container = shadowRoot.appendChild(document.createElement(&quot;div&quot;));
+        this.container.className = &quot;media-controls-container&quot;;
+
</ins><span class="cx">         if (host) {
</span><span class="cx">             media.addEventListener(&quot;webkitpresentationmodechanged&quot;, this);
</span><del>-            shadowRoot.appendChild(host.textTrackContainer);
</del><ins>+            this.container.appendChild(host.textTrackContainer);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this._updateControlsIfNeeded();
</span><span class="lines">@@ -99,10 +102,10 @@
</span><span class="cx"> 
</span><span class="cx">         if (previousControls) {
</span><span class="cx">             this.controls.fadeIn();
</span><del>-            this.shadowRoot.replaceChild(this.controls.element, previousControls.element);
</del><ins>+            this.container.replaceChild(this.controls.element, previousControls.element);
</ins><span class="cx">             this.controls.usesLTRUserInterfaceLayoutDirection = previousControls.usesLTRUserInterfaceLayoutDirection;
</span><span class="cx">         } else
</span><del>-            this.shadowRoot.appendChild(this.controls.element);        
</del><ins>+            this.container.appendChild(this.controls.element);        
</ins><span class="cx"> 
</span><span class="cx">         this._updateControlsSize();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (209430 => 209431)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderImage.cpp        2016-12-06 23:39:21 UTC (rev 209430)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp        2016-12-06 23:45:02 UTC (rev 209431)
</span><span class="lines">@@ -682,6 +682,9 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderImage::layoutShadowControls(const LayoutSize&amp; oldSize)
</span><span class="cx"> {
</span><ins>+    // We expect a single containing box under the UA shadow root.
+    ASSERT(firstChild() == lastChild());
+
</ins><span class="cx">     auto* controlsRenderer = downcast&lt;RenderBox&gt;(firstChild());
</span><span class="cx">     if (!controlsRenderer)
</span><span class="cx">         return;
</span></span></pre>
</div>
</div>

</body>
</html>