import-scripts-updated-flag.https.html (2863B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Tests for importScripts: import scripts updated flag</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="resources/test-helpers.sub.js"></script> 7 <body> 8 <script> 9 // This test registers a worker that calls importScripts at various stages of 10 // service worker lifetime. The sub-tests trigger subsequent `importScript` 11 // invocations via the `message` event. 12 13 var register; 14 15 function post_and_wait_for_reply(worker, message) { 16 return new Promise(resolve => { 17 navigator.serviceWorker.onmessage = e => { resolve(e.data); }; 18 worker.postMessage(message); 19 }); 20 } 21 22 promise_test(function(t) { 23 const scope = 'resources/import-scripts-updated-flag'; 24 let registration; 25 26 register = service_worker_unregister_and_register( 27 t, 'resources/import-scripts-updated-flag-worker.js', scope) 28 .then(r => { 29 registration = r; 30 add_completion_callback(() => { registration.unregister(); }); 31 return wait_for_state(t, registration.installing, 'activated'); 32 }) 33 .then(() => { 34 // This test should not be considered complete until after the 35 // service worker has been unregistered. Currently, `testharness.js` 36 // does not support asynchronous global "tear down" logic, so this 37 // must be expressed using a dedicated `promise_test`. Because the 38 // other sub-tests in this file are declared synchronously, this test 39 // will be the final test executed. 40 promise_test(function(t) { 41 return registration.unregister(); 42 }); 43 44 return registration.active; 45 }); 46 47 return register; 48 }, 'initialize global state'); 49 50 promise_test(t => { 51 return register 52 .then(function(worker) { 53 return post_and_wait_for_reply(worker, 'root-and-message'); 54 }) 55 .then(result => { 56 assert_equals(result.error, null); 57 assert_equals(result.value, 'root-and-message'); 58 }); 59 }, 'import script previously imported at worker evaluation time'); 60 61 promise_test(t => { 62 return register 63 .then(function(worker) { 64 return post_and_wait_for_reply(worker, 'install-and-message'); 65 }) 66 .then(result => { 67 assert_equals(result.error, null); 68 assert_equals(result.value, 'install-and-message'); 69 }); 70 }, 'import script previously imported at worker install time'); 71 72 promise_test(t => { 73 return register 74 .then(function(worker) { 75 return post_and_wait_for_reply(worker, 'message'); 76 }) 77 .then(result => { 78 assert_equals(result.error, 'NetworkError'); 79 assert_equals(result.value, null); 80 }); 81 }, 'import script not previously imported'); 82 </script> 83 </body>