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