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

Reply via email to