Changeset 211802 in webkit


Ignore:
Timestamp:
Feb 7, 2017 2:53:54 AM (7 years ago)
Author:
commit-queue@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>

Patch by Antoine Quint <Antoine Quint> on 2017-02-07
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.

  • fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html:
  • fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html:
  • 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.
  • media/modern-media-controls/time-label/time-label-white-space-nowrap.html:
Location:
trunk
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r211779 r211802  
     12017-02-07  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        * fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html:
     14        * fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html:
     15        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt:
     16        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on.html:
     17        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle-expected.txt:
     18        * media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-toggle.html:
     19        * media/modern-media-controls/media-controller/media-controller-video-with-only-audio-expected.txt: Added.
     20        * media/modern-media-controls/media-controller/media-controller-video-with-only-audio.html: Added.
     21        * media/modern-media-controls/time-label/time-label-white-space-nowrap.html:
     22
    1232017-02-07  Romain Bellessort  <romain.bellessort@crf.canon.fr>
    224
  • trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls-expected.html

    r211729 r211802  
    1 <!DOCTYPE html>
     1<!DOCTYPE html><!-- webkit-test-runner [ enableModernMediaControls=false ] -->
    22<html>
    33    <head>
     
    4545        <div class="region" id="region1">
    4646            <div class="article" id="article1">
    47                 <video id="video" controls></video><span style="color:#00FF00">
     47                <video id="video" src="../../media/content/test.mp4" controls></video><span style="color:#00FF00">
    4848            </div>
    4949        </div>
  • trunk/LayoutTests/fast/regions/inline-block-inside-anonymous-overflow-with-covered-controls.html

    r211729 r211802  
    1 <!DOCTYPE html>
     1<!DOCTYPE html><!-- webkit-test-runner [ enableModernMediaControls=false ] -->
    22<html>
    33    <head>
     
    4545        <div class="region" id="region2"></div>
    4646        <div id="article">
    47             <video id="video" controls></video><span style="color:#00FF00">This text, together with the video element, are inside an anonymouse block</span>
     47            <video id="video" src="../../media/content/test.mp4" controls></video><span style="color:#00FF00">This text, together with the video element, are inside an anonymouse block</span>
    4848            <div id="after" style="color:blue">This div is after the anonymous block</div>
    4949        </div>
  • trunk/LayoutTests/media/modern-media-controls/controls-visibility-support/controls-visibility-support-controls-on-expected.txt

    r211729 r211802  
    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

    r211729 r211802  
    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

    r211729 r211802  
    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

    r211729 r211802  
    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/LayoutTests/media/modern-media-controls/time-label/time-label-white-space-nowrap.html

    r211729 r211802  
    1515    media.pause();
    1616
    17     timeLabel = window.internals.shadowRoot(media).querySelector(".time-label");
    18     shouldBeEqualToString("timeLabel.ownerDocument.defaultView.getComputedStyle(timeLabel).whiteSpace", "nowrap");
     17    window.requestAnimationFrame(() => {
     18        timeLabel = window.internals.shadowRoot(media).querySelector(".time-label");
     19        shouldBeEqualToString("timeLabel.ownerDocument.defaultView.getComputedStyle(timeLabel).whiteSpace", "nowrap");
    1920
    20     debug("");
    21     media.remove();
    22     finishJSTest();
     21        debug("");
     22        media.remove();
     23        finishJSTest();
     24    });
    2325});
    2426
  • trunk/Source/WebCore/ChangeLog

    r211779 r211802  
     12017-02-07  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-07  Romain Bellessort  <romain.bellessort@crf.canon.fr>
    226
  • trunk/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js

    r211729 r211802  
    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;
     66        const isVideo = media instanceof HTMLVideoElement && media.videoTracks.length > 0;
    6267        let shouldShowControls = this.mediaController.media.controls;
    6368        if (isVideo)
  • trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js

    r211729 r211802  
    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.