Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 29e6190b2cd7afe4e1d13b6a6cbbff9f5d820416
      
https://github.com/WebKit/WebKit/commit/29e6190b2cd7afe4e1d13b6a6cbbff9f5d820416
  Author: Andy Estes <[email protected]>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    A 
LayoutTests/media/wireless-playback-media-player/route-disconnects-when-player-destroyed-expected.txt
    A 
LayoutTests/media/wireless-playback-media-player/route-disconnects-when-player-destroyed.html
    A 
LayoutTests/media/wireless-playback-media-player/route-reconnects-after-reload-expected.txt
    A 
LayoutTests/media/wireless-playback-media-player/route-reconnects-after-reload.html
    M Source/WebCore/platform/audio/ios/MediaDeviceRoute.h
    M Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm
    M Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp
    M Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.h
    M Source/WebCore/testing/MockMediaDeviceRoute.h
    M Source/WebCore/testing/MockMediaDeviceRoute.idl
    M Source/WebCore/testing/MockMediaDeviceRoute.mm
    M Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.h
    M Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.mm

  Log Message:
  -----------
  [iOS] Video continues playing on wireless device after navigating to a new 
webpage
https://bugs.webkit.org/show_bug.cgi?id=319358
rdar://182168097

Reviewed by Jer Noble.

When a MediaDeviceRoute loads a video URL, that video will play on the wireless 
device represented
by the route until WebKit calls -stop on its underlying route session. 
MediaDeviceRoute called
-stop in its destructor, however, the route remains alive as long as it is 
selected in the system's
route picker. This selection is system-global and can outlive a navigation.

The route's underlying session's lifetime should match that of the
MediaPlayerPrivateWirelessPlayback that started the session. Made that so by 
introducing
MediaDeviceRoute::disconnectFromSession(), which clears the playback control 
observer's observed
object, calls -stop on the route session, and removes the route session from 
the route.
MediaPlayerPrivateWirelessPlayback calls disconnectSession() in cancelLoad and 
its destructor.

Tests: 
media/wireless-playback-media-player/route-disconnects-when-player-destroyed.html
       media/wireless-playback-media-player/route-reconnects-after-reload.html

* 
LayoutTests/media/wireless-playback-media-player/route-disconnects-when-player-destroyed-expected.txt:
 Added.
* 
LayoutTests/media/wireless-playback-media-player/route-disconnects-when-player-destroyed.html:
 Added.
* 
LayoutTests/media/wireless-playback-media-player/route-reconnects-after-reload-expected.txt:
 Added.
* 
LayoutTests/media/wireless-playback-media-player/route-reconnects-after-reload.html:
 Added.
* Source/WebCore/platform/audio/ios/MediaDeviceRoute.h:
* Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm:
(WebCore::MediaDeviceRoute::disconnectFromSession):
(WebCore::MediaDeviceRoute::~MediaDeviceRoute):
* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp:
(WebCore::MediaPlayerPrivateWirelessPlayback::~MediaPlayerPrivateWirelessPlayback):
(WebCore::MediaPlayerPrivateWirelessPlayback::cancelLoad):
* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.h:
* Source/WebCore/testing/MockMediaDeviceRoute.h:
* Source/WebCore/testing/MockMediaDeviceRoute.idl:
* Source/WebCore/testing/MockMediaDeviceRoute.mm:
(WebCore::MockMediaDeviceRoute::connected const):
* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.h:
* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.mm:
(-[WebMockMediaDeviceRoute isConnected]):
(-[WebMockMediaDeviceRoute startWithURL:completionHandler:]):
(-[WebMockMediaDeviceRoute stop]):

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



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

Reply via email to