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