Diff
Modified: trunk/LayoutTests/ChangeLog (207553 => 207554)
--- trunk/LayoutTests/ChangeLog 2016-10-19 18:59:23 UTC (rev 207553)
+++ trunk/LayoutTests/ChangeLog 2016-10-19 19:04:35 UTC (rev 207554)
@@ -1,3 +1,31 @@
+2016-10-19 Antoine Quint <grao...@apple.com>
+
+ [Modern Media Controls] Media Controller: click-to-start support
+ https://bugs.webkit.org/show_bug.cgi?id=163659
+ <rdar://problem/28845656>
+
+ 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:
+
2016-10-19 Aaron Chu <aaron_...@apple.com>
Web Inspector: AXI: expose computed tree node and heading level
Deleted: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt (207553 => 207554)
--- 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)
@@ -1,15 +0,0 @@
-Testing the MediaController click-to-start behavior.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-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
-
Deleted: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html (207553 => 207554)
--- 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)
@@ -1,62 +0,0 @@
-<script src=""
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<body>
-<video src="" style="width: 320px; height: 240px;"></video>
-<div id="shadow"></div>
-<script type="text/_javascript_">
-
-window.jsTestIsAsync = true;
-
-description("Testing the <code>MediaController</code> click-to-start behavior.");
-
-iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
-
-const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
-const media = document.querySelector("video");
-const mediaController = createControls(shadowRoot, media, null);
-
-shouldBeTrue("mediaController.controls.showsStartButton");
-
-media.addEventListener("play", function() {
- debug("Media is playing");
- shouldBeFalse("mediaController.controls.showsStartButton");
- debug("");
- shadowRoot.host.remove();
- media.remove();
- finishJSTest();
-});
-
-debug("");
-debug("Dispatching click event to the start button");
-mediaController.controls.startButton.element.click();
-
-</script>
-<script src=""
-</body>
Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html (207553 => 207554)
--- 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)
@@ -26,6 +26,8 @@
<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
<body>
<video src=""
Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html (207553 => 207554)
--- 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)
@@ -26,6 +26,8 @@
<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
<script src="" type="text/_javascript_"></script>
<body>
<video src="" style="width: 320px; height: 240px;"></video>
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)
--- 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)
@@ -0,0 +1,10 @@
+Testing the StartSupport behavior with an audio element.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mediaController.controls.showsStartButton is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,52 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<audio src="" style="width: 320px; height: 240px;"></audio>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+description("Testing the <code>StartSupport</code> behavior with an audio element.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("audio");
+const mediaController = createControls(shadowRoot, media, null);
+
+shouldBeFalse("mediaController.controls.showsStartButton");
+
+shadowRoot.host.remove();
+media.remove();
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,12 @@
+Testing the StartSupport behavior with autoplay.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Media is playing
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,58 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video src="" style="width: 320px; height: 240px;" autoplay></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>StartSupport</code> behavior with autoplay.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener("play", function() {
+ debug("Media is playing");
+ shouldBeFalse("mediaController.controls.showsStartButton");
+ debug("");
+ shadowRoot.host.remove();
+ media.remove();
+ finishJSTest();
+});
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,15 @@
+Testing the MediaController click-to-start behavior.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+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
+
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)
--- 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)
@@ -0,0 +1,66 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video src="" style="width: 320px; height: 240px;"></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>MediaController</code> click-to-start behavior.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener("loadedmetadata", function() {
+ shouldBeTrue("mediaController.controls.showsStartButton");
+ debug("");
+ debug("Dispatching click event to the start button");
+ mediaController.controls.startButton.element.click();
+});
+
+media.addEventListener("play", function() {
+ debug("Media is playing");
+ shouldBeFalse("mediaController.controls.showsStartButton");
+ debug("");
+ shadowRoot.host.remove();
+ media.remove();
+ finishJSTest();
+});
+
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,11 @@
+Testing the StartSupport behavior with an error.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,57 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video src="" style="width: 320px; height: 240px;"></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>StartSupport</code> behavior with an error.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener("error", function() {
+ shouldBeFalse("mediaController.controls.showsStartButton");
+ debug("");
+ shadowRoot.host.remove();
+ media.remove();
+ finishJSTest();
+});
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,12 @@
+Testing the StartSupport behavior with no source.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Media entered fullscreen
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,79 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video src="" style="width: 320px; height: 240px;"></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>StartSupport</code> behavior with no source.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+const button = document.body.appendChild(document.createElement("button"));
+button.addEventListener("click", event => {
+ try {
+ media.webkitEnterFullscreen();
+ } catch(e) {
+ debug("Calling media.webkitEnterFullscreen() failed");
+ finishJSTest();
+ }
+});
+
+media.addEventListener("webkitfullscreenchange", function() {
+ debug("Media entered fullscreen");
+ shouldBeFalse("mediaController.controls.showsStartButton");
+ debug("");
+ shadowRoot.host.remove();
+ media.remove();
+ button.remove();
+ finishJSTest();
+});
+
+media.addEventListener("loadedmetadata", event => {
+ if ("eventSender" 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("This test is designed to run in DRT");
+});
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,15 @@
+Testing the StartSupport behavior with manual play.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Media is playing
+PASS mediaController.controls.showsStartButton is false
+
+Media is paused
+PASS mediaController.controls.showsStartButton is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,69 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video src="" style="width: 320px; height: 240px;"></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>StartSupport</code> behavior with manual play.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+media.addEventListener("play", function() {
+ debug("Media is playing");
+ shouldBeFalse("mediaController.controls.showsStartButton");
+
+ media.addEventListener("pause", function() {
+ debug("");
+ debug("Media is paused");
+ shouldBeFalse("mediaController.controls.showsStartButton");
+ debug("");
+ shadowRoot.host.remove();
+ media.remove();
+ finishJSTest();
+ });
+
+ media.autoplay = false;
+ media.pause();
+});
+
+media.play();
+
+</script>
+<script src=""
+</body>
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)
--- 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)
@@ -0,0 +1,10 @@
+Testing the StartSupport behavior with no source.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mediaController.controls.showsStartButton is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
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)
--- 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)
@@ -0,0 +1,52 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<video style="width: 320px; height: 240px;"></video>
+<div id="shadow"></div>
+<script type="text/_javascript_">
+
+description("Testing the <code>StartSupport</code> behavior with no source.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" });
+const media = document.querySelector("video");
+const mediaController = createControls(shadowRoot, media, null);
+
+shouldBeFalse("mediaController.controls.showsStartButton");
+
+shadowRoot.host.remove();
+media.remove();
+
+</script>
+<script src=""
+</body>
Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (207553 => 207554)
--- 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)
@@ -2692,6 +2692,7 @@
webkit.org/b/163009 media/modern-media-controls/icon-button/icon-button-active-state.html [ Failure ]
webkit.org/b/163357 media/modern-media-controls/volume-slider/volume-slider-value.html [ Skip ]
+webkit.org/b/163669 media/modern-media-controls/start-support/start-support-fullscreen.html [ Skip ]
# This variation font test requires Skia which isn't available on iOS.
webkit.org/b/163093 fast/text/variations/advances.html [ Failure ]
Modified: trunk/Source/WebCore/ChangeLog (207553 => 207554)
--- 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)
@@ -1,3 +1,51 @@
+2016-10-19 Antoine Quint <grao...@apple.com>
+
+ [Modern Media Controls] Media Controller: click-to-start support
+ https://bugs.webkit.org/show_bug.cgi?id=163659
+ <rdar://problem/28845656>
+
+ 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):
+
2016-10-19 Aaron Chu <aaron_...@apple.com>
Web Inspector: AXI: expose computed tree node and heading level
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)
--- 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)
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ }
+}
Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (207553 => 207554)
--- 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)
@@ -30,6 +30,7 @@
{
this.shadowRoot = shadowRoot;
this.media = media;
+ this.host = host;
// FIXME: This should get set dynamically based on the current environment.
this.layoutTraits = LayoutTraits.macOS;
@@ -37,8 +38,7 @@
this.controls = new MacOSInlineMediaControls
shadowRoot.appendChild(this.controls.element);
- this.controls.startButton.uiDelegate = this;
- this.controls.showsStartButton = true;
+ new StartSupport(this);
this._updateControlsSize();
media.addEventListener("resize", this);
@@ -62,15 +62,6 @@
this._updateControlsSize();
}
- buttonWasClicked(button)
- {
- if (button !== this.controls.startButton)
- return;
-
- this.controls.showsStartButton = false;
- this.media.play();
- }
-
// Private
_updateControlsSize()
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)
--- 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)
@@ -0,0 +1,93 @@
+/*
+ * 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 ["loadedmetadata", "play", "error", "webkitfullscreenchange"];
+ }
+
+ buttonWasClicked(control)
+ {
+ this.mediaController.media.play();
+ }
+
+ handleEvent(event)
+ {
+ if (event.type === "play")
+ 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 && host && host.allowsInlineMediaPlayback)
+ return false;
+
+ return true;
+ }
+
+}