Title: [271488] trunk
- Revision
- 271488
- Author
- you...@apple.com
- Date
- 2021-01-14 09:19:00 -0800 (Thu, 14 Jan 2021)
Log Message
MediaSessionManager should update its state as soon as an audio capture track is ended
https://bugs.webkit.org/show_bug.cgi?id=220619
Reviewed by Eric Carlson.
Source/WebCore:
We were updating the audio session category on track destruction.
It should be done as soon as track is ended (either by web page or underlying)
instead of when GC might happen.
Covered by updated test.
* Modules/mediastream/MediaStreamTrack.cpp:
(WebCore::MediaStreamTrack::~MediaStreamTrack):
(WebCore::MediaStreamTrack::trackEnded):
* platform/audio/PlatformMediaSessionManager.h:
(WebCore::PlatformMediaSessionManager::hasAudioCaptureSource const):
LayoutTests:
* fast/mediastream/audio-track-enabled-expected.txt:
* fast/mediastream/audio-track-enabled.html:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (271487 => 271488)
--- trunk/LayoutTests/ChangeLog 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/LayoutTests/ChangeLog 2021-01-14 17:19:00 UTC (rev 271488)
@@ -1,3 +1,13 @@
+2021-01-14 Youenn Fablet <you...@apple.com>
+
+ MediaSessionManager should update its state as soon as an audio capture track is ended
+ https://bugs.webkit.org/show_bug.cgi?id=220619
+
+ Reviewed by Eric Carlson.
+
+ * fast/mediastream/audio-track-enabled-expected.txt:
+ * fast/mediastream/audio-track-enabled.html:
+
2021-01-14 Martin Robinson <mrobin...@igalia.com>
[css-scroll-snap] scroll-snap-align parsing is incorrect/backwards
Modified: trunk/LayoutTests/fast/mediastream/audio-track-enabled-expected.txt (271487 => 271488)
--- trunk/LayoutTests/fast/mediastream/audio-track-enabled-expected.txt 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/LayoutTests/fast/mediastream/audio-track-enabled-expected.txt 2021-01-14 17:19:00 UTC (rev 271488)
@@ -1,4 +1,4 @@
-PASS Check audio session state in case of disabled audio tracks
+PASS Check audio session state in case of disabled and stopped audio tracks
Modified: trunk/LayoutTests/fast/mediastream/audio-track-enabled.html (271487 => 271488)
--- trunk/LayoutTests/fast/mediastream/audio-track-enabled.html 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/LayoutTests/fast/mediastream/audio-track-enabled.html 2021-01-14 17:19:00 UTC (rev 271488)
@@ -13,6 +13,8 @@
internals.settings.setShouldManageAudioSessionCategory(true);
+ const defaultCategory = internals.audioSessionCategory();
+
let stream = await navigator.mediaDevices.getUserMedia({audio : true});
localVideo.srcObject = stream;
@@ -24,9 +26,21 @@
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
- stream.removeTrack(stream.getAudioTracks()[0]);
+ const audioTrack = stream.getAudioTracks()[0];
+ stream.removeTrack(audioTrack);
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
-}, "Check audio session state in case of disabled audio tracks");
+
+ audioTrack.stop();
+ const maxTries = 100;
+ let counter = 0;
+ while (++counter < maxTries) {
+ if (internals.audioSessionCategory() != "PlayAndRecord")
+ break;
+ await new Promise(resolve => setTimeout(resolve, 10));
+ }
+ assert_less_than(counter, maxTries);
+ assert_equals(internals.audioSessionCategory(), defaultCategory);
+}, "Check audio session state in case of disabled and stopped audio tracks");
</script>
</body>
Modified: trunk/Source/WebCore/ChangeLog (271487 => 271488)
--- trunk/Source/WebCore/ChangeLog 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/Source/WebCore/ChangeLog 2021-01-14 17:19:00 UTC (rev 271488)
@@ -1,5 +1,24 @@
2021-01-14 Youenn Fablet <you...@apple.com>
+ MediaSessionManager should update its state as soon as an audio capture track is ended
+ https://bugs.webkit.org/show_bug.cgi?id=220619
+
+ Reviewed by Eric Carlson.
+
+ We were updating the audio session category on track destruction.
+ It should be done as soon as track is ended (either by web page or underlying)
+ instead of when GC might happen.
+
+ Covered by updated test.
+
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::~MediaStreamTrack):
+ (WebCore::MediaStreamTrack::trackEnded):
+ * platform/audio/PlatformMediaSessionManager.h:
+ (WebCore::PlatformMediaSessionManager::hasAudioCaptureSource const):
+
+2021-01-14 Youenn Fablet <you...@apple.com>
+
Use AVAudioSessionModeDefault in AVAudioSessionCaptureDeviceManager::createAudioSession
https://bugs.webkit.org/show_bug.cgi?id=220618
<rdar://problem/73185920>
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (271487 => 271488)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2021-01-14 17:19:00 UTC (rev 271488)
@@ -105,8 +105,7 @@
allCaptureTracks().remove(this);
- if (m_private->type() == RealtimeMediaSource::Type::Audio)
- PlatformMediaSessionManager::sharedManager().removeAudioCaptureSource(*this);
+ ASSERT(m_private->type() != RealtimeMediaSource::Type::Audio || !PlatformMediaSessionManager::sharedManager().hasAudioCaptureSource(*this));
}
const AtomString& MediaStreamTrack::kind() const
@@ -538,6 +537,9 @@
void MediaStreamTrack::trackEnded(MediaStreamTrackPrivate&)
{
+ if (m_isCaptureTrack && m_private->type() == RealtimeMediaSource::Type::Audio)
+ PlatformMediaSessionManager::sharedManager().removeAudioCaptureSource(*this);
+
// http://w3c.github.io/mediacapture-main/#life-cycle
// When a MediaStreamTrack track ends for any reason other than the stop() method being invoked, the User Agent must queue a task that runs the following steps:
// 1. If the track's readyState attribute has the value ended already, then abort these steps.
Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h (271487 => 271488)
--- trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h 2021-01-14 17:17:47 UTC (rev 271487)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h 2021-01-14 17:19:00 UTC (rev 271488)
@@ -146,6 +146,7 @@
WEBCORE_EXPORT void addAudioCaptureSource(PlatformMediaSession::AudioCaptureSource&);
WEBCORE_EXPORT void removeAudioCaptureSource(PlatformMediaSession::AudioCaptureSource&);
+ bool hasAudioCaptureSource(PlatformMediaSession::AudioCaptureSource& source) const { return m_audioCaptureSources.contains(source); }
WEBCORE_EXPORT void processDidReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType, const PlatformMediaSession::RemoteCommandArgument*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes