<!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>[207554] 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/207554">207554</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-19 12:04:35 -0700 (Wed, 19 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Modern Media Controls] Media Controller: click-to-start support
https://bugs.webkit.org/show_bug.cgi?id=163659
&lt;rdar://problem/28845656&gt;

Patch by Antoine Quint &lt;graouts@apple.com&gt; on 2016-10-19
Reviewed by Dean Jackson.

Source/WebCore:

We introduce the MediaControllerSupport class which will allow a number of media controller
features to be implemented by subclasses each devoted to implementing a specific subset of
media controller features. With this bug, we add the correct behavior for click-to-start,
only showing the start button under the right circumstances.

A MediaController object indicates which media control to attach click event listeners to
through the `control` property, and a list of media events it should register on the media
element through the `mediaEvents` property. Then, as the user interacts with the specified
control and the media, the Button delegation method `buttonWasClicked()` and the `syncControl()`
methods are called to allow for the media state to be correctly set and represented in the
media controls. Custom event handling for the specified events can also be achieved by
subclassing the `handleEvent()` method.

Tests: media/modern-media-controls/start-support/start-support-audio.html
       media/modern-media-controls/start-support/start-support-autoplay.html
       media/modern-media-controls/start-support/start-support-click-to-start.html
       media/modern-media-controls/start-support/start-support-error.html
       media/modern-media-controls/start-support/start-support-fullscreen.html
       media/modern-media-controls/start-support/start-support-manual-play.html
       media/modern-media-controls/start-support/start-support-no-source.html

* Modules/modern-media-controls/media/media-controller-support.js: Added.
(MediaControllerSupport):
(MediaControllerSupport.prototype.get control):
(MediaControllerSupport.prototype.get mediaEvents):
(MediaControllerSupport.prototype.buttonWasClicked):
(MediaControllerSupport.prototype.handleEvent):
(MediaControllerSupport.prototype.syncControl):
* Modules/modern-media-controls/media/media-controller.js:
(MediaController):
(MediaController.prototype.buttonWasClicked): Deleted.
* Modules/modern-media-controls/media/start-support.js: Added.
(StartSupport.prototype.get control):
(StartSupport.prototype.get mediaEvents):
(StartSupport.prototype.buttonWasClicked):
(StartSupport.prototype.handleEvent):
(StartSupport.prototype.syncControl):
(StartSupport.prototype._shouldShowStartButton):
(StartSupport):

LayoutTests:

New test coverage for the StartSupport class.

* media/modern-media-controls/media-controller/media-controller-constructor.html:
* media/modern-media-controls/media-controller/media-controller-resize.html:
* media/modern-media-controls/start-support/start-support-audio-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-audio.html: Added.
* media/modern-media-controls/start-support/start-support-autoplay-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-autoplay.html: Added.
* media/modern-media-controls/start-support/start-support-click-to-start-expected.txt: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt.
* media/modern-media-controls/start-support/start-support-click-to-start.html: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html.
* media/modern-media-controls/start-support/start-support-error-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-error.html: Added.
* media/modern-media-controls/start-support/start-support-fullscreen-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-fullscreen.html: Added.
* media/modern-media-controls/start-support/start-support-manual-play-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-manual-play.html: Added.
* media/modern-media-controls/start-support/start-support-no-source-expected.txt: Added.
* media/modern-media-controls/start-support/start-support-no-source.html: Added.
* platform/ios-simulator/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerconstructorhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerresizehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.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="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/media/modern-media-controls/start-support/</li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportaudioexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportaudiohtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportautoplayexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportautoplayhtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportclicktostartexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportclicktostarthtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupporterrorexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupporterrorhtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportfullscreenexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportfullscreenhtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportmanualplayexpectedtxt">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportmanualplayhtml">trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.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="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollersupportjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediastartsupportjs">trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/ChangeLog        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2016-10-19  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] Media Controller: click-to-start support
+        https://bugs.webkit.org/show_bug.cgi?id=163659
+        &lt;rdar://problem/28845656&gt;
+
+        Reviewed by Dean Jackson.
+
+        New test coverage for the StartSupport class.
+
+        * media/modern-media-controls/media-controller/media-controller-constructor.html:
+        * media/modern-media-controls/media-controller/media-controller-resize.html:
+        * media/modern-media-controls/start-support/start-support-audio-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-audio.html: Added.
+        * media/modern-media-controls/start-support/start-support-autoplay-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-autoplay.html: Added.
+        * media/modern-media-controls/start-support/start-support-click-to-start-expected.txt: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt.
+        * media/modern-media-controls/start-support/start-support-click-to-start.html: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html.
+        * media/modern-media-controls/start-support/start-support-error-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-error.html: Added.
+        * media/modern-media-controls/start-support/start-support-fullscreen-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-fullscreen.html: Added.
+        * media/modern-media-controls/start-support/start-support-manual-play-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-manual-play.html: Added.
+        * media/modern-media-controls/start-support/start-support-no-source-expected.txt: Added.
+        * media/modern-media-controls/start-support/start-support-no-source.html: Added.
+        * platform/ios-simulator/TestExpectations:
+
</ins><span class="cx"> 2016-10-19  Aaron Chu  &lt;aaron_chu@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: AXI: expose computed tree node and heading level
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -1,15 +0,0 @@
</span><del>-Testing the MediaController click-to-start behavior.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS mediaController.controls.showsStartButton is true
-
-Dispatching click event to the start button
-Media is playing
-PASS mediaController.controls.showsStartButton is false
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
-&lt;body&gt;
-&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
-&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
-&lt;script type=&quot;text/javascript&quot;&gt;
-
-window.jsTestIsAsync = true;
-
-description(&quot;Testing the &lt;code&gt;MediaController&lt;/code&gt; click-to-start behavior.&quot;);
-
-iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
-
-const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
-const media = document.querySelector(&quot;video&quot;);
-const mediaController = createControls(shadowRoot, media, null);
-
-shouldBeTrue(&quot;mediaController.controls.showsStartButton&quot;);
-
-media.addEventListener(&quot;play&quot;, function() {
-    debug(&quot;Media is playing&quot;);
-    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
-    debug(&quot;&quot;);
-    shadowRoot.host.remove();
-    media.remove();
-    finishJSTest();
-});
-
-debug(&quot;&quot;);
-debug(&quot;Dispatching click event to the start button&quot;);
-mediaController.controls.startButton.element.click();
-
-&lt;/script&gt;
-&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerconstructorhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><ins>+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</ins><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;body&gt;
</span><span class="cx"> &lt;video src=&quot;../../content/test.mp4&quot;&gt;&lt;/video&gt;
</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 (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><ins>+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</ins><span class="cx"> &lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;body&gt;
</span><span class="cx"> &lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportaudioexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Testing the StartSupport behavior with an audio element.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaController.controls.showsStartButton is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportaudiohtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerconstructorhtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;audio src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/audio&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with an audio element.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;audio&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+
+shadowRoot.host.remove();
+media.remove();
+
+&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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportautoplayexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Testing the StartSupport behavior with autoplay.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Media is playing
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportautoplayhtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot; autoplay&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with autoplay.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener(&quot;play&quot;, function() {
+    debug(&quot;Media is playing&quot;);
+    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+    debug(&quot;&quot;);
+    shadowRoot.host.remove();
+    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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportclicktostartexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+Testing the MediaController click-to-start behavior.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaController.controls.showsStartButton is true
+
+Dispatching click event to the start button
+Media is playing
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportclicktostarthtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing the &lt;code&gt;MediaController&lt;/code&gt; click-to-start behavior.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener(&quot;loadedmetadata&quot;, function() {
+    shouldBeTrue(&quot;mediaController.controls.showsStartButton&quot;);
+    debug(&quot;&quot;);
+    debug(&quot;Dispatching click event to the start button&quot;);
+    mediaController.controls.startButton.element.click();
+});
+
+media.addEventListener(&quot;play&quot;, function() {
+    debug(&quot;Media is playing&quot;);
+    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+    debug(&quot;&quot;);
+    shadowRoot.host.remove();
+    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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupporterrorexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+Testing the StartSupport behavior with an error.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupporterrorhtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;404.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with an error.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener(&quot;error&quot;, function() {
+    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+    debug(&quot;&quot;);
+    shadowRoot.host.remove();
+    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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportfullscreenexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Testing the StartSupport behavior with no source.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Media entered fullscreen
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportfullscreenhtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with no source.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+const button = document.body.appendChild(document.createElement(&quot;button&quot;));
+button.addEventListener(&quot;click&quot;, event =&gt; {
+    try {
+        media.webkitEnterFullscreen();
+    } catch(e) {
+        debug(&quot;Calling media.webkitEnterFullscreen() failed&quot;);
+        finishJSTest();
+    }
+});
+
+media.addEventListener(&quot;webkitfullscreenchange&quot;, function() {
+    debug(&quot;Media entered fullscreen&quot;);
+    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+    debug(&quot;&quot;);
+    shadowRoot.host.remove();
+    media.remove();
+    button.remove();
+    finishJSTest();
+});
+
+media.addEventListener(&quot;loadedmetadata&quot;, event =&gt; {
+    if (&quot;eventSender&quot; in window) {
+        // Click the button so that we may enter fullscreen.
+        eventSender.mouseMoveTo(button.offsetLeft + 1, button.offsetTop + 1);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    } else
+        debug(&quot;This test is designed to run in DRT&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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportmanualplayexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+Testing the StartSupport behavior with manual play.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Media is playing
+PASS mediaController.controls.showsStartButton is false
+
+Media is paused
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportmanualplayhtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostarthtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+window.jsTestIsAsync = true;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with manual play.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener(&quot;play&quot;, function() {
+    debug(&quot;Media is playing&quot;);
+    shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+
+    media.addEventListener(&quot;pause&quot;, function() {
+        debug(&quot;&quot;);
+        debug(&quot;Media is paused&quot;);
+        shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+        debug(&quot;&quot;);
+        shadowRoot.host.remove();
+        media.remove();
+        finishJSTest();
+    });
+
+    media.autoplay = false;
+    media.pause();
+});
+
+media.play();
+
+&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="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourceexpectedtxtfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclicktostartexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Testing the StartSupport behavior with no source.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaController.controls.showsStartButton is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsstartsupportstartsupportnosourcehtmlfromrev207553trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerconstructorhtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html (from rev 207553, trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scheduler.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-node.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/layout-item.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/buttons-container.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-service.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/start-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/icon-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/play-pause-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/skip-back-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/fullscreen-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/mute-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/tracks-button.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/volume-slider.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/scrubber.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-label.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/time-control.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../../Source/WebCore/Modules/modern-media-controls/main.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video style=&quot;width: 320px; height: 240px;&quot;&gt;&lt;/video&gt;
+&lt;div id=&quot;shadow&quot;&gt;&lt;/div&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing the &lt;code&gt;StartSupport&lt;/code&gt; behavior with no source.&quot;);
+
+iconService.directoryPath = &quot;../../../../Source/WebCore/Modules/modern-media-controls/images&quot;;
+
+const shadowRoot = document.querySelector(&quot;div#shadow&quot;).attachShadow({ mode: &quot;open&quot; });
+const media = document.querySelector(&quot;video&quot;);
+const mediaController = createControls(shadowRoot, media, null);
+
+shouldBeFalse(&quot;mediaController.controls.showsStartButton&quot;);
+
+shadowRoot.host.remove();
+media.remove();
+
+&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="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -2692,6 +2692,7 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/163009 media/modern-media-controls/icon-button/icon-button-active-state.html [ Failure ]
</span><span class="cx"> webkit.org/b/163357 media/modern-media-controls/volume-slider/volume-slider-value.html [ Skip ]
</span><ins>+webkit.org/b/163669 media/modern-media-controls/start-support/start-support-fullscreen.html [ Skip ]
</ins><span class="cx"> 
</span><span class="cx"> # This variation font test requires Skia which isn't available on iOS.
</span><span class="cx"> webkit.org/b/163093 fast/text/variations/advances.html [ Failure ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/Source/WebCore/ChangeLog        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-10-19  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] Media Controller: click-to-start support
+        https://bugs.webkit.org/show_bug.cgi?id=163659
+        &lt;rdar://problem/28845656&gt;
+
+        Reviewed by Dean Jackson.
+
+        We introduce the MediaControllerSupport class which will allow a number of media controller
+        features to be implemented by subclasses each devoted to implementing a specific subset of
+        media controller features. With this bug, we add the correct behavior for click-to-start,
+        only showing the start button under the right circumstances.
+
+        A MediaController object indicates which media control to attach click event listeners to
+        through the `control` property, and a list of media events it should register on the media
+        element through the `mediaEvents` property. Then, as the user interacts with the specified
+        control and the media, the Button delegation method `buttonWasClicked()` and the `syncControl()`
+        methods are called to allow for the media state to be correctly set and represented in the
+        media controls. Custom event handling for the specified events can also be achieved by
+        subclassing the `handleEvent()` method.
+
+        Tests: media/modern-media-controls/start-support/start-support-audio.html
+               media/modern-media-controls/start-support/start-support-autoplay.html
+               media/modern-media-controls/start-support/start-support-click-to-start.html
+               media/modern-media-controls/start-support/start-support-error.html
+               media/modern-media-controls/start-support/start-support-fullscreen.html
+               media/modern-media-controls/start-support/start-support-manual-play.html
+               media/modern-media-controls/start-support/start-support-no-source.html
+
+        * Modules/modern-media-controls/media/media-controller-support.js: Added.
+        (MediaControllerSupport):
+        (MediaControllerSupport.prototype.get control):
+        (MediaControllerSupport.prototype.get mediaEvents):
+        (MediaControllerSupport.prototype.buttonWasClicked):
+        (MediaControllerSupport.prototype.handleEvent):
+        (MediaControllerSupport.prototype.syncControl):
+        * Modules/modern-media-controls/media/media-controller.js:
+        (MediaController):
+        (MediaController.prototype.buttonWasClicked): Deleted.
+        * Modules/modern-media-controls/media/start-support.js: Added.
+        (StartSupport.prototype.get control):
+        (StartSupport.prototype.get mediaEvents):
+        (StartSupport.prototype.buttonWasClicked):
+        (StartSupport.prototype.handleEvent):
+        (StartSupport.prototype.syncControl):
+        (StartSupport.prototype._shouldShowStartButton):
+        (StartSupport):
+
</ins><span class="cx"> 2016-10-19  Aaron Chu  &lt;aaron_chu@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: AXI: expose computed tree node and heading level
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollersupportjsfromrev207553trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js (from rev 207553, trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js                                (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+class MediaControllerSupport
+{
+
+    constructor(mediaController)
+    {
+        this.mediaController = mediaController;
+
+        for (let eventType of this.mediaEvents)
+            mediaController.media.addEventListener(eventType, this);
+
+        if (!this.control)
+            return;
+
+        this.control.uiDelegate = this;
+
+        this.syncControl();
+    }
+
+    // Protected
+
+    get control()
+    {
+        // Implemented by subclasses.
+    }
+
+    get mediaEvents()
+    {
+        // Implemented by subclasses.
+        return [];
+    }
+
+    buttonWasClicked(control)
+    {
+        // Implemented by subclasses.
+    }
+
+    handleEvent(event)
+    {
+        // Implemented by subclasses.
+        if (this.control)
+            this.syncControl();
+    }
+
+    syncControl()
+    {
+        // Implemented by subclasses.
+    }
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (207553 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx">     {
</span><span class="cx">         this.shadowRoot = shadowRoot;
</span><span class="cx">         this.media = media;
</span><ins>+        this.host = host;
</ins><span class="cx"> 
</span><span class="cx">         // FIXME: This should get set dynamically based on the current environment.
</span><span class="cx">         this.layoutTraits = LayoutTraits.macOS;
</span><span class="lines">@@ -37,8 +38,7 @@
</span><span class="cx">         this.controls = new MacOSInlineMediaControls
</span><span class="cx">         shadowRoot.appendChild(this.controls.element);        
</span><span class="cx"> 
</span><del>-        this.controls.startButton.uiDelegate = this;
-        this.controls.showsStartButton = true;
</del><ins>+        new StartSupport(this);
</ins><span class="cx"> 
</span><span class="cx">         this._updateControlsSize();
</span><span class="cx">         media.addEventListener(&quot;resize&quot;, this);
</span><span class="lines">@@ -62,15 +62,6 @@
</span><span class="cx">             this._updateControlsSize();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    buttonWasClicked(button)
-    {
-        if (button !== this.controls.startButton)
-            return;
-
-        this.controls.showsStartButton = false;
-        this.media.play();
-    }
-
</del><span class="cx">     // Private
</span><span class="cx"> 
</span><span class="cx">     _updateControlsSize()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediastartsupportjsfromrev207553trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js (from rev 207553, trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js) (0 => 207554)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js                                (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js        2016-10-19 19:04:35 UTC (rev 207554)
</span><span class="lines">@@ -0,0 +1,93 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+class StartSupport extends MediaControllerSupport
+{
+
+    // Protected
+
+    get control()
+    {
+        return this.mediaController.controls.startButton;
+    }
+
+    get mediaEvents()
+    {
+        return [&quot;loadedmetadata&quot;, &quot;play&quot;, &quot;error&quot;, &quot;webkitfullscreenchange&quot;];
+    }
+
+    buttonWasClicked(control)
+    {
+        this.mediaController.media.play();
+    }
+
+    handleEvent(event)
+    {
+        if (event.type === &quot;play&quot;)
+            this._hasPlayed = true;
+
+        super.handleEvent(event);
+    }
+
+    syncControl()
+    {
+        this.mediaController.controls.showsStartButton = this._shouldShowStartButton();
+    }
+
+    // Private
+
+    _shouldShowStartButton()
+    {
+        const media = this.mediaController.media;
+
+        if (this._hasPlayed)
+            return false;
+
+        if (!media.paused)
+            return false;
+
+        if (media.autoplay)
+            return false;
+
+        if (media instanceof HTMLAudioElement)
+            return false;
+
+        if (media.webkitDisplayingFullscreen)
+            return false;
+
+        if (!media.currentSrc)
+            return false;
+
+        if (media.error)
+            return false;
+
+        const host = this.mediaController.host;
+        if (!media.controls &amp;&amp; host &amp;&amp; host.allowsInlineMediaPlayback)
+            return false;
+
+        return true;
+    }
+
+}
</ins></span></pre>
</div>
</div>

</body>
</html>