| <!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> |