Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 537043c0738d31cf15247da8fe11c0e85838a1e5
      
https://github.com/WebKit/WebKit/commit/537043c0738d31cf15247da8fe11c0e85838a1e5
  Author: Eric Carlson <eric.carl...@apple.com>
  Date:   2024-02-10 (Sat, 10 Feb 2024)

  Changed paths:
    A LayoutTests/media/video-playback-system-interruption-expected.txt
    A LayoutTests/media/video-playback-system-interruption.html
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/platform/audio/PlatformMediaSession.cpp
    M Source/WebCore/platform/audio/PlatformMediaSession.h
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp
    M Source/WebCore/platform/audio/PlatformMediaSessionManager.h

  Log Message:
  -----------
  Don't allow playback to start when in the background and interrupted by the 
system
https://bugs.webkit.org/show_bug.cgi?id=269081
rdar://117928506

Reviewed by Jer Noble.

Don't allow playback to begin when WebKit is in the background and has also 
been interrupted
by the audio session. This can happen, for example, when playback is started 
from Control
Center on the lock screen and the user switches to the camera app and activates 
the video
camera. Allowing playback activates WebKit's AVAudioSession and prevents the 
camera app
from using the volume buttons to trigger start/stop recording.

* LayoutTests/media/video-playback-system-interruption-expected.txt: Added.
* LayoutTests/media/video-playback-system-interruption.html: Added.

* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::couldPlayIfEnoughData const): Return false if the 
element
needs an active audio session and it was paused by a system interruption.

* Source/WebCore/platform/audio/PlatformMediaSession.cpp: Keep a vector of 
interruption types
instead of an interruption count so we know the type of the most recent 
interruption.
(WebCore::PlatformMediaSession::interruptionType const): Return the type of the 
most recent
interruption, not the first.
(WebCore::PlatformMediaSession::beginInterruption): Update for interruption 
stack.
(WebCore::PlatformMediaSession::endInterruption): Ditto.
(WebCore::PlatformMediaSession::isPlayingToWirelessPlaybackTargetChanged): Can 
no longer
save and restore the interruption count, but the issue that caused the change 
appears to
have been fixed.
(WebCore::PlatformMediaSession::blockedBySystemInterruption const):
* Source/WebCore/platform/audio/PlatformMediaSession.h:
(WebCore::PlatformMediaSession::interruptionCount const):
(WebCore::PlatformMediaSession::interruptionType const): Deleted.

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


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to