Changeset 212314 in webkit


Ignore:
Timestamp:
Feb 14, 2017 11:34:09 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

When playing inline after fullscreen, set a flag instead of adding attribute plays inline, and use in requiresFullscreenForVideoPlayback.
https://bugs.webkit.org/show_bug.cgi?id=167815
rdar://problem/27685077

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-02-14
Reviewed by Jer Noble.

Source/WebCore:

Test: media/media-fullscreen-loop-inline.html

When video is allowed to play inline after fullscreen. Looped video causes play state to update, which can send video back to fullscreen when
allowsInline is false. This change will set a new flag when allowsInlineMediaPlaybackAfterFullscreen allows inline playback that can be tested
in requiresFullscreenForVideoPlayback to prevent sending video back into fullscreen when video loops.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::enterFullscreen):
(WebCore::HTMLMediaElement::exitFullscreen):

  • html/HTMLMediaElement.h:

(WebCore::HTMLMediaElement::isTemporarilyAllowingInlinePlaybackAfterFullscreen): Added.

  • html/MediaElementSession.cpp:

(WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):

LayoutTests:

Add a new test that tests inline after fullscreen behavior of looping video.

  • media/media-fullscreen-loop-inline-expected.txt: Added.
  • media/media-fullscreen-loop-inline.html: Added.
  • platform/mac-wk2/TestExpectations: Skipped on webkit2.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r212313 r212314  
     12017-02-14  Jeremy Jones  <jeremyj@apple.com>
     2
     3        When playing inline after fullscreen, set a flag instead of adding attribute plays inline, and use in requiresFullscreenForVideoPlayback.
     4        https://bugs.webkit.org/show_bug.cgi?id=167815
     5        rdar://problem/27685077
     6
     7        Reviewed by Jer Noble.
     8
     9        Add a new test that tests inline after fullscreen behavior of looping video.
     10
     11        * media/media-fullscreen-loop-inline-expected.txt: Added.
     12        * media/media-fullscreen-loop-inline.html: Added.
     13        * platform/mac-wk2/TestExpectations: Skipped on webkit2.
     14
    1152017-02-14  Ryan Haddad  <ryanhaddad@apple.com>
    216
  • trunk/LayoutTests/platform/mac-wk2/TestExpectations

    r212246 r212314  
    322322webkit.org/b/156077 inspector/heap/getRemoteObject.html [ Pass Failure ]
    323323
     324# Video fullscreen is not implemented for mac wk2 in webkittestrunner
     325media/media-fullscreen-loop-inline.html [ Skip ]
     326
    324327### END OF (1) Classified failures with bug reports
    325328########################################
  • trunk/Source/WebCore/ChangeLog

    r212311 r212314  
     12017-02-14  Jeremy Jones  <jeremyj@apple.com>
     2
     3        When playing inline after fullscreen, set a flag instead of adding attribute plays inline, and use in requiresFullscreenForVideoPlayback.
     4        https://bugs.webkit.org/show_bug.cgi?id=167815
     5        rdar://problem/27685077
     6
     7        Reviewed by Jer Noble.
     8
     9        Test: media/media-fullscreen-loop-inline.html
     10
     11        When video is allowed to play inline after fullscreen. Looped video causes play state to update, which can send video back to fullscreen when
     12        allowsInline is false. This change will set a new flag when allowsInlineMediaPlaybackAfterFullscreen allows inline playback that can be tested
     13        in requiresFullscreenForVideoPlayback to prevent sending video back into fullscreen when video loops.
     14
     15        * html/HTMLMediaElement.cpp:
     16        (WebCore::HTMLMediaElement::enterFullscreen):
     17        (WebCore::HTMLMediaElement::exitFullscreen):
     18        * html/HTMLMediaElement.h:
     19        (WebCore::HTMLMediaElement::isTemporarilyAllowingInlinePlaybackAfterFullscreen): Added.
     20        * html/MediaElementSession.cpp:
     21        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):
     22
    1232017-02-14  Jer Noble  <jer.noble@apple.com>
    224
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r212311 r212314  
    54535453        return;
    54545454
     5455    m_temporarilyAllowingInlinePlaybackAfterFullscreen = false;
     5456
    54555457#if ENABLE(FULLSCREEN_API)
    54565458    if (document().settings().fullScreenEnabled()) {
     
    55165518            pauseInternal();
    55175519        else {
    5518             // Allow inline playback, but set 'playsinline' so pausing and starting again (e.g. when scrubbing) won't go back to fullscreen.
     5520            // Allow inline playback, but set a flag so pausing and starting again (e.g. when scrubbing or looping) won't go back to fullscreen.
    55195521            // Also set the controls attribute so the user will be able to control playback.
    5520             setBooleanAttribute(HTMLNames::playsinlineAttr, true);
     5522            m_temporarilyAllowingInlinePlaybackAfterFullscreen = true;
    55215523            setControls(true);
    55225524        }
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r212311 r212314  
    494494    double playbackStartedTime() const { return m_playbackStartedTime; }
    495495
     496    bool isTemporarilyAllowingInlinePlaybackAfterFullscreen() const {return m_temporarilyAllowingInlinePlaybackAfterFullscreen; }
     497
    496498protected:
    497499    HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser);
     
    892894    std::function<void()> m_preparedForInlineCompletionHandler;
    893895
     896    bool m_temporarilyAllowingInlinePlaybackAfterFullscreen { false };
     897
    894898#if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))
    895899    RetainPtr<PlatformLayer> m_videoFullscreenLayer;
  • trunk/Source/WebCore/html/MediaElementSession.cpp

    r211964 r212314  
    541541        return false;
    542542
     543    if (element.isTemporarilyAllowingInlinePlaybackAfterFullscreen())
     544        return false;
     545
    543546    if (!element.document().settings().allowsInlineMediaPlayback())
    544547        return true;
Note: See TracChangeset for help on using the changeset viewer.