blob: f0493ee371a937136655400a6254d6603b5dcd70 [file] [log] [blame] [edit]
<!DOCTYPE html>
<meta charset="utf-8">
<title>WakeLock object is independent</title>
<link rel="help" href="https://w3c.github.io/wake-lock/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script id="iframe" type="text/plain">
let iframeWakeLock, iframeRequest;
window.onmessage = async message => {
switch(message.data) {
case "INIT":
iframeWakeLock = await navigator.getWakeLock("screen");
parent.postMessage(iframeWakeLock.active, "*");
break;
case "ACQUIRED":
iframeRequest = iframeWakeLock.createRequest();
parent.postMessage(iframeWakeLock.active, "*");
break;
case "RELEASED":
iframeRequest.cancel();
parent.postMessage(iframeWakeLock.active, "*");
break;
default:
parent.postMessage("unknown operation", "*");
}
}
</script>
<script>
function load_iframe() {
return new Promise(resolve => {
const iframe = document.createElement("iframe");
iframe.onload = () => { resolve(iframe); };
iframe.srcdoc = "<script>" +
document.getElementById('iframe').textContent +
"<\/script>";
document.body.appendChild(iframe);
});
}
function wait_for_message(iframe) {
return new Promise(resolve => {
self.addEventListener("message", function listener(e) {
if (e.source === iframe.contentWindow) {
resolve(e.data);
self.removeEventListener("message", listener);
}
});
});
}
promise_test(async t => {
const wakeLock1 = await navigator.getWakeLock("screen");
const wakeLock2 = await navigator.getWakeLock("screen");
const iframe = await load_iframe();
//when wakeLock1 is acquired, wakeLock2 and iframeWakeLock are still inactived
iframe.contentWindow.postMessage("INIT", "*");
let request1 = wakeLock1.createRequest();
let isActive1 = await wait_for_message(iframe);
assert_true(wakeLock1.active, "the active is true when wakeLock1 is acquired");
assert_false(wakeLock2.active, "the active is false before wakeLock2 is acquired");
assert_false(isActive1, "the active is false before iframeWakeLock is acquired");
//when wakeLock2 and iframeWakeLock are acquired, release wakeLock1
iframe.contentWindow.postMessage("ACQUIRED", "*");
let isActive2 = await wait_for_message(iframe);
request1.cancel();
let request2 = wakeLock2.createRequest();
assert_false(wakeLock1.active, "the active is false when wakeLock1 is released");
assert_true(wakeLock2.active, "the active is true when wakeLock2 is acquired");
assert_true(isActive2, "the active is true when iframeWakeLock is acquired");
//release all WakeLock objects
iframe.contentWindow.postMessage("RELEASED", "*");
let isActive3 = await wait_for_message(iframe);
request2.cancel();
assert_false(wakeLock1.active, "the active is false when wakeLock1 is released");
assert_false(wakeLock2.active, "the active is false when wakeLock2 is released");
assert_false(isActive3, "the active is false when iframeWakeLock is released");
}, "Test that the WakeLock object is independent.");
</script>
</body>