Title: [212575] trunk
Revision
212575
Author
grao...@webkit.org
Date
2017-02-17 13:48:04 -0800 (Fri, 17 Feb 2017)

Log Message

[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.

Source/WebCore:

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):

LayoutTests:

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.

Modified Paths

Added Paths

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;
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to