controller-on-reload.https.html (2086B)
1 <!DOCTYPE html> 2 <title>Service Worker: Controller on reload</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="resources/test-helpers.sub.js"></script> 6 <body> 7 <script> 8 promise_test(function(t) { 9 const iframe_scope = 'blank.html'; 10 const scope = 'resources/' + iframe_scope; 11 var frame; 12 var registration; 13 var controller; 14 return service_worker_unregister(t, scope) 15 .then(function() { 16 t.add_cleanup(function() { 17 return service_worker_unregister(t, scope); 18 }); 19 20 return with_iframe(scope); 21 }) 22 .then(function(f) { 23 frame = f; 24 return frame.contentWindow.navigator.serviceWorker.register( 25 'empty-worker.js', {scope: iframe_scope}); 26 }) 27 .then(function(swr) { 28 registration = swr; 29 return wait_for_state(t, registration.installing, 'activated'); 30 }) 31 .then(function() { 32 var w = frame.contentWindow; 33 assert_equals(w.navigator.serviceWorker.controller, null, 34 'controller should be null until the document is ' + 35 'reloaded'); 36 return new Promise(function(resolve) { 37 frame.onload = function() { resolve(); } 38 w.location.reload(); 39 }); 40 }) 41 .then(function() { 42 var w = frame.contentWindow; 43 controller = w.navigator.serviceWorker.controller; 44 assert_true(controller instanceof w.ServiceWorker, 45 'controller should be a ServiceWorker object upon reload'); 46 47 // objects from separate windows should not be equal 48 assert_not_equals(controller, registration.active); 49 50 return w.navigator.serviceWorker.getRegistration(iframe_scope); 51 }) 52 .then(function(frameRegistration) { 53 assert_equals(frameRegistration.active, controller); 54 frame.remove(); 55 }); 56 }, 'controller is set upon reload after registration'); 57 </script> 58 </body>