window_suspended.html (2135B)
1 <script> 2 const WORKER_URL = "worker_suspended.js"; 3 var testUrl2 = "window_suspended.html?page2Shown"; 4 5 let cacheDataPromise = {}; 6 cacheDataPromise.promise = new Promise(resolve => { 7 cacheDataPromise.resolve = resolve; 8 }); 9 var bcName = location.search.split('?')[1]; 10 var bc = new BroadcastChannel(bcName); 11 if (bcName == "page1Shown") { 12 bc.onmessage = async (msgEvent) => { 13 var msg = msgEvent.data; 14 var command = msg.command; 15 if (command == "startWorker") { 16 // Create a worker and subworkers 17 let { worker, promise } = postMessageWorker(msg.workerMessage); 18 promise.then(function() { 19 bc.postMessage({command: "verifyCacheData"}); 20 return cacheDataPromise.promise; 21 }) 22 .then(function() { 23 location.href = testUrl2; 24 }); 25 } else if (command == "changeLocation") { 26 cacheDataPromise.resolve(); 27 } else if (command == "finish") { 28 bc.postMessage({command: "finished"}); 29 bc.close(); 30 window.close(); 31 } 32 } 33 } else if (bcName == "page2Shown") { 34 bc.onmessage = (msgEvent) => { 35 var msg = msgEvent.data; 36 var command = msg.command; 37 if (command == "startWorker") { 38 let { worker, promise } = postMessageWorker(msg.workerMessage); 39 promise.then(function() { 40 bc.postMessage({command: "verifyCacheData"}); 41 return cacheDataPromise.promise; 42 }) 43 .then(function() { 44 bc.close(); 45 history.back(); 46 }); 47 } else if (command == "goBack") { 48 cacheDataPromise.resolve(); 49 } 50 } 51 } 52 53 function postMessageWorker(message) { 54 let worker = new window.Worker(WORKER_URL); 55 56 var promise = new Promise((resolve, reject) => { 57 // Waiting until workers are ready 58 worker.addEventListener("message", function onmessage(msg) { 59 bc.postMessage({command: "workerMessage", workerMessage: msg.data}); 60 worker.removeEventListener("message", onmessage); 61 resolve(); 62 }); 63 worker.postMessage(message); 64 }); 65 return { worker, promise }; 66 } 67 68 onpageshow = function(e) { 69 bc.postMessage({command: "onpageshow", persisted: e.persisted, location: location.href}); 70 } 71 </script>