[webkit-changes] [WebKit/WebKit] 1d2ae3: [visionOS] Add Netflix quirk to allow staying in f...
Jer Noble
noreply at github.com
Wed Feb 19 07:49:46 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1d2ae3a51815e1cdbd7b367a13989de7595137fd
https://github.com/WebKit/WebKit/commit/1d2ae3a51815e1cdbd7b367a13989de7595137fd
Author: Jer Noble <jer.noble at apple.com>
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
More information about the webkit-changes
mailing list