Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 361b188ab57dbd2dac9657296e21ad48aca31a8b
      
https://github.com/WebKit/WebKit/commit/361b188ab57dbd2dac9657296e21ad48aca31a8b
  Author: Andy Estes <[email protected]>
  Date:   2026-02-27 (Fri, 27 Feb 2026)

  Changed paths:
    A 
LayoutTests/media/wireless-playback-media-player/remote-playback-configuration-expected.txt
    A 
LayoutTests/media/wireless-playback-media-player/remote-playback-configuration.html
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/platform/LogMessages.in
    M Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm
    M Source/WebCore/platform/audio/ios/MediaDeviceRouteController.h
    M Source/WebCore/platform/audio/ios/MediaDeviceRouteController.mm
    M Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp
    M Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.h
    M Source/WebCore/testing/Internals.cpp
    M Source/WebCore/testing/MockMediaDeviceRoute.h
    M Source/WebCore/testing/MockMediaDeviceRoute.idl
    M Source/WebCore/testing/MockMediaDeviceRoute.mm
    M Source/WebCore/testing/MockMediaDeviceRouteController.mm
    M Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.h
    M Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.mm

  Log Message:
  -----------
  [iOS] Playback rate and position are not restored when MediaDeviceRoute 
activates
https://bugs.webkit.org/show_bug.cgi?id=308851
rdar://171388113

Reviewed by Jer Noble.

When HTMLMediaElement switches media engines for wireless playback it stores 
the current time,
payback rate, and paused state in m_remotePlaybackConfiguration. Later, when 
the new media engine
reaches the HAVE_FUTURE_DATA ready state, this configuration is applied to the 
media engine. This
ensures that a video continues playing to the wireless route at the same 
position and rate.
MediaPlayerPrivateWirelessPlayback needed to be taught how to accept this 
stored configuration and
configure the MediaDeviceRoute accordingly. This change makes it so.

Test: media/wireless-playback-media-player/remote-playback-configuration.html

* 
LayoutTests/media/wireless-playback-media-player/remote-playback-configuration-expected.txt:
 Added.
* 
LayoutTests/media/wireless-playback-media-player/remote-playback-configuration.html:
 Added.
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::checkPlaybackTargetCompatibility):
(WebCore::HTMLMediaElement::loadNextSourceChild):
(WebCore::HTMLMediaElement::setReadyState):
(WebCore::HTMLMediaElement::rebuildMediaEngineForWirelessPlayback):
* Source/WebCore/platform/LogMessages.in:
* Source/WebCore/platform/audio/ios/MediaDeviceRoute.mm:
(-[WebMediaSourceObserver setMediaSource:]):
* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.h:
* Source/WebCore/platform/audio/ios/MediaDeviceRouteController.mm:
(WebCore::MediaDeviceRouteController::deactivateAllRoutes):
(WebCore::setMockMediaDeviceRouteControllerEnabled):
* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.cpp:
(WebCore::MediaPlayerPrivateWirelessPlayback::load):
(WebCore::MediaPlayerPrivateWirelessPlayback::setWirelessPlaybackTarget):
(WebCore::MediaPlayerPrivateWirelessPlayback::setShouldPlayToPlaybackTarget):
(WebCore::MediaPlayerPrivateWirelessPlayback::wirelessPlaybackTarget const):
(WebCore::MediaPlayerPrivateWirelessPlayback::route const):
(WebCore::MediaPlayerPrivateWirelessPlayback::updateURLIfNeeded):
(WebCore::MediaPlayerPrivateWirelessPlayback::play):
(WebCore::MediaPlayerPrivateWirelessPlayback::pause):
(WebCore::MediaPlayerPrivateWirelessPlayback::hasAudio const):
(WebCore::MediaPlayerPrivateWirelessPlayback::seekToTarget):
(WebCore::MediaPlayerPrivateWirelessPlayback::paused const):
(WebCore::MediaPlayerPrivateWirelessPlayback::startTime const):
(WebCore::MediaPlayerPrivateWirelessPlayback::duration const):
(WebCore::MediaPlayerPrivateWirelessPlayback::currentTime const):
(WebCore::MediaPlayerPrivateWirelessPlayback::maxTimeSeekable const):
(WebCore::MediaPlayerPrivateWirelessPlayback::minTimeSeekable const):
(WebCore::MediaPlayerPrivateWirelessPlayback::setCurrentTimeDidChangeCallback):
(WebCore::MediaPlayerPrivateWirelessPlayback::setRate):
(WebCore::MediaPlayerPrivateWirelessPlayback::rate const):
(WebCore::MediaPlayerPrivateWirelessPlayback::timeRangeDidChange):
(WebCore::MediaPlayerPrivateWirelessPlayback::currentPlaybackPositionDidChange):
* Source/WebCore/platform/graphics/MediaPlayerPrivateWirelessPlayback.h:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::resetToConsistentState):
* Source/WebCore/testing/MockMediaDeviceRoute.h:
* Source/WebCore/testing/MockMediaDeviceRoute.idl:
* Source/WebCore/testing/MockMediaDeviceRoute.mm:
(WebCore::MockMediaDeviceRoute::playing const):
(WebCore::MockMediaDeviceRoute::setPlaying):
(WebCore::MockMediaDeviceRoute::setHasPlaybackError):
(WebCore::MockMediaDeviceRoute::playbackRate const):
(WebCore::MockMediaDeviceRoute::setPlaybackRate):
(WebCore::MockMediaDeviceRoute::currentPlaybackPosition const):
(WebCore::MockMediaDeviceRoute::setCurrentPlaybackPosition):
(WebCore::MockMediaDeviceRoute::timeRange const):
(WebCore::MockMediaDeviceRoute::setTimeRange):
* Source/WebCore/testing/MockMediaDeviceRouteController.mm:
(WebCore::MockMediaDeviceRouteController::setEnabled):
* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.h:
* Source/WebCore/testing/cocoa/WebMockMediaDeviceRoute.mm:
(-[WebMockMediaDeviceRoute currentPlaybackPosition]):
(-[WebMockMediaDeviceRoute setCurrentPlaybackPosition:]):
(-[WebMockMediaDeviceRoute currentValue]):
(-[WebMockMediaDeviceRoute setCurrentValue:]):
(-[WebMockMediaDeviceRoute startWithURL:completionHandler:]):

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



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

Reply via email to