Changeset 185270 in webkit


Ignore:
Timestamp:
Jun 5, 2015 3:33:23 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

MediaSessions should keep track of their participating media elements.
https://bugs.webkit.org/show_bug.cgi?id=145703

Patch by Matt Rajca <mrajca@apple.com> on 2015-06-05
Reviewed by Eric Carlson.

  • Modules/mediasession/MediaSession.cpp:

(WebCore::MediaSession::addMediaElement): Add the given media element to the media session.
(WebCore::MediaSession::removeMediaElement): Remove the given media element from the media session.
(WebCore::MediaSession::activeParticipatingElements): Dynamically build a vector of actively-playing media

elements.

  • Modules/mediasession/MediaSession.h:
  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::~HTMLMediaElement): Ensure the element is removed from its media session.
(WebCore::HTMLMediaElement::setSession): Update sessions' references to their media elements.

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185269 r185270  
     12015-06-05  Matt Rajca  <mrajca@apple.com>
     2
     3        MediaSessions should keep track of their participating media elements.
     4        https://bugs.webkit.org/show_bug.cgi?id=145703
     5
     6        Reviewed by Eric Carlson.
     7
     8        * Modules/mediasession/MediaSession.cpp:
     9        (WebCore::MediaSession::addMediaElement): Add the given media element to the media session.
     10        (WebCore::MediaSession::removeMediaElement): Remove the given media element from the media session.
     11        (WebCore::MediaSession::activeParticipatingElements): Dynamically build a vector of actively-playing media
     12          elements.
     13        * Modules/mediasession/MediaSession.h:
     14        * html/HTMLMediaElement.cpp:
     15        (WebCore::HTMLMediaElement::~HTMLMediaElement): Ensure the element is removed from its media session.
     16        (WebCore::HTMLMediaElement::setSession): Update sessions' references to their media elements.
     17
    1182015-06-05  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp

    r185126 r185270  
    2929#if ENABLE(MEDIA_SESSION)
    3030
     31#include "HTMLMediaElement.h"
     32
    3133namespace WebCore {
    3234
     
    4951}
    5052
     53void MediaSession::addMediaElement(HTMLMediaElement& element)
     54{
     55    ASSERT(!m_participatingElements.contains(&element));
     56    m_participatingElements.append(&element);
     57}
     58
     59void MediaSession::removeMediaElement(HTMLMediaElement& element)
     60{
     61    ASSERT(m_participatingElements.contains(&element));
     62    m_participatingElements.remove(m_participatingElements.find(&element));
     63}
     64
     65Vector<HTMLMediaElement*> MediaSession::activeParticipatingElements() const
     66{
     67    Vector<HTMLMediaElement*> elements;
     68
     69    for (auto* element : m_participatingElements) {
     70        if (element->isPlaying())
     71            elements.append(element);
     72    }
     73
     74    return elements;
     75}
     76
    5177void MediaSession::releaseSession()
    5278{
  • trunk/Source/WebCore/Modules/mediasession/MediaSession.h

    r185136 r185270  
    3333namespace WebCore {
    3434
     35class HTMLMediaElement;
     36
    3537class MediaSession final : public RefCounted<MediaSession> {
    3638public:
     
    5557    };
    5658
     59    friend class HTMLMediaElement;
     60
     61    void addMediaElement(HTMLMediaElement&);
     62    void removeMediaElement(HTMLMediaElement&);
     63
     64    Vector<HTMLMediaElement*> activeParticipatingElements() const;
     65
    5766    State m_currentState { State::Idle };
     67    Vector<HTMLMediaElement*> m_participatingElements;
    5868
    5969    const String m_kind;
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r185223 r185270  
    458458#endif
    459459
     460#if ENABLE(MEDIA_SESSION)
     461    if (m_session) {
     462        m_session->removeMediaElement(*this);
     463        m_session = nullptr;
     464    }
     465#endif
     466
    460467    m_seekTaskQueue.close();
    461468
     
    63686375void HTMLMediaElement::setSession(MediaSession* session)
    63696376{
     6377    if (m_session)
     6378        m_session->removeMediaElement(*this);
     6379
    63706380    m_session = session;
    6371 }
    6372 
    6373 #endif
    6374 
    6375 }
    6376 
    6377 #endif
     6381
     6382    if (session)
     6383        session->addMediaElement(*this);
     6384}
     6385
     6386#endif
     6387
     6388}
     6389
     6390#endif
Note: See TracChangeset for help on using the changeset viewer.