haikuwebkit/LayoutTests/fast/mediastream/audio-track-enabled.html

47 lines
1.5 KiB
HTML
Raw Permalink Normal View History

<body>
<video id="localVideo" autoplay playsInline></video>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
promise_test(async() => {
if (!window.internals)
return Promise.reject("Test requires internals API");
if (!window.internals.supportsAudioSession)
return;
internals.settings.setShouldManageAudioSessionCategory(true);
const defaultCategory = internals.audioSessionCategory();
let stream = await navigator.mediaDevices.getUserMedia({audio : true});
localVideo.srcObject = stream;
await localVideo.play();
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
stream.getAudioTracks()[0].enabled = false;
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
MediaStreamTrack should be a PlatformMediaSessionClient instead of MediaStream https://bugs.webkit.org/show_bug.cgi?id=202631 Reviewed by Eric Carlson. Source/WebCore: Make MediaStreamTrack a PlatformMediaSessionClient, which allows tracking tracks that are not owned by a stream. MediaStream is no longer a PlatformMediaSessionClient so we move some of MediaStream API implementation to MediaStreamTrack. Covered by updated test. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::startProducingData): (WebCore::MediaStream::stopProducingData): (WebCore::MediaStream::statusDidChange): (WebCore::MediaStream::mediaType const): Deleted. (WebCore::MediaStream::presentationType const): Deleted. (WebCore::MediaStream::characteristics const): Deleted. (WebCore::MediaStream::mayResumePlayback): Deleted. (WebCore::MediaStream::suspendPlayback): Deleted. (WebCore::MediaStream::sourceApplicationIdentifier const): Deleted. (WebCore::MediaStream::canProduceAudio const): Deleted. (WebCore::MediaStream::processingUserGestureForMedia const): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::mediaType const): (WebCore::MediaStreamTrack::presentationType const): (WebCore::MediaStreamTrack::characteristics const): (WebCore::MediaStreamTrack::mayResumePlayback): (WebCore::MediaStreamTrack::suspendPlayback): (WebCore::MediaStreamTrack::sourceApplicationIdentifier const): (WebCore::MediaStreamTrack::canProduceAudio const): (WebCore::MediaStreamTrack::processingUserGestureForMedia const): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::load): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasVideo const): (WebCore::MediaStreamPrivate::hasAudio const): (WebCore::MediaStreamPrivate::hasCaptureVideoSource const): Deleted. (WebCore::MediaStreamPrivate::hasCaptureAudioSource const): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.h: LayoutTests: * fast/mediastream/audio-track-enabled.html: Canonical link: https://commits.webkit.org/216166@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@250853 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-08 19:53:56 +00:00
const audioTrack = stream.getAudioTracks()[0];
stream.removeTrack(audioTrack);
MediaStreamTrack should be a PlatformMediaSessionClient instead of MediaStream https://bugs.webkit.org/show_bug.cgi?id=202631 Reviewed by Eric Carlson. Source/WebCore: Make MediaStreamTrack a PlatformMediaSessionClient, which allows tracking tracks that are not owned by a stream. MediaStream is no longer a PlatformMediaSessionClient so we move some of MediaStream API implementation to MediaStreamTrack. Covered by updated test. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::startProducingData): (WebCore::MediaStream::stopProducingData): (WebCore::MediaStream::statusDidChange): (WebCore::MediaStream::mediaType const): Deleted. (WebCore::MediaStream::presentationType const): Deleted. (WebCore::MediaStream::characteristics const): Deleted. (WebCore::MediaStream::mayResumePlayback): Deleted. (WebCore::MediaStream::suspendPlayback): Deleted. (WebCore::MediaStream::sourceApplicationIdentifier const): Deleted. (WebCore::MediaStream::canProduceAudio const): Deleted. (WebCore::MediaStream::processingUserGestureForMedia const): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::mediaType const): (WebCore::MediaStreamTrack::presentationType const): (WebCore::MediaStreamTrack::characteristics const): (WebCore::MediaStreamTrack::mayResumePlayback): (WebCore::MediaStreamTrack::suspendPlayback): (WebCore::MediaStreamTrack::sourceApplicationIdentifier const): (WebCore::MediaStreamTrack::canProduceAudio const): (WebCore::MediaStreamTrack::processingUserGestureForMedia const): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::load): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasVideo const): (WebCore::MediaStreamPrivate::hasAudio const): (WebCore::MediaStreamPrivate::hasCaptureVideoSource const): Deleted. (WebCore::MediaStreamPrivate::hasCaptureAudioSource const): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.h: LayoutTests: * fast/mediastream/audio-track-enabled.html: Canonical link: https://commits.webkit.org/216166@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@250853 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-08 19:53:56 +00:00
await new Promise(resolve => setTimeout(resolve, 10));
assert_equals(internals.audioSessionCategory(), "PlayAndRecord");
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>