<!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>[212573] 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/212573">212573</a></dd>
<dt>Author</dt> <dd>graouts@webkit.org</dd>
<dt>Date</dt> <dd>2017-02-17 13:40:37 -0800 (Fri, 17 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Modern Media Controls] Toggle playback when clicking on the video on macOS
https://bugs.webkit.org/show_bug.cgi?id=168515
&lt;rdar://problem/30577441&gt;

Reviewed by Dean Jackson.

Source/WebCore:

Listen to click events on the macOS media controls. Detect any clicks that were on the
background instead of the controls widgets themselves, and tell the delegate (MediaController)
about them.

Tests: media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html
       media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html
       media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html

* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
(MacOSFullscreenMediaControls.prototype._handleMousedown):
* Modules/modern-media-controls/controls/macos-inline-media-controls.js:
(MacOSInlineMediaControls.prototype.handleEvent):
* Modules/modern-media-controls/controls/macos-media-controls.js:
(MacOSMediaControls.prototype.handleEvent):
(MacOSMediaControls):
* Modules/modern-media-controls/media/media-controller.js:
(MediaController.prototype.togglePlayback):
(MediaController.prototype.macOSControlsBackgroundWasClicked):
(MediaController.prototype._updateControlsIfNeeded):
* Modules/modern-media-controls/media/playback-support.js:
(PlaybackSupport.prototype.buttonWasPressed):

LayoutTests:

* media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt: Added.
* media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html: Added.
* media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt: Added.
* media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html: Added.
* media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt: Added.
* media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html: Added.
* media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt:
* media/modern-media-controls/media-documents/click-on-video-should-not-pause.html:
* platform/ios-simulator/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediadocumentsclickonvideoshouldnotpauseexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediadocumentsclickonvideoshouldnotpausehtml">trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause.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="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosfullscreenmediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosinlinemediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosmediacontrolsjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs">trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolsmediaplaybacksupportjs">trunk/Source/WebCore/Modules/modern-media-controls/media/playback-support.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundshouldpauseexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundshouldpausehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundtodismisstrackspanelshouldnottoggleplaybackexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundtodismisstrackspanelshouldnottoggleplaybackhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideocontrolsshouldnotpauseexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideocontrolsshouldnotpausehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/LayoutTests/ChangeLog        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -1,5 +1,23 @@
</span><span class="cx"> 2017-02-17  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [Modern Media Controls] Toggle playback when clicking on the video on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=168515
+        &lt;rdar://problem/30577441&gt;
+
+        Reviewed by Dean Jackson.
+
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt: Added.
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html: Added.
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt: Added.
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html: Added.
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt: Added.
+        * media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html: Added.
+        * media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt:
+        * media/modern-media-controls/media-documents/click-on-video-should-not-pause.html:
+        * platform/ios-simulator/TestExpectations:
+
+2017-02-17  Antoine Quint  &lt;graouts@apple.com&gt;
+
</ins><span class="cx">         REGRESSION: Subtitles menu in media controls allows multiple items to be selected
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=168168
</span><span class="cx">         &lt;rdar://problem/30488605&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundshouldpauseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause-expected.txt        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Testing that clicking on a video's background pauses it.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS media.paused is false
+
+Clicking on video background
+PASS media.paused is true
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundshouldpausehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/media-controls-loader.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;position: absolute; top: 0; left: 0; width: 800px;&quot; controls autoplay&gt;&lt;/video&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing that clicking on a video's background pauses it.&quot;);
+
+window.jsTestIsAsync = true;
+
+const media = document.querySelector(&quot;video&quot;);
+
+media.addEventListener(&quot;play&quot;, () =&gt; {
+    shouldBeFalse(&quot;media.paused&quot;);
+    
+    const bounds = media.getBoundingClientRect();
+    debug(&quot;&quot;);
+    debug(&quot;Clicking on video background&quot;);
+    eventSender.mouseMoveTo(bounds.left + 5, bounds.top + 5);
+    eventSender.mouseDown();
+    eventSender.mouseUp();
+
+    shouldBeTrue(&quot;media.paused&quot;);
+
+    debug(&quot;&quot;);
+    media.remove();
+    finishJSTest();
+});
+
+&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundtodismisstrackspanelshouldnottoggleplaybackexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+Testing that clicking on a paused video's background to dimiss the tracks panel does not resume it.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS media.paused is true
+
+Clicking on tracks button to show tracks panel
+
+Clicking on video background
+PASS media.paused is true
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideobackgroundtodismisstrackspanelshouldnottoggleplaybackhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/media-controls-loader.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/CC+Subtitles.mov&quot; style=&quot;width: 640px; height: 360px;&quot; controls autoplay&gt;&lt;/video&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing that clicking on a paused video's background to dimiss the tracks panel does not resume it.&quot;);
+
+window.jsTestIsAsync = true;
+
+const media = document.querySelector(&quot;video&quot;);
+const shadowRoot = window.internals.shadowRoot(media);
+
+media.addEventListener(&quot;play&quot;, () =&gt; {
+    media.pause();
+    shouldBeTrue(&quot;media.paused&quot;);
+
+    window.requestAnimationFrame(() =&gt; {
+        clickOnTracksButton();
+        window.requestAnimationFrame(() =&gt; {
+            clickOnVideoBackground();
+            shouldBeTrue(&quot;media.paused&quot;);
+
+            debug(&quot;&quot;);
+            media.remove();
+            finishJSTest();
+        });
+    });
+});
+
+function clickOnTracksButton()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Clicking on tracks button to show tracks panel&quot;);
+    clickOnElement(shadowRoot.lastChild.querySelector(&quot;button.tracks&quot;), 1, 1);
+}
+
+function clickOnVideoBackground()
+{
+    debug(&quot;&quot;);
+    debug(&quot;Clicking on video background&quot;);
+    clickOnElement(media, 5, 5);
+}
+
+function clickOnElement(element, relativeX, relativeY)
+{
+    const bounds = element.getBoundingClientRect();
+    eventSender.mouseMoveTo(bounds.left + relativeX, bounds.top + relativeY);
+    eventSender.mouseDown();
+    eventSender.mouseUp();
+}
+
+&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="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideocontrolsshouldnotpauseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause-expected.txt        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Testing that clicking on a video's controls does not pause it.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS media.paused is false
+
+Clicking on video controls
+PASS media.paused is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerclickonvideocontrolsshouldnotpausehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html (0 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html                                (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/media-controls-loader.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+&lt;video src=&quot;../../content/test.mp4&quot; style=&quot;position: absolute; top: 0; left: 0; width: 800px;&quot; controls autoplay&gt;&lt;/video&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+description(&quot;Testing that clicking on a video's controls does not pause it.&quot;);
+
+window.jsTestIsAsync = true;
+
+const media = document.querySelector(&quot;video&quot;);
+
+media.addEventListener(&quot;play&quot;, () =&gt; {
+    shouldBeFalse(&quot;media.paused&quot;);
+    
+    const bounds = media.getBoundingClientRect();
+    debug(&quot;&quot;);
+    debug(&quot;Clicking on video controls&quot;);
+    eventSender.mouseMoveTo(bounds.left + 5, bounds.bottom - 5);
+    eventSender.mouseDown();
+    eventSender.mouseUp();
+
+    shouldBeFalse(&quot;media.paused&quot;);
+
+    debug(&quot;&quot;);
+    media.remove();
+    finishJSTest();
+});
+
+&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediadocumentsclickonvideoshouldnotpauseexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause-expected.txt        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx"> 
</span><span class="cx"> PASS video.paused is false
</span><span class="cx"> 
</span><del>-Clicking on video
</del><ins>+Clicking on video controls
</ins><span class="cx"> PASS video.paused is false
</span><span class="cx"> 
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediadocumentsclickonvideoshouldnotpausehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause.html (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause.html        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/LayoutTests/media/modern-media-controls/media-documents/click-on-video-should-not-pause.html        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -29,8 +29,8 @@
</span><span class="cx">         
</span><span class="cx">         const bounds = video.getBoundingClientRect();
</span><span class="cx">         debug(&quot;&quot;);
</span><del>-        debug(&quot;Clicking on video&quot;);
-        window.eventSender.mouseMoveTo(bounds.left + 10, bounds.top + 10);
</del><ins>+        debug(&quot;Clicking on video controls&quot;);
+        window.eventSender.mouseMoveTo(bounds.left + 5, bounds.bottom - 5);
</ins><span class="cx">         window.eventSender.mouseDown();
</span><span class="cx">         window.eventSender.mouseUp();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -2805,6 +2805,10 @@
</span><span class="cx"> media/modern-media-controls/media-controller/media-controller-auto-hide-rewind-with-mouse-enter.html [ Skip ]
</span><span class="cx"> media/modern-media-controls/scrubber-support/scrubber-support-click.html [ Skip ]
</span><span class="cx"> media/modern-media-controls/media-documents/click-on-video-should-not-pause.html [ Skip ]
</span><ins>+media/modern-media-controls/media-documents/click-on-video-should-not-pause.html [ Skip ]
+media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html [ Skip ]
+media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html [ Skip ]
+media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html [ Skip ]
</ins><span class="cx"> 
</span><span class="cx"> # Tests designed for macOS that have iOS equivalents in &quot;ipad&quot; directories
</span><span class="cx"> media/modern-media-controls/fullscreen-support/fullscreen-support-click.html [ Skip ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/ChangeLog        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2017-02-17  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        [Modern Media Controls] Toggle playback when clicking on the video on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=168515
+        &lt;rdar://problem/30577441&gt;
+
+        Reviewed by Dean Jackson.
+
+        Listen to click events on the macOS media controls. Detect any clicks that were on the
+        background instead of the controls widgets themselves, and tell the delegate (MediaController)
+        about them.
+
+        Tests: media/modern-media-controls/media-controller/media-controller-click-on-video-background-should-pause.html
+               media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html
+               media/modern-media-controls/media-controller/media-controller-click-on-video-controls-should-not-pause.html
+
+        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
+        (MacOSFullscreenMediaControls.prototype._handleMousedown):
+        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
+        (MacOSInlineMediaControls.prototype.handleEvent):
+        * Modules/modern-media-controls/controls/macos-media-controls.js:
+        (MacOSMediaControls.prototype.handleEvent):
+        (MacOSMediaControls):
+        * Modules/modern-media-controls/media/media-controller.js:
+        (MediaController.prototype.togglePlayback):
+        (MediaController.prototype.macOSControlsBackgroundWasClicked):
+        (MediaController.prototype._updateControlsIfNeeded):
+        * Modules/modern-media-controls/media/playback-support.js:
+        (PlaybackSupport.prototype.buttonWasPressed):
+
</ins><span class="cx"> 2017-02-17  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Refactoring: Remove AudioSourceObserverObjC and AudioCaptureSourceProviderObjC
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosfullscreenmediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -128,6 +128,8 @@
</span><span class="cx"> 
</span><span class="cx">     _handleMousedown(event)
</span><span class="cx">     {
</span><ins>+        super.handleEvent(event);
+
</ins><span class="cx">         if (event.target !== this.controlsBar.element)
</span><span class="cx">             return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosinlinemediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -141,6 +141,7 @@
</span><span class="cx"> 
</span><span class="cx">     handleEvent(event)
</span><span class="cx">     {
</span><ins>+        super.handleEvent(event);
</ins><span class="cx">         this._volumeSliderContainer.visible = event.type === &quot;mouseenter&quot; || event.relatedTarget === this._volumeSliderContainer.element;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolsmacosmediacontrolsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.js        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -36,6 +36,9 @@
</span><span class="cx">         this.tracksButton = new TracksButton(this);
</span><span class="cx">         this.tracksPanel = new TracksPanel;
</span><span class="cx">         this.volumeSlider = new VolumeSlider;
</span><ins>+
+        this.element.addEventListener(&quot;mousedown&quot;, this);
+        this.element.addEventListener(&quot;click&quot;, this);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="lines">@@ -56,4 +59,23 @@
</span><span class="cx">         this.tracksPanel.hide();
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // Protected
+
+    handleEvent(event)
+    {
+        if (event.currentTarget !== this.element)
+            return;
+
+        // Only notify that the background was clicked when the &quot;mousedown&quot; event
+        // was also received, which wouldn't happen if the &quot;mousedown&quot; event caused
+        // the tracks panel to be hidden.
+        if (event.type === &quot;mousedown&quot;)
+            this._receivedMousedown = true;
+        else if (event.type === &quot;click&quot;) {
+            if (this._receivedMousedown &amp;&amp; event.target === this.element &amp;&amp; this.delegate &amp;&amp; typeof this.delegate.macOSControlsBackgroundWasClicked === &quot;function&quot;)
+                this.delegate.macOSControlsBackgroundWasClicked();
+            delete this._receivedMousedown
+        }
+    }
+
</ins><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediamediacontrollerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -58,6 +58,8 @@
</span><span class="cx">             media.addEventListener(&quot;webkitfullscreenchange&quot;, this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // Public
+
</ins><span class="cx">     get layoutTraits()
</span><span class="cx">     {
</span><span class="cx">         let traits = window.navigator.platform === &quot;MacIntel&quot; ? LayoutTraits.macOS : LayoutTraits.iOS;
</span><span class="lines">@@ -81,6 +83,14 @@
</span><span class="cx">         return traits;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    togglePlayback()
+    {
+        if (this.media.paused)
+            this.media.play();
+        else
+            this.media.pause();
+    }
+
</ins><span class="cx">     // Protected
</span><span class="cx"> 
</span><span class="cx">     set pageScaleFactor(pageScaleFactor)
</span><span class="lines">@@ -94,6 +104,13 @@
</span><span class="cx">         this.controls.usesLTRUserInterfaceLayoutDirection = flag;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    macOSControlsBackgroundWasClicked()
+    {
+        // Toggle playback when clicking on the video but not on any controls on macOS.
+        if (this.media.controls)
+            this.togglePlayback();
+    }
+
</ins><span class="cx">     handleEvent(event)
</span><span class="cx">     {
</span><span class="cx">         if (event instanceof TrackEvent &amp;&amp; event.currentTarget === this.media.videoTracks)
</span><span class="lines">@@ -137,6 +154,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this.controls = new ControlsClass;
</span><ins>+        this.controls.delegate = this;
</ins><span class="cx"> 
</span><span class="cx">         if (this.shadowRoot.host &amp;&amp; this.shadowRoot.host.dataset.autoHideDelay)
</span><span class="cx">             this.controls.controlsBar.autoHideDelay = this.shadowRoot.host.dataset.autoHideDelay;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolsmediaplaybacksupportjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/playback-support.js (212572 => 212573)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/media/playback-support.js        2017-02-17 21:33:39 UTC (rev 212572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/playback-support.js        2017-02-17 21:40:37 UTC (rev 212573)
</span><span class="lines">@@ -40,11 +40,7 @@
</span><span class="cx"> 
</span><span class="cx">     buttonWasPressed(control)
</span><span class="cx">     {
</span><del>-        const media = this.mediaController.media;
-        if (media.paused)
-            media.play();
-        else
-            media.pause();
</del><ins>+        this.mediaController.togglePlayback();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     syncControl()
</span></span></pre>
</div>
</div>

</body>
</html>