diff options
Diffstat (limited to 'dom/html/test/test_video_wakelock.html')
-rw-r--r-- | dom/html/test/test_video_wakelock.html | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/dom/html/test/test_video_wakelock.html b/dom/html/test/test_video_wakelock.html new file mode 100644 index 000000000..52b05cda4 --- /dev/null +++ b/dom/html/test/test_video_wakelock.html @@ -0,0 +1,198 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=868943 +--> +<head> + <title>Test for Bug 868943</title> + <script type="application/javascript" src="/MochiKit/packed.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=868943">Mozilla Bug 868943</a> +<p id="display"></p> +<div id="content"> +</div> +<pre id="test"> +<script type="application/javascript"> + +/** Test for Bug 868943 **/ + +function testVideoPlayPause() { + info("#1 testVideoPlayPause"); + + var lockState_cpu = true; + var lockState_screen = true; + var count_cpu = 0; + var count_screen = 0; + + var content = document.getElementById('content'); + + var video = document.createElement('video'); + ok(video.mozUseScreenWakeLock, "#1 Video element uses screen wake lock by default"); + video.src = "wakelock.ogv"; + content.appendChild(video); + + var startDate; + function testVideoPlayPauseListener(topic, state) { + info("#1 topic=" + topic + ", state=" + state); + + var locked = state == "locked-foreground" || + state == "locked-background"; + + if (topic == "cpu") { + is(locked, lockState_cpu, "#1 Video element locked the cpu"); + count_cpu++; + } else if (topic == "screen") { + is(locked, lockState_screen, "#1 Video element locked the screen"); + count_screen++; + } + + if (count_cpu == 1 && count_screen == 1) { + info("#1 Both cpu and screen are locked"); + // The next step is to unlock the resource. + lockState_cpu = false; + lockState_screen = false; + video.pause(); + startDate = new Date(); + } + + if (count_cpu == 2 && count_screen == 2) { + var diffDate = (new Date() - startDate); + ok(diffDate > 200, "#1 There was at least 200 milliseconds between the stop and the wakelock release"); + + content.removeChild(video); + navigator.mozPower.removeWakeLockListener(testVideoPlayPauseListener); + runTests(); + } + } + + navigator.mozPower.addWakeLockListener(testVideoPlayPauseListener); + video.play(); +} + +function testVideoPlay() { + info("#2 testVideoPlay"); + + var lockState_cpu = true; + var lockState_screen = true; + var count_cpu = 0; + var count_screen = 0; + + var content = document.getElementById('content'); + + var video = document.createElement('video'); + ok(video.mozUseScreenWakeLock, "#2 Video element uses screen wake lock by default"); + video.src = "wakelock.ogv"; + content.appendChild(video); + + var startDate; + video.addEventListener('progress', function() { + startDate = new Date(); + }); + + function testVideoPlayListener(topic, state) { + info("#2 topic=" + topic + ", state=" + state); + + var locked = state == "locked-foreground" || + state == "locked-background"; + + if (topic == "cpu") { + is(locked, lockState_cpu, "#2 Video element locked the cpu"); + count_cpu++; + } else if (topic == "screen") { + is(locked, lockState_screen, "#2 Video element locked the screen"); + count_screen++; + } + + if (count_cpu == 1 && count_screen == 1) { + info("#2 Both cpu and screen are locked"); + // The next step is to unlock the resource. + lockState_cpu = false; + lockState_screen = false; + } else if (count_cpu == 2 && count_screen == 2) { + var diffDate = (new Date() - startDate); + ok(diffDate > 200, "#2 There was at least milliseconds between the stop and the wakelock release"); + + content.removeChild(video); + navigator.mozPower.removeWakeLockListener(testVideoPlayListener); + runTests(); + } + } + + navigator.mozPower.addWakeLockListener(testVideoPlayListener); + video.play(); +} + +function testVideoNoScreenWakeLock() { + info("#3 testVideoNoScreenWakeLock"); + + var lockState_cpu = true; + var lockState_screen = false; + var count_cpu = 0; + + var content = document.getElementById('content'); + + var video = document.createElement('video'); + video.mozUseScreenWakeLock = false; + video.src = "wakelock.ogv"; + content.appendChild(video); + + var startDate; + function testVideoNoScreenWakeLockListener(topic, state) { + info("#3 topic=" + topic + ", state=" + state); + + var locked = state == "locked-foreground" || + state == "locked-background"; + + if (topic == "cpu") { + is(locked, lockState_cpu, "#3 Video element locked the cpu"); + count_cpu++; + } else if (topic == "screen") { + is(locked, lockState_screen, "#3 Video element locked the screen"); + } + + if (count_cpu == 1) { + info("#3 Cpu is locked"); + // The next step is to unlock the resource. + lockState_cpu = false; + video.pause(); + startDate = new Date(); + } + + if (count_cpu == 2) { + var diffDate = (new Date() - startDate); + ok(diffDate > 200, "#3 There was at least 200 milliseconds between the stop and the wakelock release"); + + content.removeChild(video); + navigator.mozPower.removeWakeLockListener(testVideoNoScreenWakeLockListener); + runTests(); + } + } + + navigator.mozPower.addWakeLockListener(testVideoNoScreenWakeLockListener); + video.play(); +} + +var tests = [ testVideoPlayPause, testVideoPlay, testVideoNoScreenWakeLock ]; +function runTests() { + if (!tests.length) { + SimpleTest.finish(); + return; + } + + var test = tests.pop(); + test(); +}; + +SpecialPowers.pushPrefEnv({"set": [["media.wakelock_timeout", 500], + ["dom.wakelock.enabled", true]]}, runTests); + +SimpleTest.waitForExplicitFinish(); + +</script> +</pre> +</body> +</html> |