[webkit-changes] [WebKit/WebKit] 04e0a6: Refactor MediaSessionManagerCocoa::nowPlayingEligi...

youennf noreply at github.com
Wed Feb 28 12:37:37 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 04e0a64601921fa8f768610f715769c44d3ad712
      https://github.com/WebKit/WebKit/commit/04e0a64601921fa8f768610f715769c44d3ad712
  Author: Youenn Fablet <youenn at apple.com>
  Date:   2024-02-28 (Wed, 28 Feb 2024)

  Changed paths:
    M Source/WebCore/Modules/mediasession/MediaSession.cpp
    M Source/WebCore/Modules/mediasession/MediaSession.h
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/html/HTMLMediaElement.h
    M Source/WebCore/html/MediaElementSession.cpp
    M Source/WebCore/html/MediaElementSession.h
    M Source/WebCore/platform/audio/PlatformMediaSession.cpp
    M Source/WebCore/platform/audio/PlatformMediaSession.h
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.h
    M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h
    M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm

  Log Message:
  -----------
  Refactor MediaSessionManagerCocoa::nowPlayingEligibleSession to allow non HTMLMediaElement eligible sessions
https://bugs.webkit.org/show_bug.cgi?id=270090
rdar://123632916

Reviewed by Jean-Yves Avenard.

We want to allow AudioContext to be used as media playback with AudioSession API.
For that, it needs to be on par with HTMLMediaElement, and for instance trigger NowPlayingInfo updates.
This patch is refactoring code to untie a bit HTMLMediaElement and NowPlayingInfo computation.
It should not have any impact on behavior since this patch is not adding code to actually allow
AudioContext to be handled like HTMLMediaElement (for instance pay/pause from the control center).

We introduce MediaSession::updateNowPlayingInfo and NavigatorMediaSession::mediaSessionIfExists to
allow updating NowPlayingInfo according MediaSession from either HTMLMediaElement or other media producers.

We introduce getters for nowPlayingInfo and isNowPlayingEligible on PlatformMediaSession which are being forwarded to each client.
We update HTMLMediaElement/MediaElementSession implementation accordingly.

We introduce PlatformMediaSessionManager::bestEligibleSessionForRemoteControls to filter sessions according presentation types.
We then get two lists of media sessions, one of web audio and one of media (HTMLMediaElement basically).
If the HTMLMediaElement list is empty, we look at WebAudio sessions, otherwise we look at HTMLMediaElement sessions.

We introduce selectBestMediaSession so that sorting is done by each session subtype.

This allows to fix the layering violation from MediaSessionManagerCocoa::nowPlayingEligibleSession.:

* Source/WebCore/Modules/mediasession/MediaSession.cpp:
(WebCore::MediaSession::updateNowPlayingInfo):
* Source/WebCore/Modules/mediasession/MediaSession.h:
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::bestMediaElementForRemoteControls):
(WebCore::HTMLMediaElement::nowPlayingInfo const):
(WebCore::HTMLMediaElement::selectBestMediaSession):
* Source/WebCore/html/HTMLMediaElement.h:
* Source/WebCore/html/MediaElementSession.cpp:
(WebCore::MediaElementSession::hasNowPlayingInfo const):
(WebCore::MediaElementSession::computeNowPlayingInfo const):
(WebCore::MediaElementSession::nowPlayingInfo const): Deleted.
* Source/WebCore/html/MediaElementSession.h:
* Source/WebCore/platform/audio/PlatformMediaSession.cpp:
(WebCore::PlatformMediaSession::nowPlayingInfo const):
(WebCore::PlatformMediaSession::isNowPlayingEligible const):
(WebCore::PlatformMediaSession::selectBestMediaSession):
(WebCore::PlatformMediaSessionClient::nowPlayingInfo const):
* Source/WebCore/platform/audio/PlatformMediaSession.h:
(WebCore::PlatformMediaSessionClient::isNowPlayingEligible const):
(WebCore::PlatformMediaSessionClient::selectBestMediaSession):
* Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp:
(WebCore::PlatformMediaSessionManager::bestEligibleSessionForRemoteControls):
* Source/WebCore/platform/audio/PlatformMediaSessionManager.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::nowPlayingEligibleSession):
(WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo):

Canonical link: https://commits.webkit.org/275460@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list