Changeset 271643 in webkit


Ignore:
Timestamp:
Jan 20, 2021 2:43:59 AM (18 months ago)
Author:
youenn@apple.com
Message:

Introduce a MediaSessionGroupIdentifier
https://bugs.webkit.org/show_bug.cgi?id=220706

Reviewed by Eric Carlson.

Instead of going from page to document to media session, introduce a MediaSessionGroupIdentifier which groups sessions by page.
We can then directly go from page to media session to suspend/resume play back.
Update PlatformMediaSessionClient to implement mediaSessionGroupIdentifier instead of hostingDocumentIdentifier.

We remove pausing playback from Document::~Document, as related audio producers (AudioContext, HTMLMediaElement)
should be paused in their ActiveDOMObject stop method.

Covered by existing tests, this is a refactoring.

  • Modules/webaudio/AudioContext.cpp:

(WebCore::AudioContext::mediaSessionGroupIdentifier const):
(WebCore::AudioContext::hostingDocumentIdentifier const): Deleted.

  • Modules/webaudio/AudioContext.h:
  • WebCore.xcodeproj/project.pbxproj:
  • dom/Document.cpp:

(WebCore::Document::~Document):
(WebCore::Document::mediaPlaybackExists): Deleted.
(WebCore::Document::mediaPlaybackIsPaused): Deleted.
(WebCore::Document::pauseAllMediaPlayback): Deleted.
(WebCore::Document::suspendAllMediaPlayback): Deleted.
(WebCore::Document::resumeAllMediaPlayback): Deleted.
(WebCore::Document::suspendAllMediaBuffering): Deleted.
(WebCore::Document::resumeAllMediaBuffering): Deleted.

  • dom/Document.h:
  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaSessionGroupIdentifier const):

  • html/HTMLMediaElement.h:
  • page/Page.cpp:

(WebCore::Page::mediaPlaybackExists):
(WebCore::Page::mediaPlaybackIsPaused):
(WebCore::Page::pauseAllMediaPlayback):
(WebCore::Page::suspendAllMediaPlayback):
(WebCore::Page::mediaSessionGroupIdentifier const):
(WebCore::Page::resumeAllMediaPlayback):
(WebCore::Page::suspendAllMediaBuffering):
(WebCore::Page::resumeAllMediaBuffering):

  • page/Page.h:
  • platform/MediaSessionGroupIdentifier.h: Added.
  • platform/audio/PlatformMediaSession.h:
  • platform/audio/PlatformMediaSessionManager.cpp:

(WebCore::PlatformMediaSessionManager::pauseAllMediaPlaybackForGroup):
(WebCore::PlatformMediaSessionManager::mediaPlaybackIsPaused):
(WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForGroup):
(WebCore::PlatformMediaSessionManager::resumeAllMediaPlaybackForGroup):
(WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForGroup):
(WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForGroup):
(WebCore::PlatformMediaSessionManager::forEachSessionInGroup):
(WebCore::PlatformMediaSessionManager::pauseAllMediaPlaybackForDocument): Deleted.
(WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument): Deleted.
(WebCore::PlatformMediaSessionManager::resumeAllMediaPlaybackForDocument): Deleted.
(WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForDocument): Deleted.
(WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForDocument): Deleted.
(WebCore::PlatformMediaSessionManager::forEachDocumentSession): Deleted.

  • platform/audio/PlatformMediaSessionManager.h:
Location:
trunk/Source/WebCore
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r271642 r271643  
     12021-01-20  Youenn Fablet  <youenn@apple.com>
     2
     3        Introduce a MediaSessionGroupIdentifier
     4        https://bugs.webkit.org/show_bug.cgi?id=220706
     5
     6        Reviewed by Eric Carlson.
     7
     8        Instead of going from page to document to media session, introduce a MediaSessionGroupIdentifier which groups sessions by page.
     9        We can then directly go from page to media session to suspend/resume play back.
     10        Update PlatformMediaSessionClient to implement mediaSessionGroupIdentifier instead of hostingDocumentIdentifier.
     11
     12        We remove pausing playback from Document::~Document, as related audio producers (AudioContext, HTMLMediaElement)
     13        should be paused in their ActiveDOMObject stop method.
     14
     15        Covered by existing tests, this is a refactoring.
     16
     17        * Modules/webaudio/AudioContext.cpp:
     18        (WebCore::AudioContext::mediaSessionGroupIdentifier const):
     19        (WebCore::AudioContext::hostingDocumentIdentifier const): Deleted.
     20        * Modules/webaudio/AudioContext.h:
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * dom/Document.cpp:
     23        (WebCore::Document::~Document):
     24        (WebCore::Document::mediaPlaybackExists): Deleted.
     25        (WebCore::Document::mediaPlaybackIsPaused): Deleted.
     26        (WebCore::Document::pauseAllMediaPlayback): Deleted.
     27        (WebCore::Document::suspendAllMediaPlayback): Deleted.
     28        (WebCore::Document::resumeAllMediaPlayback): Deleted.
     29        (WebCore::Document::suspendAllMediaBuffering): Deleted.
     30        (WebCore::Document::resumeAllMediaBuffering): Deleted.
     31        * dom/Document.h:
     32        * html/HTMLMediaElement.cpp:
     33        (WebCore::HTMLMediaElement::mediaSessionGroupIdentifier const):
     34        * html/HTMLMediaElement.h:
     35        * page/Page.cpp:
     36        (WebCore::Page::mediaPlaybackExists):
     37        (WebCore::Page::mediaPlaybackIsPaused):
     38        (WebCore::Page::pauseAllMediaPlayback):
     39        (WebCore::Page::suspendAllMediaPlayback):
     40        (WebCore::Page::mediaSessionGroupIdentifier const):
     41        (WebCore::Page::resumeAllMediaPlayback):
     42        (WebCore::Page::suspendAllMediaBuffering):
     43        (WebCore::Page::resumeAllMediaBuffering):
     44        * page/Page.h:
     45        * platform/MediaSessionGroupIdentifier.h: Added.
     46        * platform/audio/PlatformMediaSession.h:
     47        * platform/audio/PlatformMediaSessionManager.cpp:
     48        (WebCore::PlatformMediaSessionManager::pauseAllMediaPlaybackForGroup):
     49        (WebCore::PlatformMediaSessionManager::mediaPlaybackIsPaused):
     50        (WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForGroup):
     51        (WebCore::PlatformMediaSessionManager::resumeAllMediaPlaybackForGroup):
     52        (WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForGroup):
     53        (WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForGroup):
     54        (WebCore::PlatformMediaSessionManager::forEachSessionInGroup):
     55        (WebCore::PlatformMediaSessionManager::pauseAllMediaPlaybackForDocument): Deleted.
     56        (WebCore::PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument): Deleted.
     57        (WebCore::PlatformMediaSessionManager::resumeAllMediaPlaybackForDocument): Deleted.
     58        (WebCore::PlatformMediaSessionManager::suspendAllMediaBufferingForDocument): Deleted.
     59        (WebCore::PlatformMediaSessionManager::resumeAllMediaBufferingForDocument): Deleted.
     60        (WebCore::PlatformMediaSessionManager::forEachDocumentSession): Deleted.
     61        * platform/audio/PlatformMediaSessionManager.h:
     62
    1632021-01-20  Youenn Fablet  <youenn@apple.com>
    264
  • trunk/Source/WebCore/Headers.cmake

    r271111 r271643  
    10231023    platform/MediaSample.h
    10241024    platform/MediaSelectionOption.h
     1025    platform/MediaSessionGroupIdentifier.h
    10251026    platform/MediaSessionIdentifier.h
    10261027    platform/MediaStrategy.h
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp

    r269475 r271643  
    456456}
    457457
    458 DocumentIdentifier AudioContext::hostingDocumentIdentifier() const
     458MediaSessionGroupIdentifier AudioContext::mediaSessionGroupIdentifier() const
    459459{
    460460    auto* document = downcast<Document>(m_scriptExecutionContext);
    461     return document ? document->identifier() : DocumentIdentifier { };
     461    return document && document->page() ? document->page()->mediaSessionGroupIdentifier() : MediaSessionGroupIdentifier { };
    462462}
    463463
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.h

    r269475 r271643  
    121121    bool canProduceAudio() const final { return true; }
    122122    bool isSuspended() const final;
    123     DocumentIdentifier hostingDocumentIdentifier() const final;
     123    MediaSessionGroupIdentifier mediaSessionGroupIdentifier() const final;
    124124
    125125    // MediaCanStartListener.
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r271559 r271643  
    10871087                416E6FE91BBD12E5000A6043 /* ReadableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D8 /* ReadableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10881088                416E6FE91BBD12E5000A6053 /* WritableStreamBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764E8 /* WritableStreamBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1089                416ECAE525B58CC400B34DA5 /* MediaSessionGroupIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 416ECAE325B58CC400B34DA5 /* MediaSessionGroupIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10891090                416FD25F240FA4E5006661D8 /* NowPlayingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 416FD25D240EE1AE006661D8 /* NowPlayingInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10901091                417253AB1354BBBC00360F2A /* MediaControlTextTrackContainerElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 417253A91354BBBC00360F2A /* MediaControlTextTrackContainerElement.h */; };
     
    77467747                416E0B37209BC3C2004A95D9 /* FetchIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchIdentifier.h; sourceTree = "<group>"; };
    77477748                416E29A5102FA962007FC14E /* WorkerReportingProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerReportingProxy.h; sourceTree = "<group>"; };
     7749                416ECAE325B58CC400B34DA5 /* MediaSessionGroupIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSessionGroupIdentifier.h; sourceTree = "<group>"; };
    77487750                416F807924509F3200B68F02 /* WindowDisplayCapturerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowDisplayCapturerMac.h; sourceTree = "<group>"; };
    77497751                416F807A24509F3200B68F02 /* ScreenDisplayCapturerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScreenDisplayCapturerMac.mm; sourceTree = "<group>"; };
     
    2757427576                                CD641EC7181ED60100EE4C41 /* MediaSample.h */,
    2757527577                                A17D275D1EAC579800BF01E7 /* MediaSelectionOption.h */,
     27578                                416ECAE325B58CC400B34DA5 /* MediaSessionGroupIdentifier.h */,
    2757627579                                414460A02412994100814BE7 /* MediaSessionIdentifier.h */,
    2757727580                                A31AC70A24340984007F00A2 /* MediaStrategy.cpp */,
     
    3371133714                                CDBEAEAD19D92B6C00BEBA88 /* MediaSelectionGroupAVFObjC.h in Headers */,
    3371233715                                A17D275E1EAC579800BF01E7 /* MediaSelectionOption.h in Headers */,
     33716                                416ECAE525B58CC400B34DA5 /* MediaSessionGroupIdentifier.h in Headers */,
    3371333717                                CDA9593F2412BAE000910EEF /* MediaSessionHelperIOS.h in Headers */,
    3371433718                                414460A22412994500814BE7 /* MediaSessionIdentifier.h in Headers */,
  • trunk/Source/WebCore/dom/Document.cpp

    r271636 r271643  
    757757        m_cachedResourceLoader->setDocument(nullptr);
    758758
    759 #if ENABLE(VIDEO)
    760     pauseAllMediaPlayback();
    761 #endif
    762 
    763759    // We must call clearRareData() here since a Document class inherits TreeScope
    764760    // as well as Node. See a comment on TreeScope.h for the reason.
     
    18591855    for (auto& element : elements)
    18601856        function(element);
    1861 }
    1862 
    1863 bool Document::mediaPlaybackExists()
    1864 {
    1865     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1866         return !platformMediaSessionManager->hasNoSession();
    1867     return false;
    1868 }
    1869 
    1870 bool Document::mediaPlaybackIsPaused()
    1871 {
    1872     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1873         return platformMediaSessionManager->mediaPlaybackIsPaused(identifier());
    1874     return false;
    1875 }
    1876 
    1877 void Document::pauseAllMediaPlayback()
    1878 {
    1879     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1880         platformMediaSessionManager->pauseAllMediaPlaybackForDocument(identifier());
    1881 }
    1882 
    1883 void Document::suspendAllMediaPlayback()
    1884 {
    1885     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1886         platformMediaSessionManager->suspendAllMediaPlaybackForDocument(identifier());
    1887 }
    1888 
    1889 void Document::resumeAllMediaPlayback()
    1890 {
    1891     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1892         platformMediaSessionManager->resumeAllMediaPlaybackForDocument(identifier());
    1893 }
    1894 
    1895 void Document::suspendAllMediaBuffering()
    1896 {
    1897     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1898         platformMediaSessionManager->suspendAllMediaBufferingForDocument(identifier());
    1899 }
    1900 
    1901 void Document::resumeAllMediaBuffering()
    1902 {
    1903     if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
    1904         platformMediaSessionManager->resumeAllMediaBufferingForDocument(identifier());
    19051857}
    19061858
  • trunk/Source/WebCore/dom/Document.h

    r271636 r271643  
    11211121    void unregisterForVisibilityStateChangedCallbacks(VisibilityChangeClient&);
    11221122
    1123 #if ENABLE(VIDEO)
    1124     bool mediaPlaybackExists();
    1125     bool mediaPlaybackIsPaused();
    1126     void pauseAllMediaPlayback();
    1127     void suspendAllMediaPlayback();
    1128     void resumeAllMediaPlayback();
    1129     void suspendAllMediaBuffering();
    1130     void resumeAllMediaBuffering();
    1131 #endif
    1132 
    11331123    WEBCORE_EXPORT void setShouldCreateRenderers(bool);
    11341124    bool shouldCreateRenderers();
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r271542 r271643  
    30643064}
    30653065
     3066MediaSessionGroupIdentifier HTMLMediaElement::mediaSessionGroupIdentifier() const
     3067{
     3068    return document().page() ? document().page()->mediaSessionGroupIdentifier() : MediaSessionGroupIdentifier { };
     3069}
     3070
    30663071bool HTMLMediaElement::hasAudio() const
    30673072{
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r271245 r271643  
    198198    bool inActiveDocument() const { return m_inActiveDocument; }
    199199
    200     DocumentIdentifier hostingDocumentIdentifier() const final { return document().identifier(); }
     200    MediaSessionGroupIdentifier mediaSessionGroupIdentifier() const final;
    201201
    202202// DOM API
  • trunk/Source/WebCore/page/Page.cpp

    r271440 r271643  
    20782078{
    20792079#if ENABLE(VIDEO)
    2080     bool mediaPlaybackExists = false;
    2081     forEachDocument([&mediaPlaybackExists] (Document& document) {
    2082         if (document.mediaPlaybackExists())
    2083             mediaPlaybackExists = true;
    2084     });
    2085     return mediaPlaybackExists;
    2086 #else
     2080    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2081        return !platformMediaSessionManager->hasNoSession();
     2082#endif
    20872083    return false;
    2088 #endif
    20892084}
    20902085
     
    20922087{
    20932088#if ENABLE(VIDEO)
    2094     bool mediaPlaybackIsPaused = false;
    2095     forEachDocument([&mediaPlaybackIsPaused] (Document& document) {
    2096         if (document.mediaPlaybackIsPaused())
    2097             mediaPlaybackIsPaused = true;
    2098     });
    2099     return mediaPlaybackIsPaused;
    2100 #else
     2089    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2090        return platformMediaSessionManager->mediaPlaybackIsPaused(mediaSessionGroupIdentifier());
     2091#endif
    21012092    return false;
    2102 #endif
    21032093}
    21042094
     
    21062096{
    21072097#if ENABLE(VIDEO)
    2108     forEachDocument([] (Document& document) {
    2109         document.pauseAllMediaPlayback();
    2110     });
     2098    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2099        platformMediaSessionManager->pauseAllMediaPlaybackForGroup(mediaSessionGroupIdentifier());
    21112100#endif
    21122101}
     
    21192108        return;
    21202109
    2121     forEachDocument([] (Document& document) {
    2122         document.suspendAllMediaPlayback();
    2123     });
    2124 
     2110    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2111        platformMediaSessionManager->suspendAllMediaPlaybackForGroup(mediaSessionGroupIdentifier());
     2112
     2113    // FIXME: We cannot set m_mediaPlaybackIsSuspended before, see https://bugs.webkit.org/show_bug.cgi?id=192829#c7.
    21252114    m_mediaPlaybackIsSuspended = true;
    21262115#endif
     2116}
     2117
     2118MediaSessionGroupIdentifier Page::mediaSessionGroupIdentifier() const
     2119{
     2120    if (!m_mediaSessionGroupIdentifier) {
     2121        if (auto identifier = m_mainFrame->loader().pageID())
     2122            m_mediaSessionGroupIdentifier = makeObjectIdentifier<MediaSessionGroupIdentifierType>(identifier->toUInt64());
     2123    }
     2124    return m_mediaSessionGroupIdentifier;
    21272125}
    21282126
     
    21352133    m_mediaPlaybackIsSuspended = false;
    21362134
    2137     forEachDocument([] (Document& document) {
    2138         document.resumeAllMediaPlayback();
    2139     });
     2135    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2136        platformMediaSessionManager->resumeAllMediaPlaybackForGroup(mediaSessionGroupIdentifier());
    21402137#endif
    21412138}
     
    21492146    m_mediaBufferingIsSuspended = true;
    21502147
    2151     forEachDocument([] (Document& document) {
    2152         document.suspendAllMediaBuffering();
    2153     });
     2148    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2149        platformMediaSessionManager->suspendAllMediaBufferingForGroup(mediaSessionGroupIdentifier());
    21542150#endif
    21552151}
     
    21622158    m_mediaBufferingIsSuspended = false;
    21632159
    2164     forEachDocument([] (Document& document) {
    2165         document.resumeAllMediaBuffering();
    2166     });
     2160    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
     2161        platformMediaSessionManager->resumeAllMediaBufferingForGroup(mediaSessionGroupIdentifier());
    21672162#endif
    21682163}
  • trunk/Source/WebCore/page/Page.h

    r271440 r271643  
    3131#include "LengthBox.h"
    3232#include "MediaProducer.h"
     33#include "MediaSessionGroupIdentifier.h"
    3334#include "Pagination.h"
    3435#include "PlaybackTargetClientContextIdentifier.h"
     
    695696    WEBCORE_EXPORT void stopMediaCapture();
    696697
     698    MediaSessionGroupIdentifier mediaSessionGroupIdentifier() const;
    697699    WEBCORE_EXPORT bool mediaPlaybackExists();
    698700    WEBCORE_EXPORT bool mediaPlaybackIsPaused();
     
    11381140   
    11391141    bool m_textInteractionEnabled { true };
     1142    mutable MediaSessionGroupIdentifier m_mediaSessionGroupIdentifier;
    11401143};
    11411144
  • trunk/Source/WebCore/platform/audio/PlatformMediaSession.h

    r267544 r271643  
    2626#pragma once
    2727
    28 #include "DocumentIdentifier.h"
     28#include "MediaSessionGroupIdentifier.h"
    2929#include "MediaSessionIdentifier.h"
    3030#include "Timer.h"
     
    253253    virtual bool isPlayingOnSecondScreen() const { return false; }
    254254
    255     virtual DocumentIdentifier hostingDocumentIdentifier() const = 0;
     255    virtual MediaSessionGroupIdentifier mediaSessionGroupIdentifier() const = 0;
    256256
    257257    virtual bool hasMediaStreamSource() const { return false; }
  • trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp

    r271214 r271643  
    468468}
    469469
    470 void PlatformMediaSessionManager::pauseAllMediaPlaybackForDocument(DocumentIdentifier documentIdentifier)
    471 {
    472     forEachDocumentSession(documentIdentifier, [](auto& session) {
     470void PlatformMediaSessionManager::pauseAllMediaPlaybackForGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
     471{
     472    forEachSessionInGroup(mediaSessionGroupIdentifier, [](auto& session) {
    473473        session.pauseSession();
    474474    });
     
    476476
    477477
    478 bool PlatformMediaSessionManager::mediaPlaybackIsPaused(DocumentIdentifier documentIdentifier)
     478bool PlatformMediaSessionManager::mediaPlaybackIsPaused(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
    479479{
    480480    bool mediaPlaybackIsPaused = false;
    481     forEachDocumentSession(documentIdentifier, [&mediaPlaybackIsPaused](auto& session) {
     481    forEachSessionInGroup(mediaSessionGroupIdentifier, [&mediaPlaybackIsPaused](auto& session) {
    482482        if (session.state() == PlatformMediaSession::Paused)
    483483            mediaPlaybackIsPaused = true;
     
    493493}
    494494
    495 void PlatformMediaSessionManager::suspendAllMediaPlaybackForDocument(DocumentIdentifier documentIdentifier)
    496 {
    497     forEachDocumentSession(documentIdentifier, [](auto& session) {
     495void PlatformMediaSessionManager::suspendAllMediaPlaybackForGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
     496{
     497    forEachSessionInGroup(mediaSessionGroupIdentifier, [](auto& session) {
    498498        session.beginInterruption(PlatformMediaSession::PlaybackSuspended);
    499499    });
    500500}
    501501
    502 void PlatformMediaSessionManager::resumeAllMediaPlaybackForDocument(DocumentIdentifier documentIdentifier)
    503 {
    504     forEachDocumentSession(documentIdentifier, [](auto& session) {
     502void PlatformMediaSessionManager::resumeAllMediaPlaybackForGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
     503{
     504    forEachSessionInGroup(mediaSessionGroupIdentifier, [](auto& session) {
    505505        session.endInterruption(PlatformMediaSession::MayResumePlaying);
    506506    });
    507507}
    508508
    509 void PlatformMediaSessionManager::suspendAllMediaBufferingForDocument(DocumentIdentifier documentIdentifier)
    510 {
    511     forEachDocumentSession(documentIdentifier, [](auto& session) {
     509void PlatformMediaSessionManager::suspendAllMediaBufferingForGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
     510{
     511    forEachSessionInGroup(mediaSessionGroupIdentifier, [](auto& session) {
    512512        session.suspendBuffering();
    513513    });
    514514}
    515515
    516 void PlatformMediaSessionManager::resumeAllMediaBufferingForDocument(DocumentIdentifier documentIdentifier)
    517 {
    518     forEachDocumentSession(documentIdentifier, [](auto& session) {
     516void PlatformMediaSessionManager::resumeAllMediaBufferingForGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier)
     517{
     518    forEachSessionInGroup(mediaSessionGroupIdentifier, [](auto& session) {
    519519        session.resumeBuffering();
    520520    });
     
    540540}
    541541
    542 void PlatformMediaSessionManager::forEachDocumentSession(DocumentIdentifier documentIdentifier, const Function<void(PlatformMediaSession&)>& callback)
    543 {
    544     forEachMatchingSession([documentIdentifier](auto& session) {
    545         return session.client().hostingDocumentIdentifier() == documentIdentifier;
     542void PlatformMediaSessionManager::forEachSessionInGroup(MediaSessionGroupIdentifier mediaSessionGroupIdentifier, const Function<void(PlatformMediaSession&)>& callback)
     543{
     544    if (!mediaSessionGroupIdentifier)
     545        return;
     546
     547    forEachMatchingSession([mediaSessionGroupIdentifier](auto& session) {
     548        return session.client().mediaSessionGroupIdentifier() == mediaSessionGroupIdentifier;
    546549    }, [&callback](auto& session) {
    547550        callback(session);
  • trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h

    r271488 r271643  
    2727#define PlatformMediaSessionManager_h
    2828
    29 #include "DocumentIdentifier.h"
    3029#include "GenericTaskQueue.h"
    3130#include "MediaSessionIdentifier.h"
     
    9594    WEBCORE_EXPORT void processDidResume();
    9695
    97     bool mediaPlaybackIsPaused(DocumentIdentifier);
    98     void pauseAllMediaPlaybackForDocument(DocumentIdentifier);
     96    bool mediaPlaybackIsPaused(MediaSessionGroupIdentifier);
     97    void pauseAllMediaPlaybackForGroup(MediaSessionGroupIdentifier);
    9998    WEBCORE_EXPORT void stopAllMediaPlaybackForProcess();
    10099
    101     void suspendAllMediaPlaybackForDocument(DocumentIdentifier);
    102     void resumeAllMediaPlaybackForDocument(DocumentIdentifier);
    103     void suspendAllMediaBufferingForDocument(DocumentIdentifier);
    104     void resumeAllMediaBufferingForDocument(DocumentIdentifier);
     100    void suspendAllMediaPlaybackForGroup(MediaSessionGroupIdentifier);
     101    void resumeAllMediaPlaybackForGroup(MediaSessionGroupIdentifier);
     102    void suspendAllMediaBufferingForGroup(MediaSessionGroupIdentifier);
     103    void resumeAllMediaBufferingForGroup(MediaSessionGroupIdentifier);
    105104
    106105    enum SessionRestrictionFlags {
     
    162161
    163162    void forEachSession(const Function<void(PlatformMediaSession&)>&);
    164     void forEachDocumentSession(DocumentIdentifier, const Function<void(PlatformMediaSession&)>&);
     163    void forEachSessionInGroup(MediaSessionGroupIdentifier, const Function<void(PlatformMediaSession&)>&);
    165164    bool anyOfSessions(const Function<bool(const PlatformMediaSession&)>&) const;
    166165
Note: See TracChangeset for help on using the changeset viewer.