<!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>[214282] 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/214282">214282</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2017-03-22 15:51:59 -0700 (Wed, 22 Mar 2017)</dd>
</dl>
<h3>Log Message</h3>
<pre>[Modern Media Controls] Controls size lags behind media size
https://bugs.webkit.org/show_bug.cgi?id=169962
<rdar://problem/30340293>
Patch by Antoine Quint <graouts@apple.com> on 2017-03-22
Reviewed by Dean Jackson.
Source/WebCore:
We used to dispatch the "resize" event to the shadow root on a timer and commit changes to the DOM
when handling it inside of a requestAnimationFrame() callback. We now dispatch the "resize" event
as a post-layout task and commit to the DOM right away which ensures immediate size changes of the
controls.
* Modules/modern-media-controls/controls/ios-inline-media-controls.js:
(IOSInlineMediaControls.prototype.layout):
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
(MacOSFullscreenMediaControls.prototype.layout):
* Modules/modern-media-controls/controls/macos-inline-media-controls.js:
(MacOSInlineMediaControls.prototype.layout):
Making some layout() safer by returning early in case they're called during the object construction
phase, due to the LayoutNode "width" setter now calling that method.
* Modules/modern-media-controls/controls/media-controls.js:
(MediaControls.prototype.get width):
(MediaControls.prototype.set width):
Calling layout() in the "width" setter to ensure that the inline controls layout is invalidated as
soon as the controls width changes instead of waiting on the next rAF to update the layout.
* Modules/modern-media-controls/controls/scheduler.js:
(const.scheduler.new.prototype.flushScheduledLayoutCallbacks):
Add a new method to immediately call queued layouts.
* Modules/modern-media-controls/media/media-controller.js:
(MediaController.prototype.handleEvent):
Flush all queued layouts when handling a "resize" event.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::layoutSizeChanged):
Queue the "resize" event as a post-layout task.
(WebCore::HTMLMediaElement::contextDestroyed):
* html/HTMLMediaElement.h:
Remove the queue we no longer use.
LayoutTests:
Updating an existing test to use a "resize" event handler to check that a size change
on the element is reflected on the shadow root. This would have failed prior to this
patch. Also rebaselining a test which now reports correct values.
* media/modern-media-controls/media-controller/media-controller-resize-expected.txt:
* media/modern-media-controls/media-controller/media-controller-resize.html:
* media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt:
* media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizeexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html</a></li>
<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>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsiosinlinemediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/ios-inline-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosfullscreenmediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosinlinemediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsschedulerjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/scheduler.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/LayoutTests/ChangeLog        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2017-03-22 Antoine Quint <graouts@apple.com>
+
+ [Modern Media Controls] Controls size lags behind media size
+ https://bugs.webkit.org/show_bug.cgi?id=169962
+ <rdar://problem/30340293>
+
+ Reviewed by Dean Jackson.
+
+ Updating an existing test to use a "resize" event handler to check that a size change
+ on the element is reflected on the shadow root. This would have failed prior to this
+ patch. Also rebaselining a test which now reports correct values.
+
+ * media/modern-media-controls/media-controller/media-controller-resize-expected.txt:
+ * media/modern-media-controls/media-controller/media-controller-resize.html:
+ * media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt:
+ * media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html:
+
</ins><span class="cx"> 2017-03-22 Youenn Fablet <youenn@apple.com>
</span><span class="cx">
</span><span class="cx"> Activate remaining webrtc tests
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize-expected.txt (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize-expected.txt        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize-expected.txt        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -8,8 +8,8 @@
</span><span class="cx"> PASS mediaControls.style.height is "240px"
</span><span class="cx">
</span><span class="cx"> Resizing to 400x300
</span><del>-PASS mediaControls.style.width became "400px"
-PASS mediaControls.style.height became "300px"
</del><ins>+PASS mediaControls.style.width is "400px"
+PASS mediaControls.style.height is "300px"
</ins><span class="cx">
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</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 (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -16,13 +16,10 @@
</span><span class="cx"> shouldBeEqualToString("mediaControls.style.width", "320px");
</span><span class="cx"> shouldBeEqualToString("mediaControls.style.height", "240px");
</span><span class="cx">
</span><del>-debug("");
-debug("Resizing to 400x300");
-media.style.width = "400px";
-media.style.height = "300px";
-
-shouldBecomeEqualToString("mediaControls.style.width", "400px", () => {
- shouldBecomeEqualToString("mediaControls.style.height", "300px", () => {
</del><ins>+shadowRoot.addEventListener("resize", () => {
+ shouldBeEqualToString("mediaControls.style.width", "400px");
+ shouldBeEqualToString("mediaControls.style.height", "300px");
+ setTimeout(() => {
</ins><span class="cx"> debug("");
</span><span class="cx"> media.remove();
</span><span class="cx"> finishJSTest();
</span><span class="lines">@@ -29,6 +26,11 @@
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span><ins>+debug("");
+debug("Resizing to 400x300");
+media.style.width = "400px";
+media.style.height = "300px";
+
</ins><span class="cx"> </script>
</span><span class="cx"> <script src="../../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudioexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio-expected.txt        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.width is "800px"
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.height is "100px"
</span><span class="cx"> PASS shadowRoot.querySelector('.media-controls').style.zoom is "0.5"
</span><del>-PASS shadowRoot.querySelector('.media-controls').style.top is "-25px"
</del><ins>+PASS shadowRoot.querySelector('.media-controls').style.top is "-12.5px"
</ins><span class="cx">
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerscalefactoraudiohtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-scale-factor-audio.html        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> shouldBeEqualToString("shadowRoot.querySelector('.media-controls').style.width", "800px");
</span><span class="cx"> shouldBeEqualToString("shadowRoot.querySelector('.media-controls').style.height", "100px");
</span><span class="cx"> shouldBeEqualToString("shadowRoot.querySelector('.media-controls').style.zoom", "0.5");
</span><del>- shouldBeEqualToString("shadowRoot.querySelector('.media-controls').style.top", "-25px");
</del><ins>+ shouldBeEqualToString("shadowRoot.querySelector('.media-controls').style.top", "-12.5px");
</ins><span class="cx">
</span><span class="cx"> debug("");
</span><span class="cx"> media.remove();
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/ChangeLog        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2017-03-22 Antoine Quint <graouts@apple.com>
+
+ [Modern Media Controls] Controls size lags behind media size
+ https://bugs.webkit.org/show_bug.cgi?id=169962
+ <rdar://problem/30340293>
+
+ Reviewed by Dean Jackson.
+
+ We used to dispatch the "resize" event to the shadow root on a timer and commit changes to the DOM
+ when handling it inside of a requestAnimationFrame() callback. We now dispatch the "resize" event
+ as a post-layout task and commit to the DOM right away which ensures immediate size changes of the
+ controls.
+
+ * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
+ (IOSInlineMediaControls.prototype.layout):
+ * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
+ (MacOSFullscreenMediaControls.prototype.layout):
+ * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
+ (MacOSInlineMediaControls.prototype.layout):
+ Making some layout() safer by returning early in case they're called during the object construction
+ phase, due to the LayoutNode "width" setter now calling that method.
+
+ * Modules/modern-media-controls/controls/media-controls.js:
+ (MediaControls.prototype.get width):
+ (MediaControls.prototype.set width):
+ Calling layout() in the "width" setter to ensure that the inline controls layout is invalidated as
+ soon as the controls width changes instead of waiting on the next rAF to update the layout.
+
+ * Modules/modern-media-controls/controls/scheduler.js:
+ (const.scheduler.new.prototype.flushScheduledLayoutCallbacks):
+ Add a new method to immediately call queued layouts.
+
+ * Modules/modern-media-controls/media/media-controller.js:
+ (MediaController.prototype.handleEvent):
+ Flush all queued layouts when handling a "resize" event.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::layoutSizeChanged):
+ Queue the "resize" event as a post-layout task.
+
+ (WebCore::HTMLMediaElement::contextDestroyed):
+ * html/HTMLMediaElement.h:
+ Remove the queue we no longer use.
+
</ins><span class="cx"> 2017-03-22 Andy Estes <aestes@apple.com>
</span><span class="cx">
</span><span class="cx"> Try to fix the Mac CMake build after r214266.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsiosinlinemediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/ios-inline-media-controls.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/ios-inline-media-controls.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/ios-inline-media-controls.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx"> {
</span><span class="cx"> super.layout();
</span><span class="cx">
</span><del>- if (this.controlsBar.visible)
</del><ins>+ if (this.controlsBar && this.controlsBar.visible)
</ins><span class="cx"> this.controlsBar.children = this._inlineLayoutSupport.childrenAfterPerformingLayout();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosfullscreenmediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -94,6 +94,9 @@
</span><span class="cx"> {
</span><span class="cx"> super.layout();
</span><span class="cx">
</span><ins>+ if (!this._rightContainer)
+ return;
+
</ins><span class="cx"> const numberOfEnabledButtons = this._rightContainer.buttons.filter(button => button.enabled).length;
</span><span class="cx">
</span><span class="cx"> let buttonMargin = ButtonMarginForFiveButtons;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosinlinemediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> {
</span><span class="cx"> super.layout();
</span><span class="cx">
</span><del>- if (!this.controlsBar.visible)
</del><ins>+ if (!this.controlsBar || !this.controlsBar.visible)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> const children = this._inlineLayoutSupport.childrenAfterPerformingLayout();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -59,6 +59,20 @@
</span><span class="cx">
</span><span class="cx"> // Public
</span><span class="cx">
</span><ins>+ get width()
+ {
+ return super.width;
+ }
+
+ set width(width)
+ {
+ if (width === this.width)
+ return;
+
+ super.width = width;
+ this.layout();
+ }
+
</ins><span class="cx"> get layoutTraits()
</span><span class="cx"> {
</span><span class="cx"> return this._layoutTraits;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsschedulerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/scheduler.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/scheduler.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/scheduler.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -43,6 +43,11 @@
</span><span class="cx"> this.debug("unscheduleLayout() - end");
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ flushScheduledLayoutCallbacks()
+ {
+ this._frameDidFire();
+ }
+
</ins><span class="cx"> // Private
</span><span class="cx">
</span><span class="cx"> _requestFrameIfNeeded()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -113,9 +113,11 @@
</span><span class="cx"> {
</span><span class="cx"> if (event instanceof TrackEvent && event.currentTarget === this.media.videoTracks)
</span><span class="cx"> this._updateControlsIfNeeded();
</span><del>- else if (event.type === "resize" && event.currentTarget === this.shadowRoot)
</del><ins>+ else if (event.type === "resize" && event.currentTarget === this.shadowRoot) {
</ins><span class="cx"> this._updateControlsIfNeeded();
</span><del>- else if (event.type === "click" && event.currentTarget === this.container)
</del><ins>+ // We must immediately perform layouts so that we don't lag behind the media layout size.
+ scheduler.flushScheduledLayoutCallbacks();
+ } else if (event.type === "click" && event.currentTarget === this.container)
</ins><span class="cx"> this._containerWasClicked(event);
</span><span class="cx"> else if (event.currentTarget === this.media) {
</span><span class="cx"> this._updateControlsIfNeeded();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -4049,11 +4049,13 @@
</span><span class="cx"> void HTMLMediaElement::layoutSizeChanged()
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(MEDIA_CONTROLS_SCRIPT)
</span><del>- auto task = [this, protectedThis = makeRef(*this)] {
- if (ShadowRoot* root = userAgentShadowRoot())
- root->dispatchEvent(Event::create("resize", false, false));
- };
- m_resizeTaskQueue.enqueueTask(WTFMove(task));
</del><ins>+ if (auto* frameView = document().view()) {
+ auto task = [this, protectedThis = makeRef(*this)] {
+ if (ShadowRoot* root = userAgentShadowRoot())
+ root->dispatchEvent(Event::create("resize", false, false));
+ };
+ frameView->queuePostLayoutCallback(WTFMove(task));
+ }
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (!m_receivedLayoutSizeChanged) {
</span><span class="lines">@@ -5231,7 +5233,6 @@
</span><span class="cx"> void HTMLMediaElement::contextDestroyed()
</span><span class="cx"> {
</span><span class="cx"> m_seekTaskQueue.close();
</span><del>- m_resizeTaskQueue.close();
</del><span class="cx"> m_shadowDOMTaskQueue.close();
</span><span class="cx"> m_promiseTaskQueue.close();
</span><span class="cx"> m_pauseAfterDetachedTaskQueue.close();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (214281 => 214282)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2017-03-22 22:51:22 UTC (rev 214281)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2017-03-22 22:51:59 UTC (rev 214282)
</span><span class="lines">@@ -838,7 +838,6 @@
</span><span class="cx"> Timer m_playbackControlsManagerBehaviorRestrictionsTimer;
</span><span class="cx"> Timer m_seekToPlaybackPositionEndedTimer;
</span><span class="cx"> GenericTaskQueue<Timer> m_seekTaskQueue;
</span><del>- GenericTaskQueue<Timer> m_resizeTaskQueue;
</del><span class="cx"> GenericTaskQueue<Timer> m_shadowDOMTaskQueue;
</span><span class="cx"> GenericTaskQueue<Timer> m_promiseTaskQueue;
</span><span class="cx"> GenericTaskQueue<Timer> m_pauseAfterDetachedTaskQueue;
</span></span></pre>
</div>
</div>
</body>
</html>