Changeset 175777 in webkit


Ignore:
Timestamp:
Nov 8, 2014, 9:17:32 AM (10 years ago)
Author:
eric.carlson@apple.com
Message:

[iOS] video is sometimes allowed to play from the background
https://bugs.webkit.org/show_bug.cgi?id=138522

Reviewed by Jer Noble.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::displayType): New.

  • html/HTMLMediaElement.h:
  • platform/audio/MediaSession.cpp:

(WebCore::MediaSession::isHidden): New, client passthrough.
(WebCore::MediaSession::displayType): Ditto.

  • platform/audio/MediaSession.h:

(WebCore::MediaSessionClient::displayType):

  • platform/audio/MediaSessionManager.cpp:

(WebCore::MediaSessionManager::sessionCanLoadMedia): New, default implementation returns

true if client is visible or playing.

  • platform/audio/MediaSessionManager.h:
  • platform/audio/ios/MediaSessionManagerIOS.h:
  • platform/audio/ios/MediaSessionManagerIOS.mm:

(WebCore::MediaSessionManageriOS::sessionCanLoadMedia): iOS override, also allows buffering

when displaying optimized fullscreen.

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r175773 r175777  
     12014-11-07  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [iOS] video is sometimes allowed to play from the background
     4        https://bugs.webkit.org/show_bug.cgi?id=138522
     5
     6        Reviewed by Jer Noble.
     7
     8        * html/HTMLMediaElement.cpp:
     9        (WebCore::HTMLMediaElement::displayType): New.
     10        * html/HTMLMediaElement.h:
     11
     12        * platform/audio/MediaSession.cpp:
     13        (WebCore::MediaSession::isHidden): New, client passthrough.
     14        (WebCore::MediaSession::displayType): Ditto.
     15        * platform/audio/MediaSession.h:
     16        (WebCore::MediaSessionClient::displayType):
     17
     18        * platform/audio/MediaSessionManager.cpp:
     19        (WebCore::MediaSessionManager::sessionCanLoadMedia): New, default implementation returns
     20            true if client is visible or playing.
     21        * platform/audio/MediaSessionManager.h:
     22
     23        * platform/audio/ios/MediaSessionManagerIOS.h:
     24        * platform/audio/ios/MediaSessionManagerIOS.mm:
     25        (WebCore::MediaSessionManageriOS::sessionCanLoadMedia): iOS override, also allows buffering
     26            when displaying optimized fullscreen.
     27
    1282014-11-07  Benjamin Poulain  <bpoulain@apple.com>
    229
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r175719 r175777  
    59755975}
    59765976
     5977MediaSession::DisplayType HTMLMediaElement::displayType() const
     5978{
     5979    switch (m_videoFullscreenMode) {
     5980    case VideoFullscreenModeStandard:
     5981        return MediaSession::Fullscreen;
     5982    case VideoFullscreenModeOptimized:
     5983        return MediaSession::Optimized;
     5984    case VideoFullscreenModeNone:
     5985        return MediaSession::Normal;
     5986    default:
     5987        ASSERT_NOT_REACHED();
     5988        break;
     5989    }
     5990
     5991    return MediaSession::Normal;
     5992}
     5993
    59775994#if ENABLE(MEDIA_SOURCE)
    59785995size_t HTMLMediaElement::maximumSourceBufferSize(const SourceBuffer& buffer) const
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r175750 r175777  
    705705    virtual MediaSession::MediaType mediaType() const override;
    706706    virtual MediaSession::MediaType presentationType() const override;
     707    virtual MediaSession::DisplayType displayType() const override;
    707708    virtual void pausePlayback() override;
    708709    virtual void resumePlayback() override;
  • trunk/Source/WebCore/platform/audio/MediaSession.cpp

    r175719 r175777  
    195195}
    196196
     197bool MediaSession::isHidden() const
     198{
     199    return m_client.elementIsHidden();
     200}
     201
     202MediaSession::DisplayType MediaSession::displayType() const
     203{
     204    return m_client.displayType();
     205}
     206
    197207void MediaSession::wirelessRoutesAvailableDidChange() const
    198208{
  • trunk/Source/WebCore/platform/audio/MediaSession.h

    r175719 r175777  
    103103    void wirelessRoutesAvailableDidChange() const;
    104104
     105    enum DisplayType {
     106        Normal,
     107        Fullscreen,
     108        Optimized,
     109    };
     110    DisplayType displayType() const;
     111
     112    bool isHidden() const;
     113
    105114protected:
    106115    MediaSessionClient& client() const { return m_client; }
     
    124133    virtual MediaSession::MediaType mediaType() const = 0;
    125134    virtual MediaSession::MediaType presentationType() const = 0;
     135    virtual MediaSession::DisplayType displayType() const { return MediaSession::Normal; }
    126136
    127137    virtual void resumePlayback() = 0;
  • trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp

    r174666 r175777  
    261261}
    262262
     263bool MediaSessionManager::sessionCanLoadMedia(const MediaSession& session) const
     264{
     265    return session.state() == MediaSession::Playing || !session.isHidden();
     266}
     267
    263268void MediaSessionManager::applicationWillEnterBackground() const
    264269{
  • trunk/Source/WebCore/platform/audio/MediaSessionManager.h

    r174666 r175777  
    7777    bool sessionRestrictsInlineVideoPlayback(const MediaSession&) const;
    7878
     79    virtual bool sessionCanLoadMedia(const MediaSession&) const;
     80
    7981    virtual void configureWireLessTargetMonitoring() { }
    8082
  • trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h

    r174666 r175777  
    6161#endif
    6262
     63    virtual bool sessionCanLoadMedia(const MediaSession&) const override;
     64
    6365    MediaSessionManageriOS();
    6466    RetainPtr<WebMediaSessionHelper> m_objcObserver;
  • trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm

    r174666 r175777  
    214214}
    215215
     216bool MediaSessionManageriOS::sessionCanLoadMedia(const MediaSession& session) const
     217{
     218    return session.state() == MediaSession::Playing || !session.isHidden() || session.displayType() == MediaSession::Optimized;
     219}
     220
    216221} // namespace WebCore
    217222
Note: See TracChangeset for help on using the changeset viewer.