Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1d2ae3a51815e1cdbd7b367a13989de7595137fd
https://github.com/WebKit/WebKit/commit/1d2ae3a51815e1cdbd7b367a13989de7595137fd
Author: Jer Noble <[email protected]>
Date: 2025-02-19 (Wed, 19 Feb 2025)
Changed paths:
M Source/WebCore/html/HTMLMediaElement.cpp
M Source/WebCore/html/HTMLMediaElement.h
M Source/WebCore/page/Quirks.cpp
M Source/WebCore/page/Quirks.h
M Source/WebCore/page/QuirksData.h
M Source/WebCore/platform/VideoReceiverEndpoint.h
M Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h
M Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm
M
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
M Source/WebCore/platform/graphics/cocoa/NullPlaybackSessionInterface.h
M Source/WebCore/platform/graphics/cocoa/NullVideoPresentationInterface.h
M Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.h
M Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h
M Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.h
M Source/WebCore/platform/mac/VideoPresentationInterfaceMac.h
M Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h
M Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerManagerProxyCocoa.mm
M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h
M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm
M Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.h
M Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm
M Source/WebKit/Platform/ios/VideoReceiverEndpointMessage.h
M Source/WebKit/Platform/ios/VideoReceiverEndpointMessage.mm
M
Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCEndpointMessages.mm
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm
M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h
M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm
M Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h
M Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm
M Source/WebKit/WebProcess/cocoa/VideoPresentationManager.h
M Source/WebKit/WebProcess/cocoa/VideoPresentationManager.mm
Log Message:
-----------
[visionOS] Add Netflix quirk to allow staying in fullscreen when
transitioning between items in a playlist
rdar://134980072
https://bugs.webkit.org/show_bug.cgi?id=287722
Reviewed by Andy Estes.
When Netflix.com moves to the next item in a playlist, it pulls the current
video out of the DOM
and replaces it with another video containing the next video content. Removing
the video from
the DOM has the effect of closing any fullscreen presentation, including the
"Environment Docking"
fullscreen mode on visionOS.
Add a quirk that allows the fullscreen presentation to stay open when its
backing video is removed
from the DOM, and add a "swap" behavior that migrates all the fullscreen modes
and state between
the two video elements at every level in the project. This includes moving the
VideoReceiverEndpoint
and its VideoTarget, however that transition is tricky because only one
VideoTarget ever can be
created from a single VideoReceiverEndpoint. Add another layer of caching of
endpoints and targets
inside RemoteMediaPlayerManagerProxyCocoa by introducing the concept of
VideoReceiverEndpointIdentifier.
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::pauseAfterDetachedTask):
* Source/WebCore/html/HTMLMediaElement.h:
* Source/WebCore/page/Quirks.cpp:
(WebCore::Quirks::needsNowPlayingFullscreenSwapQuirk const):
(WebCore::handleNetflixQuirks):
* Source/WebCore/page/Quirks.h:
* Source/WebCore/page/QuirksData.h:
* Source/WebCore/platform/VideoReceiverEndpoint.h:
* Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h:
* Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm:
(WebCore::PlaybackSessionModelMediaElement::updateAll):
*
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::isInFullscreenOrPictureInPictureChanged):
* Source/WebCore/platform/ios/PlaybackSessionInterfaceIOS.h:
* Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h:
(WebCore::VideoPresentationInterfaceIOS::swapFullscreenModesWith):
* Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.h:
* Source/WebCore/platform/mac/VideoPresentationInterfaceMac.h:
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
* Source/WebKit/GPUProcess/media/cocoa/RemoteMediaPlayerManagerProxyCocoa.mm:
(WebKit::RemoteMediaPlayerManagerProxy::videoTargetForIdentifier):
(WebKit::RemoteMediaPlayerManagerProxy::takeVideoTargetForMediaElementIdentifier):
(WebKit::RemoteMediaPlayerManagerProxy::handleVideoReceiverEndpointMessage):
(WebKit::RemoteMediaPlayerManagerProxy::handleVideoReceiverSwapEndpointsMessage):
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h:
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm:
(WebKit::PlaybackSessionInterfaceLMK::swapFullscreenModesWith):
* Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.h:
* Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm:
(WebKit::VideoPresentationInterfaceLMK::swapFullscreenModesWith):
* Source/WebKit/Platform/ios/VideoReceiverEndpointMessage.h:
(WebKit::VideoReceiverEndpointMessage::endpointIdentifier const):
(WebKit::VideoReceiverSwapEndpointsMessage::messageName):
(WebKit::VideoReceiverSwapEndpointsMessage::processIdentifier const):
(WebKit::VideoReceiverSwapEndpointsMessage::sourceMediaElementIdentifier const):
(WebKit::VideoReceiverSwapEndpointsMessage::sourceMediaPlayerIdentifier const):
(WebKit::VideoReceiverSwapEndpointsMessage::destinationMediaElementIdentifier
const):
(WebKit::VideoReceiverSwapEndpointsMessage::destinationMediaPlayerIdentifier
const):
* Source/WebKit/Platform/ios/VideoReceiverEndpointMessage.mm:
(WebKit::VideoReceiverEndpointMessage::VideoReceiverEndpointMessage):
(WebKit::VideoReceiverEndpointMessage::decode):
(WebKit::VideoReceiverEndpointMessage::encode const):
(WebKit::VideoReceiverSwapEndpointsMessage::VideoReceiverSwapEndpointsMessage):
(WebKit::VideoReceiverSwapEndpointsMessage::decode):
(WebKit::VideoReceiverSwapEndpointsMessage::encode const):
*
Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCEndpointMessages.mm:
(WebKit::handleVideoReceiverSwapEndpointsMessage):
(WebKit::handleXPCEndpointMessage):
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
(WebKit::PlaybackSessionManagerProxy::logClassName const):
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
(WebKit::PlaybackSessionModelContext::setVideoReceiverEndpoint):
(WebKit::PlaybackSessionModelContext::swapVideoReceiverEndpointsWith):
(WebKit::PlaybackSessionManagerProxy::swapFullscreenModes):
(WebKit::PlaybackSessionManagerProxy::setVideoReceiverEndpoint):
(WebKit::PlaybackSessionManagerProxy::swapVideoReceiverEndpoints):
(WebKit::PlaybackSessionManagerProxy::uncacheVideoReceiverEndpoint): Deleted.
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h:
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm:
(WebKit::VideoPresentationManagerProxy::swapFullscreenModes):
* Source/WebKit/UIProcess/ios/WKVideoView.mm:
(-[WKVideoView removeFromSuperview]):
* Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h:
* Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:
(WebKit::PlaybackSessionManager::setUpPlaybackControlsManager):
(WebKit::PlaybackSessionManager::mediaElementWithContextId const):
(WebKit::PlaybackSessionManager::currentPlaybackControlsElement const):
* Source/WebKit/WebProcess/cocoa/VideoPresentationManager.h:
* Source/WebKit/WebProcess/cocoa/VideoPresentationManager.mm:
(WebKit::VideoPresentationManager::swapFullscreenModes):
Canonical link: https://commits.webkit.org/290610@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