diff options
Diffstat (limited to 'toolkit/content/tests/widgets/test_videocontrols_standalone.html')
-rw-r--r-- | toolkit/content/tests/widgets/test_videocontrols_standalone.html | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/toolkit/content/tests/widgets/test_videocontrols_standalone.html b/toolkit/content/tests/widgets/test_videocontrols_standalone.html new file mode 100644 index 0000000000..14208923dd --- /dev/null +++ b/toolkit/content/tests/widgets/test_videocontrols_standalone.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Video controls test</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <script src="/tests/SimpleTest/NativeKeyCodes.js"></script> + <script type="text/javascript" src="head.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<p id="display"></p> + +<pre id="test"> +<script class="testbody" type="text/javascript"> + SimpleTest.expectAssertions(0, 1); + +const videoWidth = 320; +const videoHeight = 240; + +function getMediaElement(aWindow) { + return aWindow.document.getElementsByTagName("video")[0]; +} + +var popup = window.open("seek_with_sound.ogg"); +popup.addEventListener("load", function() { + var video = getMediaElement(popup); + + is(popup.document.activeElement, video, "Document should load with focus moved to the video element."); + + if (!video.paused) { + runTestVideo(video); + } else { + video.addEventListener("play", function() { + runTestVideo(video); + }, {once: true}); + } +}, {once: true}); + +function runTestVideo(aVideo) { + var condition = function() { + var boundingRect = aVideo.getBoundingClientRect(); + return boundingRect.width == videoWidth && + boundingRect.height == videoHeight; + }; + waitForCondition(condition, function() { + var boundingRect = aVideo.getBoundingClientRect(); + is(boundingRect.width, videoWidth, "Width of the video should match expectation"); + is(boundingRect.height, videoHeight, "Height of video should match expectation"); + popup.close(); + runTestAudioPre(); + }, "The media element should eventually be resized to match the intrinsic size of the video."); +} + +function runTestAudioPre() { + popup = window.open("audio.ogg"); + popup.addEventListener("load", function() { + var audio = getMediaElement(popup); + + is(popup.document.activeElement, audio, "Document should load with focus moved to the video element."); + + if (!audio.paused) { + runTestAudio(audio); + } else { + audio.addEventListener("play", function() { + runTestAudio(audio); + }, {once: true}); + } + }, {once: true}); +} + +function runTestAudio(aAudio) { + info("User agent (help diagnose bug #943556): " + navigator.userAgent); + var isAndroid = navigator.userAgent.includes("Android"); + var expectedHeight = isAndroid ? 103 : 40; + var condition = function() { + var boundingRect = aAudio.getBoundingClientRect(); + return boundingRect.height == expectedHeight; + }; + waitForCondition(condition, function() { + var boundingRect = aAudio.getBoundingClientRect(); + is(boundingRect.height, expectedHeight, + "Height of audio element should be " + expectedHeight + ", which is equal to the controls bar."); + ok(!aAudio.paused, "Should be playing"); + testPauseByKeyboard(aAudio); + }, "The media element should eventually be resized to match the height of the audio controls."); +} + +function testPauseByKeyboard(aAudio) { + aAudio.addEventListener("pause", function() { + afterKeyPause(aAudio); + }, {once: true}); + // Press spacebar, which means play/pause. + synthesizeKey(" ", {}, popup); +} + +function afterKeyPause(aAudio) { + ok(true, "successfully caused audio to pause"); + waitForCondition(function() { + return aAudio.paused; + }, + function() { + // Click outside of the controls area. (Hopefully this has no effect.) + synthesizeMouseAtPoint(5, 5, { type: 'mousedown' }, popup); + synthesizeMouseAtPoint(5, 5, { type: 'mouseup' }, popup); + setTimeout(function() { + testPlayByKeyboard(aAudio); + }, 0); + }); +} + +function testPlayByKeyboard(aAudio) { + aAudio.addEventListener("play", function() { + ok(true, "successfully caused audio to play"); + finishAudio(); + }, {once: true}); + // Press spacebar, which means play/pause. + synthesizeKey(" ", {}, popup); +} + +function finishAudio() { + popup.close(); + SimpleTest.finish(); +} + +SimpleTest.waitForExplicitFinish(); + +</script> +</pre> +</body> +</html> |