Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 165c11e88f109c66d6b3edb325dd67660c1c650f
https://github.com/WebKit/WebKit/commit/165c11e88f109c66d6b3edb325dd67660c1c650f
Author: Andy Estes <[email protected]>
Date: 2026-07-17 (Fri, 17 Jul 2026)
Changed paths:
A
LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback-expected.txt
A
LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback.html
A
LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route-expected.txt
A
LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route.html
M Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h
M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm
M Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp
M Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.h
M Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm
Log Message:
-----------
[iOS] Video playback remains active on a wireless device after switching back
to local playback
https://bugs.webkit.org/show_bug.cgi?id=319638
rdar://182125629
Reviewed by Jer Noble.
Two bugs led to video playback remaining active on a wireless device after the
user switches back
to local playback in Safari:
1. On routes that support video URL casting but not real-time audio streaming,
an
AVAudioSessionRouteChangeNotification notification is not dispatched when
that route is selected
or deselected. This bypassed the logic in -[WebMediaSessionHelper
activeOutputDeviceDidChange:]
that would reconfigure the media engine for local playback.
2. In MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget, we would
not disconnect the
old playback target's route session prior to switching to the new playback
target. This resulted
in playback continuing on the wireless route.
Resolved (1) by consolidating the logic for switching between wireless and
local routes into
MediaSessionHelper::activeRoutesDidChange, since that function is called
whether or not the
wireless route supports real-time audio streaming. Resolved (2) by
disconnecting the outgoing route
from its playback session and clearing ourselves as the route client in
MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget.
Tests:
media/wireless-playback-media-player/route-deactivate-pauses-playback.html
media/wireless-playback-media-player/route-switch-disconnects-previous-route.html
*
LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback-expected.txt:
Added.
*
LayoutTests/media/wireless-playback-media-player/route-deactivate-pauses-playback.html:
Added.
*
LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route-expected.txt:
Added.
*
LayoutTests/media/wireless-playback-media-player/route-switch-disconnects-previous-route.html:
Added.
* Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h:
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm:
(MediaSessionHelper::activeRoutesDidChange):
(-[WebMediaSessionHelper activeOutputDeviceDidChange:]):
* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp:
(WebCore::MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget):
* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.h:
* Source/WebCore/platform/graphics/avfoundation/MediaPlaybackTargetCocoa.mm:
(WebCore::MediaPlaybackTargetCocoa::supportsCustomProtocolVideoPlayback const):
Canonical link: https://commits.webkit.org/317433@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications