Changeset 261576 in webkit


Ignore:
Timestamp:
May 12, 2020 1:43:58 PM (4 years ago)
Author:
eric.carlson@apple.com
Message:

Poster set after playback begins should be ignored
https://bugs.webkit.org/show_bug.cgi?id=211464
<rdar://problem/62605114>

Reviewed by Darin Adler.

Source/WebCore:

Test: media/video-poster-set-after-playback.html

  • html/HTMLVideoElement.cpp:

(WebCore::HTMLVideoElement::parseAttribute): Ignore poster changes after first video frame
is available.
(WebCore::HTMLVideoElement::updateDisplayState): Set mode to Video if the first video
frame is available.

  • testing/Internals.cpp:

(WebCore::Internals::elementShouldDisplayPosterImage const):

  • testing/Internals.h:
  • testing/Internals.idl:

LayoutTests:

  • media/video-poster-set-after-playback-expected.txt: Added.
  • media/video-poster-set-after-playback.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r261575 r261576  
     12020-05-12  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Poster set after playback begins should be ignored
     4        https://bugs.webkit.org/show_bug.cgi?id=211464
     5        <rdar://problem/62605114>
     6
     7        Reviewed by Darin Adler.
     8
     9        * media/video-poster-set-after-playback-expected.txt: Added.
     10        * media/video-poster-set-after-playback.html: Added.
     11
    1122020-05-12  Simon Fraser  <simon.fraser@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r261575 r261576  
     12020-05-12  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Poster set after playback begins should be ignored
     4        https://bugs.webkit.org/show_bug.cgi?id=211464
     5        <rdar://problem/62605114>
     6
     7        Reviewed by Darin Adler.
     8
     9        Test: media/video-poster-set-after-playback.html
     10
     11        * html/HTMLVideoElement.cpp:
     12        (WebCore::HTMLVideoElement::parseAttribute): Ignore `poster` changes after first video frame
     13        is available.
     14        (WebCore::HTMLVideoElement::updateDisplayState): Set mode to Video if the first video
     15        frame is available.
     16
     17        * testing/Internals.cpp:
     18        (WebCore::Internals::elementShouldDisplayPosterImage const):
     19        * testing/Internals.h:
     20        * testing/Internals.idl:
     21
    1222020-05-12  Simon Fraser  <simon.fraser@apple.com>
    223
  • trunk/Source/WebCore/html/HTMLVideoElement.cpp

    r261501 r261576  
    133133{
    134134    if (name == posterAttr) {
     135        if (hasAvailableVideoFrame())
     136            return;
     137
    135138        // Force a poster recalc by setting m_displayMode to Unknown directly before calling updateDisplayState.
    136139        HTMLMediaElement::setDisplayMode(Unknown);
     
    162165#endif
    163166    }
    164 
    165167}
    166168
     
    279281void HTMLVideoElement::updateDisplayState()
    280282{
    281     if (posterImageURL().isEmpty())
     283    if (posterImageURL().isEmpty() || hasAvailableVideoFrame())
    282284        setDisplayMode(Video);
    283285    else if (displayMode() < Poster)
  • trunk/Source/WebCore/testing/Internals.cpp

    r261553 r261576  
    43354335}
    43364336
     4337ExceptionOr<bool> Internals::elementShouldDisplayPosterImage(HTMLVideoElement& element) const
     4338{
     4339#if ENABLE(VIDEO)
     4340    return element.shouldDisplayPosterImage();
     4341#else
     4342    UNUSED_PARAM(element);
     4343    return Exception { InvalidAccessError };
     4344#endif
     4345}
    43374346
    43384347#if ENABLE(WIRELESS_PLAYBACK_TARGET)
  • trunk/Source/WebCore/testing/Internals.h

    r261553 r261576  
    868868    ExceptionOr<MediaUsageState> mediaUsageState(HTMLMediaElement&) const;
    869869
     870    ExceptionOr<bool> elementShouldDisplayPosterImage(HTMLVideoElement&) const;
     871
    870872#if ENABLE(VIDEO)
    871873    using PlaybackControlsPurpose = MediaElementSession::PlaybackControlsPurpose;
  • trunk/Source/WebCore/testing/Internals.idl

    r261479 r261576  
    841841
    842842    [Conditional=VIDEO, MayThrowException] MediaUsageState mediaUsageState(HTMLMediaElement element);
     843    [Conditional=VIDEO, MayThrowException] boolean elementShouldDisplayPosterImage(HTMLVideoElement element);
    843844
    844845    DOMString ongoingLoadsDescriptions();
Note: See TracChangeset for help on using the changeset viewer.