test_worker_in_background.html (1639B)
1 <html> 2 3 <head> 4 <title>Workers background flag test</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 8 <script type="text/javascript"> 9 10 let worker = new Worker("test_worker_in_background.js"); 11 var newtab; 12 13 async function waitForWorkerEvent(stage) { 14 return new Promise(resolve => { 15 worker.addEventListener("message", e => { 16 is(e.data.status, "PASS", stage); 17 resolve(); 18 }, { 19 once: true 20 }); 21 }); 22 } 23 24 25 add_task(async function enable_testing_prefs() { 26 await SpecialPowers.pushPrefEnv({ 27 set: [ 28 ["dom.workers.testing.enabled", true] 29 ], 30 }); 31 ok(true, "testing settings enabled"); 32 }); 33 34 add_task(async function test_worker_in_foreground() { 35 const stage = "CheckIsForeground"; 36 worker.postMessage(stage); 37 await waitForWorkerEvent(stage); 38 }); 39 40 add_task(async function test_worker_in_background() { 41 const stage = "CheckIsBackground"; 42 document.onvisibilitychange = () => { 43 if (document.visibilityState === "hidden") { 44 worker.postMessage(stage); 45 } 46 } 47 newtab = window.open('about:blank', '_blank'); 48 await waitForWorkerEvent(stage); 49 }); 50 51 add_task(async function test_worker_return_to_foreground() { 52 const stage = "CheckIsForegroundAgain"; 53 document.onvisibilitychange = () => { 54 if (document.visibilityState === "visible") { 55 worker.postMessage(stage); 56 } 57 } 58 newtab.close(); 59 await waitForWorkerEvent(stage); 60 }); 61 62 </script> 63 </head> 64 65 <body> 66 </body> 67 </html>