Changeset 212575 in webkit


Ignore:
Timestamp:
Feb 17, 2017 1:48:04 PM (7 years ago)
Author:
graouts@webkit.org
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.
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r212573 r212575  
     12017-02-17  Antoine Quint  <graouts@apple.com>
     2
     3        [Modern Media Controls] Improve handling of <video> with only audio tracks
     4        https://bugs.webkit.org/show_bug.cgi?id=167836
     5        <rdar://problem/30255812>
     6
     7        Reviewed by Dean Jackson.
     8
     9        Add a new test to check that a <video> with a resource that only has audio tracks
     10        does not auto-hide nor show the fullscreen button. We also rebaseline a few existing
     11        tests for this change of behavior.
     12
     13        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt:
     14        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html:
     15        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt:
     16        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html:
     17        * media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt: Added.
     18        * media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html: Added.
     19
    1202017-02-17  Antoine Quint  <graouts@apple.com>
    221
  • trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt

    r211986 r212575  
    44
    55
    6 Media has not begun loading yet
    7 PASS mediaController.controls.controlsBar.visible is false
    8 PASS mediaController.controls.startButton.visible is false
    96
    107Media has loaded metadata
     8PASS media.videoTracks.length is 1
    119PASS mediaController.controls.controlsBar.visible is true
    1210PASS mediaController.controls.startButton.visible is true
  • trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html

    r211986 r212575  
    1414const mediaController = createControls(shadowRoot, media, null);
    1515
    16 debug("Media has not begun loading yet");
    17 shouldBeFalse("mediaController.controls.controlsBar.visible");
    18 shouldBeFalse("mediaController.controls.startButton.visible");
    19 
    2016media.addEventListener("loadedmetadata", function() {
    2117    debug("");
    2218    debug("Media has loaded metadata");
     19    shouldBe("media.videoTracks.length", "1");
    2320    shouldBeTrue("mediaController.controls.controlsBar.visible");
    2421    shouldBeTrue("mediaController.controls.startButton.visible");
  • trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt

    r211986 r212575  
    44
    55
    6 Media has not begun loading yet
    7 PASS mediaController.controls.controlsBar.visible is false
    8 PASS mediaController.controls.startButton.visible is false
    96
    107Media has loaded metadata
     8PASS media.videoTracks.length is 1
    119PASS mediaController.controls.controlsBar.visible is true
    1210PASS mediaController.controls.startButton.visible is true
  • trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html

    r211986 r212575  
    3636}).observe(media, { attributes: true, attributeFilter: ["controls"] });
    3737
    38 debug("Media has not begun loading yet");
    39 shouldBeFalse("mediaController.controls.controlsBar.visible");
    40 shouldBeFalse("mediaController.controls.startButton.visible");
    41 
    4238media.addEventListener("loadedmetadata", function() {
    4339    debug("");
    4440    debug("Media has loaded metadata");
     41    shouldBe("media.videoTracks.length", "1");
    4542    shouldBeTrue("mediaController.controls.controlsBar.visible");
    4643    shouldBeTrue("mediaController.controls.startButton.visible");
  • trunk/Source/WebCore/ChangeLog

    r212573 r212575  
     12017-02-17  Antoine Quint  <graouts@apple.com>
     2
     3        [Modern Media Controls] Improve handling of <video> with only audio tracks
     4        https://bugs.webkit.org/show_bug.cgi?id=167836
     5        <rdar://problem/30255812>
     6
     7        Reviewed by Dean Jackson.
     8
     9        We now check for the availability of video tracks before considering a <video>
     10        element is displaying an actual video file and turning auto-hide on. We also
     11        check that we have video tracks before enabling the fullscreen button. This
     12        brings the behavior of a <video> pointing to a resource with no video tracks
     13        to be the same as an <audio> element.
     14
     15        Test: media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html
     16
     17        * Modules/modern-media-controls/media/controls-visibility-support.js:
     18        (ControlsVisibilitySupport.prototype.get tracksToMonitor):
     19        (ControlsVisibilitySupport.prototype._updateControls):
     20        (ControlsVisibilitySupport):
     21        * Modules/modern-media-controls/media/fullscreen-support.js:
     22        (FullscreenSupport.prototype.syncControl):
     23        (FullscreenSupport):
     24
    1252017-02-17  Antoine Quint  <graouts@apple.com>
    226
  • trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js

    r212564 r212575  
    4949    }
    5050
     51    get tracksToMonitor()
     52    {
     53        return [this.mediaController.media.videoTracks];
     54    }
     55
    5156    handleEvent()
    5257    {
     
    5964    {
    6065        const media = this.mediaController.media;
    61         const isVideo = media instanceof HTMLVideoElement;
    62         let shouldShowControls = this.mediaController.media.controls && !!media.currentSrc;
     66        const isVideo = media instanceof HTMLVideoElement && media.videoTracks.length > 0;
     67        let shouldShowControls = media.controls && !!media.currentSrc;
    6368        if (isVideo)
    6469            shouldShowControls = shouldShowControls && media.readyState > HTMLMediaElement.HAVE_NOTHING;
  • trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js

    r212276 r212575  
    7070        const control = this.control;
    7171        const media = this.mediaController.media;
    72         control.enabled = media.webkitSupportsFullscreen;
     72        control.enabled = media.webkitSupportsFullscreen && media.videoTracks.length > 0;
    7373        control.isFullScreen = media.webkitDisplayingFullscreen;
    7474    }
Note: See TracChangeset for help on using the changeset viewer.