fetch-event-respond-with-argument-iframe.html (1497B)
1 <!DOCTYPE html> 2 <script> 3 function fetch_url(url) { 4 return new Promise(function(resolve, reject) { 5 var request = new XMLHttpRequest(); 6 request.addEventListener('load', function(event) { 7 resolve(); 8 }); 9 request.addEventListener('error', function(event) { 10 reject(); 11 }); 12 request.open('GET', url); 13 request.send(); 14 }); 15 } 16 17 function make_test(testcase) { 18 var name = testcase.name; 19 return fetch_url(window.location.href + '?' + name) 20 .then( 21 function() { 22 if (testcase.expect_load) 23 return Promise.resolve(); 24 return Promise.reject(new Error( 25 name + ': expected network error but loaded')); 26 }, 27 function() { 28 if (!testcase.expect_load) 29 return Promise.resolve(); 30 return Promise.reject(new Error( 31 name + ': expected to load but got network error')); 32 }); 33 } 34 35 function run_tests() { 36 var tests = [ 37 { name: 'response-object', expect_load: true }, 38 { name: 'response-promise-object', expect_load: true }, 39 { name: 'other-value', expect_load: false }, 40 ].map(make_test); 41 42 Promise.all(tests) 43 .then(function() { 44 window.parent.notify_test_done('PASS'); 45 }) 46 .catch(function(error) { 47 window.parent.notify_test_done('FAIL: ' + error.message); 48 }); 49 } 50 51 if (!navigator.serviceWorker.controller) 52 window.parent.notify_test_done('FAIL: no controller'); 53 else 54 run_tests(); 55 </script>