<!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 testAudioPlayPause() { var lockState = true; var count = 0; var content = document.getElementById('content'); var audio = document.createElement('audio'); audio.src = "wakelock.ogg"; content.appendChild(audio); var startDate; function testAudioPlayListener(topic, state) { is(topic, "cpu", "#1 Audio element locked the target == cpu"); var locked = state == "locked-foreground" || state == "locked-background"; var s = locked ? "locked" : "unlocked"; is(locked, lockState, "#1 Audio element " + s + " the cpu"); count++; // count == 1 is when the cpu wakelock is created // count == 2 is when the cpu wakelock is released if (count == 1) { // The next step is to unlock the resource. lockState = false; audio.pause(); startDate = new Date(); return; } is(count, 2, "The count should be 2 which indicates wakelock release"); if (count == 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(audio); navigator.mozPower.removeWakeLockListener(testAudioPlayListener); runTests(); } }; navigator.mozPower.addWakeLockListener(testAudioPlayListener); audio.play(); } function testAudioPlay() { var lockState = true; var count = 0; var content = document.getElementById('content'); var audio = document.createElement('audio'); audio.src = "wakelock.ogg"; content.appendChild(audio); function testAudioPlayListener(topic, state) { is(topic, "cpu", "#2 Audio element locked the target == cpu"); var locked = state == "locked-foreground" || state == "locked-background"; var s = locked ? "locked" : "unlocked"; is(locked, lockState, "#2 Audio element " + s + " the cpu"); count++; // count == 1 is when the cpu wakelock is created: the wakelock must be // created when the media element starts playing. // count == 2 is when the cpu wakelock is released. if (count == 1) { // The next step is to unlock the resource. lockState = false; } else if (count == 2) { content.removeChild(audio); navigator.mozPower.removeWakeLockListener(testAudioPlayListener); runTests(); } }; navigator.mozPower.addWakeLockListener(testAudioPlayListener); audio.play(); } var tests = [ testAudioPlayPause, testAudioPlay ]; function runTests() { if (!tests.length) { SimpleTest.finish(); return; } var test = tests.pop(); test(); }; SpecialPowers.pushPrefEnv({"set": [["media.wakelock_timeout", 500]]}, runTests); SimpleTest.waitForExplicitFinish(); </script> </pre> </body> </html>