Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8aeda8855e282db5d8c1b0f047a4cfb7fb0dc53d
      
https://github.com/WebKit/WebKit/commit/8aeda8855e282db5d8c1b0f047a4cfb7fb0dc53d
  Author: Andy Estes <[email protected]>
  Date:   2024-04-10 (Wed, 10 Apr 2024)

  Changed paths:
    M Source/WTF/wtf/Forward.h
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Modules/mediasession/MediaSession.cpp
    M Source/WebCore/Modules/webaudio/AudioContext.cpp
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/html/MediaElementSession.cpp
    M Source/WebCore/platform/MediaStrategy.h
    M Source/WebCore/platform/NowPlayingManager.cpp
    M Source/WebCore/platform/audio/NowPlayingInfo.h
    A Source/WebCore/platform/audio/NowPlayingMetadataObserver.h
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.h
    M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm
    M Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp
    M Source/WebCore/platform/audio/glib/MediaSessionManagerGLib.cpp
    M Source/WebCore/platform/cocoa/PlaybackSessionModel.h
    M Source/WebCore/platform/cocoa/VideoPresentationModel.h
    M Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.h
    M Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.mm
    M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h
    M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm
    M Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
    M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h
    M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm
    M Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.h
    M Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaPlayer.swift
    M Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaTypes.swift
    M Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaPlayer.h
    M Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaTypes.h
    M Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebKitCocoa/NowPlayingMetadataObserver.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/large-video-test-now-playing.html

  Log Message:
  -----------
  [visionOS] LinearMediaPlayer does not display video title and artwork
https://bugs.webkit.org/show_bug.cgi?id=272348
rdar://124234028

Reviewed by Eric Carlson.

Taught PlaybackSessionInterfaceLMK to set ContentMetadata on its 
LinearMediaPlayer consisting of the
title, subtitle, and artwork vended to Now Playing. Since Now Playing metadata 
can change
arbitrarily after entering fullscreen, this requried adding a mechanism to 
observe changes to
Now Playing.

Added a WeakHashSet of NowPlayingMetadataObservers to 
PlatformMediaSessionManager and taught WebPage
to add itself as an observer when requested by its proxy. These observers are 
called by
MediaSessionManagerCocoa when m_nowPlayingInfo's metadata changes. To make this 
easier, metadata
(title, artist, album, artwork, and sourceApplicationIdentifier) was broken out 
into its own struct
named NowPlayingMetadata.

Also added a WeakHashSet of NowPlayingMetadataObservers to WebPageProxy. When 
the first observer is
added, WebPageProxy asks WebPage to add itself as an observer of 
PlatformMediaSessionManager and
send a message to WebPageProxy when the observer is called. 
PlaybackSessionInterfaceLMK adds itself
as a WebPageProxy observer when entering fullscreen. WKWebViewTesting also adds 
itself as an
observer to support API testing.

Added API tests.

* Source/WTF/wtf/Forward.h:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Modules/mediasession/MediaSession.cpp:
(WebCore::MediaSession::updateNowPlayingInfo):
* Source/WebCore/Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::nowPlayingInfo const):
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLMediaElement.cpp:
* Source/WebCore/html/MediaElementSession.cpp:
(WebCore::MediaElementSession::computeNowPlayingInfo const):
* Source/WebCore/platform/MediaStrategy.h:
* Source/WebCore/platform/NowPlayingManager.cpp:
(WebCore::NowPlayingManager::setNowPlayingInfo):
(WebCore::NowPlayingManager::setNowPlayingInfoPrivate):
* Source/WebCore/platform/audio/NowPlayingInfo.h:
* Source/WebCore/platform/audio/NowPlayingMetadataObserver.h: Copied from 
Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.h.
* Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp:
(WebCore::PlatformMediaSessionManager::nowPlayingInfo const):
(WebCore::PlatformMediaSessionManager::addNowPlayingMetadataObserver):
(WebCore::PlatformMediaSessionManager::removeNowPlayingMetadataObserver):
(WebCore::PlatformMediaSessionManager::nowPlayingMetadataChanged):
* Source/WebCore/platform/audio/PlatformMediaSessionManager.h:
(WebCore::PlatformMediaSessionManager::nowPlayingInfo const): Deleted.
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):
(WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo):
* Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp:
(WebCore::MediaSessionGLib::getMetadataAsGVariant):
* Source/WebCore/platform/audio/glib/MediaSessionManagerGLib.cpp:
(WebCore::MediaSessionManagerGLib::updateNowPlayingInfo):
* Source/WebCore/platform/cocoa/PlaybackSessionModel.h:
(WebCore::PlaybackSessionModel::addNowPlayingMetadataObserver):
(WebCore::PlaybackSessionModel::removeNowPlayingMetadataObserver):
* Source/WebCore/platform/cocoa/VideoPresentationModel.h:
* Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.h:
* Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.mm:
(WebCore::PlaybackSessionInterfaceIOS::startObservingNowPlayingMetadata):
(WebCore::PlaybackSessionInterfaceIOS::stopObservingNowPlayingMetadata):
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h:
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm:
(WebKit::nowPlayingMetadataObserver):
(WebKit::PlaybackSessionInterfaceLMK::startObservingNowPlayingMetadata):
(WebKit::PlaybackSessionInterfaceLMK::stopObservingNowPlayingMetadata):
(WebKit::artworkData):
(WebKit::PlaybackSessionInterfaceLMK::nowPlayingMetadataChanged):
* Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm:
(WebKit::VideoPresentationInterfaceLMK::presentFullscreen):
(WebKit::VideoPresentationInterfaceLMK::dismissFullscreen):
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView _requestActiveNowPlayingSessionInfo:]):
(-[WKWebView _setNowPlayingMetadataObserver:]):
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
(WebKit::PlaybackSessionModelContext::addNowPlayingMetadataObserver):
(WebKit::PlaybackSessionModelContext::removeNowPlayingMetadataObserver):
(WebKit::PlaybackSessionManagerProxy::addNowPlayingMetadataObserver):
(WebKit::PlaybackSessionManagerProxy::removeNowPlayingMetadataObserver):
* Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.h:
* Source/WebKit/UIProcess/Cocoa/WebKitSwiftSoftLink.mm:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::resetState):
(WebKit::WebPageProxy::addNowPlayingMetadataObserver):
(WebKit::WebPageProxy::removeNowPlayingMetadataObserver):
(WebKit::WebPageProxy::setNowPlayingMetadataObserverForTesting):
(WebKit::WebPageProxy::nowPlayingMetadataChanged):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::nowPlayingMediaTitleAndArtist):
* Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaPlayer.swift:
(SwiftOnlyData.peculiarEntity):
(WKSLinearMediaPlayer.contentMetadata):
(WKSLinearMediaPlayer.contentMetadataPublisher):
(SwiftOnlyData.contentMetadata): Deleted.
* Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaTypes.swift:
(WKSLinearMediaContentMetadata.contentMetadata):
* Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaPlayer.h:
* Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaTypes.h:
* Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::close):
(WebKit::WebPage::startObservingNowPlayingMetadata):
(WebKit::WebPage::stopObservingNowPlayingMetadata):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/NowPlayingMetadataObserver.mm: Added.
(TestWebKitAPI::TEST(NowPlayingMetadataObserver, VideoTitle)):
(TestWebKitAPI::TEST(NowPlayingMetadataObserver, 
VideoTitleUpdatedByMediaSession)):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/large-video-test-now-playing.html:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to