Diff
Modified: trunk/LayoutTests/ChangeLog (212574 => 212575)
--- trunk/LayoutTests/ChangeLog 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/LayoutTests/ChangeLog 2017-02-17 21:48:04 UTC (rev 212575)
@@ -1,5 +1,24 @@
2017-02-17 Antoine Quint <grao...@apple.com>
+ [Modern Media Controls] Improve handling of <video> with only audio tracks
+ https://bugs.webkit.org/show_bug.cgi?id=167836
+ <rdar://problem/30255812>
+
+ Reviewed by Dean Jackson.
+
+ Add a new test to check that a <video> with a resource that only has audio tracks
+ does not auto-hide nor show the fullscreen button. We also rebaseline a few existing
+ tests for this change of behavior.
+
+ * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt:
+ * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html:
+ * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt:
+ * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html:
+ * media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt: Added.
+ * media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html: Added.
+
+2017-02-17 Antoine Quint <grao...@apple.com>
+
[Modern Media Controls] Toggle playback when clicking on the video on macOS
https://bugs.webkit.org/show_bug.cgi?id=168515
<rdar://problem/30577441>
Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt (212574 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt 2017-02-17 21:48:04 UTC (rev 212575)
@@ -3,11 +3,9 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-Media has not begun loading yet
-PASS mediaController.controls.controlsBar.visible is false
-PASS mediaController.controls.startButton.visible is false
Media has loaded metadata
+PASS media.videoTracks.length is 1
PASS mediaController.controls.controlsBar.visible is true
PASS mediaController.controls.startButton.visible is true
Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html (212574 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html 2017-02-17 21:48:04 UTC (rev 212575)
@@ -13,13 +13,10 @@
const media = document.querySelector("video");
const mediaController = createControls(shadowRoot, media, null);
-debug("Media has not begun loading yet");
-shouldBeFalse("mediaController.controls.controlsBar.visible");
-shouldBeFalse("mediaController.controls.startButton.visible");
-
media.addEventListener("loadedmetadata", function() {
debug("");
debug("Media has loaded metadata");
+ shouldBe("media.videoTracks.length", "1");
shouldBeTrue("mediaController.controls.controlsBar.visible");
shouldBeTrue("mediaController.controls.startButton.visible");
debug("");
Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt (212574 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt 2017-02-17 21:48:04 UTC (rev 212575)
@@ -3,11 +3,9 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-Media has not begun loading yet
-PASS mediaController.controls.controlsBar.visible is false
-PASS mediaController.controls.startButton.visible is false
Media has loaded metadata
+PASS media.videoTracks.length is 1
PASS mediaController.controls.controlsBar.visible is true
PASS mediaController.controls.startButton.visible is true
Modified: trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html (212574 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html 2017-02-17 21:48:04 UTC (rev 212575)
@@ -35,13 +35,10 @@
}
}).observe(media, { attributes: true, attributeFilter: ["controls"] });
-debug("Media has not begun loading yet");
-shouldBeFalse("mediaController.controls.controlsBar.visible");
-shouldBeFalse("mediaController.controls.startButton.visible");
-
media.addEventListener("loadedmetadata", function() {
debug("");
debug("Media has loaded metadata");
+ shouldBe("media.videoTracks.length", "1");
shouldBeTrue("mediaController.controls.controlsBar.visible");
shouldBeTrue("mediaController.controls.startButton.visible");
Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt (0 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt 2017-02-17 21:48:04 UTC (rev 212575)
@@ -0,0 +1,12 @@
+Testing that we only show appropriate controls for a video element with only audio tracks.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mediaControls.querySelector('button.fullscreen') is null
+PASS mediaControls.querySelector('.controls-bar').classList.contains('faded') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html (0 => 212575)
--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html 2017-02-17 21:48:04 UTC (rev 212575)
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<script src=""
+<body>
+<video src="" style="width: 800px; height: 240px;" controls autoplay data-auto-hide-delay="100"></video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing that we only show appropriate controls for a video element with only audio tracks.");
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+let mediaControls;
+
+media.addEventListener("play", event => {
+ mediaControls = shadowRoot.lastElementChild.lastElementChild;
+
+ // We should not show the fullscreen button if we have a <video> with no audio tracks.
+ window.requestAnimationFrame(() => shouldBeNull("mediaControls.querySelector('button.fullscreen')"));
+
+ setTimeout(() => {
+ // Controls should not auto-hide if we have a <video> with no audio tracks.
+ shouldBeFalse("mediaControls.querySelector('.controls-bar').classList.contains('faded')");
+
+ debug("");
+ media.remove();
+ finishJSTest();
+ }, 250);
+});
+
+</script>
+<script src=""
+</body>
Modified: trunk/Source/WebCore/ChangeLog (212574 => 212575)
--- trunk/Source/WebCore/ChangeLog 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/Source/WebCore/ChangeLog 2017-02-17 21:48:04 UTC (rev 212575)
@@ -1,5 +1,29 @@
2017-02-17 Antoine Quint <grao...@apple.com>
+ [Modern Media Controls] Improve handling of <video> with only audio tracks
+ https://bugs.webkit.org/show_bug.cgi?id=167836
+ <rdar://problem/30255812>
+
+ Reviewed by Dean Jackson.
+
+ We now check for the availability of video tracks before considering a <video>
+ element is displaying an actual video file and turning auto-hide on. We also
+ check that we have video tracks before enabling the fullscreen button. This
+ brings the behavior of a <video> pointing to a resource with no video tracks
+ to be the same as an <audio> element.
+
+ Test: media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html
+
+ * Modules/modern-media-controls/media/controls-visibility-support.js:
+ (ControlsVisibilitySupport.prototype.get tracksToMonitor):
+ (ControlsVisibilitySupport.prototype._updateControls):
+ (ControlsVisibilitySupport):
+ * Modules/modern-media-controls/media/fullscreen-support.js:
+ (FullscreenSupport.prototype.syncControl):
+ (FullscreenSupport):
+
+2017-02-17 Antoine Quint <grao...@apple.com>
+
[Modern Media Controls] Toggle playback when clicking on the video on macOS
https://bugs.webkit.org/show_bug.cgi?id=168515
<rdar://problem/30577441>
Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js (212574 => 212575)
--- trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js 2017-02-17 21:48:04 UTC (rev 212575)
@@ -48,6 +48,11 @@
return ["loadedmetadata", "play", "pause"];
}
+ get tracksToMonitor()
+ {
+ return [this.mediaController.media.videoTracks];
+ }
+
handleEvent()
{
this._updateControls();
@@ -58,8 +63,8 @@
_updateControls()
{
const media = this.mediaController.media;
- const isVideo = media instanceof HTMLVideoElement;
- let shouldShowControls = this.mediaController.media.controls && !!media.currentSrc;
+ const isVideo = media instanceof HTMLVideoElement && media.videoTracks.length > 0;
+ let shouldShowControls = media.controls && !!media.currentSrc;
if (isVideo)
shouldShowControls = shouldShowControls && media.readyState > HTMLMediaElement.HAVE_NOTHING;
Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js (212574 => 212575)
--- trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js 2017-02-17 21:43:41 UTC (rev 212574)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js 2017-02-17 21:48:04 UTC (rev 212575)
@@ -69,7 +69,7 @@
{
const control = this.control;
const media = this.mediaController.media;
- control.enabled = media.webkitSupportsFullscreen;
+ control.enabled = media.webkitSupportsFullscreen && media.videoTracks.length > 0;
control.isFullScreen = media.webkitDisplayingFullscreen;
}