Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 0a9b7c59e3fa9131c40823fa108c5c9818269b08 https://github.com/WebKit/WebKit/commit/0a9b7c59e3fa9131c40823fa108c5c9818269b08 Author: Jean-Yves Avenard <j...@apple.com> Date: 2023-05-19 (Fri, 19 May 2023)
Changed paths: A LayoutTests/media/media-source/media-managedmse-airplay-expected.txt A LayoutTests/media/media-source/media-managedmse-airplay.html M LayoutTests/media/media-source/media-managedmse-bufferedchange.html M LayoutTests/media/media-source/media-managedmse-memorypressure-inactive.html M LayoutTests/media/media-source/media-managedmse-memorypressure.html M LayoutTests/media/media-source/media-managedmse-streaming-atend.html M LayoutTests/media/media-source/media-managedmse-streaming.html M LayoutTests/media/media-source/media-managedmse.html M LayoutTests/platform/glib/TestExpectations M LayoutTests/platform/ios/TestExpectations M LayoutTests/platform/ipad/TestExpectations M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml M Source/WebCore/Modules/mediasource/ManagedMediaSource.cpp M Source/WebCore/Modules/mediasource/ManagedMediaSource.h M Source/WebCore/Modules/mediasource/MediaSource.cpp M Source/WebCore/Modules/mediasource/MediaSource.h M Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp M Source/WebCore/html/HTMLMediaElement.cpp M Source/WebCore/html/HTMLMediaElement.h M Source/WebCore/html/HTMLVideoElement.cpp M Source/WebKit/Shared/WebPreferencesDefaultValues.cpp M Source/WebKit/Shared/WebPreferencesDefaultValues.h M Tools/TestWebKitAPI/Tests/WebKit/file-with-managedmse.html Log Message: ----------- Managed Media Source should only be available if airplay source alternative is present https://bugs.webkit.org/show_bug.cgi?id=256570 rdar://109130836 Reviewed by Jer Noble. When we add a Managed Media Source to a media element, it should per MSE spec changed the MSE's readyState to "open" and fire the `sourceopen` event. We want to make sure that the developer hasn't left anything unchecked, it is expected that either an alternative source is set and compatible with remote playback, or by explicitly disabling remote playback (either by using an attribute or using Remote Playback API). To achieve this, we do not move the MSE's readyState to "open" until all those conditions have been achieved. And the readyState will remain at `closed` until then. Should one of the condition become fullfilled after the Managed Media Source has been created, it will be unblocked and can be used as usual. The behaviour is placed behind a preference. Fly-by fix: There were three different ways to disable AirPlay, each working independently from the other. We combine them all together that should one method be used to disable AirPlay, it will be disabled regardless of what the other methods are doing. * LayoutTests/TestExpectations: * LayoutTests/media/media-source/media-managedmse-airplay-expected.txt: Added. * LayoutTests/media/media-source/media-managedmse-airplay.html: Added. * LayoutTests/media/media-source/media-managedmse-bufferedchange.html: Amended to explicitly disable AirPlay * LayoutTests/media/media-source/media-managedmse-memorypressure-inactive.html: Amended to explicitly disable AirPlay * LayoutTests/media/media-source/media-managedmse-memorypressure.html: Amended to explicitly disable AirPlay * LayoutTests/media/media-source/media-managedmse-streaming-atend.html: Amended to explicitly disable AirPlay * LayoutTests/media/media-source/media-managedmse-streaming.html: Amended to explicitly disable AirPlay * LayoutTests/media/media-source/media-managedmse.html: Amended to explicitly disable AirPlay * LayoutTests/platform/glib/TestExpectations: * LayoutTests/platform/ios/TestExpectations: * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: * Source/WebCore/Modules/mediasource/ManagedMediaSource.cpp: (WebCore::ManagedMediaSource::isOpen const): * Source/WebCore/Modules/mediasource/ManagedMediaSource.h: * Source/WebCore/Modules/mediasource/MediaSource.cpp: (WebCore::MediaSource::setPrivateAndOpen): (WebCore::MediaSource::isOpen const): (WebCore::MediaSource::isClosed const): (WebCore::MediaSource::isEnded const): (WebCore::MediaSource::openIfDeferredOpen): (WebCore::MediaSource::readyState const): (WebCore::MediaSource::onReadyStateChange): * Source/WebCore/Modules/mediasource/MediaSource.h: (WebCore::MediaSource::readyState const): Deleted. * Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp: (WebCore::RemotePlayback::watchAvailability): Use utility method on mediaElement (WebCore::RemotePlayback::cancelWatchAvailability): ditto (WebCore::RemotePlayback::prompt): ditto * Source/WebCore/html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::attributeChanged): If remote playback gets disabled, move the Managed Media Source state to open if needed (WebCore::isAllowedToLoadMediaURL): make it take a const element (WebCore::HTMLMediaElement::isSafeToLoadURL const): make method const and make logging conditional (WebCore::HTMLMediaElement::sourceWasAdded): if a playable alternative source is added move the Managed Media Source state to open if needed (WebCore::HTMLMediaElement::hasWirelessPlaybackTargetAlternative const): (WebCore::HTMLMediaElement::isWirelessPlaybackTargetDisabled const): * Source/WebCore/html/HTMLMediaElement.h: * Source/WebCore/html/HTMLVideoElement.cpp: (WebCore::HTMLVideoElement::attributeChanged): * Source/WebKit/Shared/WebPreferencesDefaultValues.cpp: (WebKit::defaultManagedMediaSourceNeedsAirPlay): * Source/WebKit/Shared/WebPreferencesDefaultValues.h: Canonical link: https://commits.webkit.org/264270@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes