Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 684acb93d5e6dde54932f8d17a433fd4fcc915b0
      
https://github.com/WebKit/WebKit/commit/684acb93d5e6dde54932f8d17a433fd4fcc915b0
  Author: Andy Estes <[email protected]>
  Date:   2025-12-04 (Thu, 04 Dec 2025)

  Changed paths:
    M Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj
    A Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.h
    A Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.mm
    M Source/WebCore/Sources.txt
    M Source/WebCore/SourcesCocoa.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/html/MediaElementSession.cpp
    M Source/WebCore/html/MediaElementSession.h
    M Source/WebCore/platform/audio/ios/MediaDeviceRoute.h
    M Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm
    A Source/WebCore/platform/audio/ios/MediaDeviceRouteController.h
    A Source/WebCore/platform/audio/ios/MediaDeviceRouteController.mm
    M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm
    M Source/WebCore/platform/graphics/MediaPlaybackTarget.h
    A Source/WebCore/platform/graphics/MediaPlaybackTargetWirelessPlayback.cpp
    A Source/WebCore/platform/graphics/MediaPlaybackTargetWirelessPlayback.h
    M Source/WebCore/platform/graphics/MediaPlayer.cpp
    M Source/WebCore/platform/graphics/MediaPlayer.h
    M Source/WebCore/platform/graphics/MediaPlayerPrivate.cpp
    M Source/WebCore/platform/graphics/MediaPlayerPrivate.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
    M Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.h
    M Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.mm
    M 
Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.serialization.in
    M Source/WebKit/Platform/cocoa/MediaPlaybackTargetSerialized.h
    M Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
    M Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h
    M Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h
    M 
Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.serialization.in
    M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp

  Log Message:
  -----------
  [iOS] Introduce MediaDeviceRouteController
https://bugs.webkit.org/show_bug.cgi?id=303450
rdar://165738633

Reviewed by Eric Carlson.

Introduced MediaDeviceRouteController. Its responsibility is to observe a new 
MediaDeviceRoute
becoming active, create a corresponding MediaPlaybackTargetWirelessPlayback, 
and propagate that to the
Now Playing-eligible media element. In a follow-on change this playback target 
will be used to
create a MediaPlayerPrivateWirelessPlayback for AirPlay playback.

Since MediaDeviceRoutes cannot be serialized from the GPU process to the 
WebContent process, a UUID
is associated with each route, and MediaPlaybackTargetWirelessPlayback stores 
this UUID so that the
corresponding MediaDeviceRoute can be looked up when the playback target is 
sent back to the GPU
process (via RemoteMediaPlayerProxy::SetWirelessPlaybackTarget).

MediaPlaybackTargetType enumeration values were also changed to be compatible 
with an OptionSet. In
a follow-on change, this will be used to determine which MediaPlayerPrivate 
subclass supports
MediaPlaybackTargetWirelessPlayback.

* Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj:
* Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.h: Copied from 
Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h.
* Source/WebCore/PAL/pal/ios/AVRoutingSoftLink.mm: Copied from 
Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h.
* Source/WebCore/Sources.txt:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::checkPlaybackTargetCompatibility):
* Source/WebCore/html/MediaElementSession.cpp:
(WebCore::MediaElementSession::playbackTargetType const):
* Source/WebCore/html/MediaElementSession.h:
* Source/WebCore/platform/audio/ios/MediaDeviceRoute.h:
(WebCore::MediaDeviceRoute::client const): Deleted.
(WebCore::MediaDeviceRoute::setClient): Deleted.
* Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm:
(WebCore::MediaDeviceRoute::MediaDeviceRoute):
(WebCore::MediaDeviceRoute::platformRoute const):
* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.h: Added.
(WebCore::MediaDeviceRouteController::client const):
(WebCore::MediaDeviceRouteController::setClient):
* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.mm: Added.
(WebCore::MediaDeviceRouteController::singleton):
(WebCore::MediaDeviceRouteController::MediaDeviceRouteController):
(WebCore::MediaDeviceRouteController::mostRecentActiveRoute const):
(WebCore::MediaDeviceRouteController::routeForIdentifier const):
(WebCore::MediaDeviceRouteController::handleEvent):
(WebCore::MediaDeviceRouteController::activateRoute):
(WebCore::MediaDeviceRouteController::deactivateRoute):
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm:
(MediaSessionHelperIOS::MediaSessionHelperIOS):
(MediaSessionHelperIOS::activeRoutesDidChange):
* Source/WebCore/platform/graphics/MediaPlaybackTarget.h:
(WebCore::MediaPlaybackTarget::targetType const):
* Source/WebCore/platform/graphics/MediaPlaybackTargetWirelessPlayback.cpp: 
Added.
(WebCore::MediaPlaybackTargetWirelessPlayback::create):
(WebCore::MediaPlaybackTargetWirelessPlayback::MediaPlaybackTargetWirelessPlayback):
(WebCore::MediaPlaybackTargetWirelessPlayback::identifier const):
(WebCore::MediaPlaybackTargetWirelessPlayback::deviceName const):
(WebCore::MediaPlaybackTargetWirelessPlayback::hasActiveRoute const):
* Source/WebCore/platform/graphics/MediaPlaybackTargetWirelessPlayback.h: 
Copied from Source/WebKit/Platform/cocoa/MediaPlaybackTargetSerialized.h.
(isType):
* Source/WebCore/platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::supportedPlaybackTargetTypes const):
(WebCore::MediaPlayer::canPlayToWirelessPlaybackTarget const): Deleted.
* Source/WebCore/platform/graphics/MediaPlayer.h:
* Source/WebCore/platform/graphics/MediaPlayerPrivate.cpp:
(WebCore::MediaPlayerPrivateInterface::supportedPlaybackTargetTypes const):
* Source/WebCore/platform/graphics/MediaPlayerPrivate.h:
(WebCore::MediaPlayerPrivateInterface::canPlayToWirelessPlaybackTarget const): 
Deleted.
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::supportedPlaybackTargetTypes 
const):
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::getConfiguration):
* Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.h:
(WebKit::MediaPlaybackTargetContextSerialized::identifier const):
* Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.mm:
(WebKit::MediaPlaybackTargetContextSerialized::MediaPlaybackTargetContextSerialized):
(WebKit::MediaPlaybackTargetContextSerialized::playbackTarget const):
(WTF::isValidEnum<WebCore::MediaPlaybackTargetType>):
* 
Source/WebKit/Platform/cocoa/MediaPlaybackTargetContextSerialized.serialization.in:
* Source/WebKit/Platform/cocoa/MediaPlaybackTargetSerialized.h:
* Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::supportedPlaybackTargetTypes const):
(WebKit::MediaPlayerPrivateRemote::canPlayToWirelessPlaybackTarget const): 
Deleted.
* Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
* Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.h:
* 
Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerConfiguration.serialization.in:
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
(WebKit::RemoteMediaSessionHelper::activeVideoRouteDidChange):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to