blob: e6c7521d94af9c1ac5998c7d5ec55a1ed5f6edd0 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<script src="../resources/platform-helper.js"></script>
</head>
<body>
<video src="content/audio-tracks.mp4" controls autoplay loop></video>
<script src="media-file.js"></script>
<script src="video-test.js"></script>
<script>
description("Testing that muting a video element should result in page's audio playing state to become false");
jsTestIsAsync = true;
// Un-mute audio on the page before starting the test.
if (window.internals) {
internals.setPageMuted("");
// TestController::resetStateToConsistentValues() initializes mediaVolume to 0, which in practice mutes the audio and
// interferes with this test. Let's use some quiet non-zero value.
internals.setPageMediaVolume(0.01);
}
function testUnmutingVideo()
{
run("video.muted = false");
shouldBecomeEqual("window.internals.pageMediaState().includes('IsPlayingAudio')", "true", finishJSTest);
}
function testMutingVideo()
{
run("video.muted = true");
// For GStreamer ports the semantics of IsPlayingAudio slightly differ from Apple ports. The
// webkit_web_view_is_playing_audio() API is expected to return true if a page is producing
// audio even though it might be muted. See HTMLMediaElement::mediaState() implementation.
var isPlayingAudioExpectedAfterMute = (isGtk() || isWPE()) ? "true" : "false";
shouldBecomeEqual("window.internals.pageMediaState().includes('IsPlayingAudio')", isPlayingAudioExpectedAfterMute, testUnmutingVideo);
}
video.addEventListener('playing', function setInitialVolume() {
video.volume = 1;
video.removeEventListener('playing', setInitialVolume);
});
shouldBecomeEqual("window.internals.pageMediaState().includes('IsPlayingAudio')", "true", testMutingVideo);
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>