| OLD | NEW | 
|    1 <!DOCTYPE html> |    1 <!DOCTYPE html> | 
|    2 <title>Service Worker: navigator.serviceWorker.ready</title> |    2 <title>Service Worker: navigator.serviceWorker.ready</title> | 
|    3 <script src="../resources/testharness.js"></script> |    3 <script src="../resources/testharness.js"></script> | 
|    4 <script src="../resources/testharnessreport.js"></script> |    4 <script src="../resources/testharnessreport.js"></script> | 
|    5 <script src="resources/test-helpers.js"></script> |    5 <script src="resources/test-helpers.js"></script> | 
|    6 <body> |    6 <body> | 
|    7 <script> |    7 <script> | 
|    8 test(function() { |    8 test(function() { | 
|    9     var promise = navigator.serviceWorker.ready; |    9     var promise = navigator.serviceWorker.ready; | 
|   10     assert_equals(promise, navigator.serviceWorker.ready, |   10     assert_equals(promise, navigator.serviceWorker.ready, | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   84                         'uncontrolled document should not have a controller'); |   84                         'uncontrolled document should not have a controller'); | 
|   85  |   85  | 
|   86           frame.remove(); |   86           frame.remove(); | 
|   87           service_worker_unregister_and_done(t, scope); |   87           service_worker_unregister_and_done(t, scope); | 
|   88         }) |   88         }) | 
|   89       .catch(unreached_rejection(t)); |   89       .catch(unreached_rejection(t)); | 
|   90   }, 'ready on a potential controlled document'); |   90   }, 'ready on a potential controlled document'); | 
|   91  |   91  | 
|   92 async_test(function(t) { |   92 async_test(function(t) { | 
|   93     var url = 'resources/empty-worker.js'; |   93     var url = 'resources/empty-worker.js'; | 
|   94     var scope = 'resources/blank.html?ready-after-unregister'; |   94     var matched_scope = 'resources/blank.html?ready-after-match'; | 
|   95     var expected_url = normalizeURL(url); |   95     var longer_matched_scope = 'resources/blank.html?ready-after-match-longer'; | 
|   96     var frame; |   96     var frame, registration; | 
|   97     var registration; |  | 
|   98  |   97  | 
|   99     service_worker_unregister_and_register(t, url, scope) |   98     Promise.all([service_worker_unregister(t, matched_scope), | 
 |   99                  service_worker_unregister(t, longer_matched_scope)]) | 
 |  100       .then(function() { | 
 |  101           return with_iframe(longer_matched_scope); | 
 |  102         }) | 
 |  103       .then(function(f) { | 
 |  104           frame = f; | 
 |  105           return navigator.serviceWorker.register(url, {scope: matched_scope}); | 
 |  106         }) | 
|  100       .then(function(r) { |  107       .then(function(r) { | 
|  101           registration = r; |  108           registration = r; | 
|  102           return wait_for_state(t, r.installing, 'activated'); |  109           return wait_for_state(t, r.installing, 'activated'); | 
|  103         }) |  110         }) | 
|  104       .then(function() { return with_iframe(scope); }) |  111       .then(function() { | 
|  105       .then(function(f) { |  112           return navigator.serviceWorker.register( | 
|  106           frame = f; |  113               url, {scope: longer_matched_scope}); | 
|  107           return registration.unregister(); |  | 
|  108         }) |  114         }) | 
|  109       .then(function() { |  115       .then(function() { | 
|  110           return frame.contentWindow.navigator.serviceWorker.ready; |  116           return frame.contentWindow.navigator.serviceWorker.ready; | 
|  111         }) |  117         }) | 
|  112       .then(function(registration) { |  118       .then(function(r) { | 
|  113           assert_equals(registration.installing, null, |  119           assert_equals(r.scope, normalizeURL(longer_matched_scope), | 
|  114                         'installing should be null'); |  120                         'longer matched registration should be returned'); | 
|  115           assert_equals(registration.waiting, null, |  121           assert_equals(frame.contentWindow.navigator.serviceWorker.controller, | 
|  116                         'waiting should be null'); |  122                         null, 'controller should be null'); | 
|  117           assert_equals(registration.active.scriptURL, expected_url, |  123           return registration.unregister(); | 
|  118                         'active after ready should not be null'); |  124         }) | 
|  119           assert_equals( |  125       .then(function() { | 
|  120               frame.contentWindow.navigator.serviceWorker.controller.scriptURL, |  | 
|  121               expected_url, |  | 
|  122               'controlled document should have a controller'); |  | 
|  123  |  | 
|  124           frame.remove(); |  126           frame.remove(); | 
|  125           service_worker_unregister_and_done(t, scope); |  127           return service_worker_unregister_and_done(t, longer_matched_scope); | 
|  126         }) |  128         }) | 
|  127       .catch(unreached_rejection(t)); |  129       .catch(unreached_rejection(t)); | 
|  128   }, 'ready after unregistration'); |  130   }, 'ready after a longer matched registration registered'); | 
|  129  |  131  | 
|  130 // FIXME: When replace() is implemented add a test that .ready is |  132 async_test(function(t) { | 
|  131 // repeatedly created and settled. |  133     var url = 'resources/empty-worker.js'; | 
 |  134     var matched_scope = 'resources/blank.html?ready-after-resolve'; | 
 |  135     var longer_matched_scope = | 
 |  136         'resources/blank.html?ready-after-resolve-longer'; | 
 |  137     var frame, registration; | 
 |  138  | 
 |  139     service_worker_unregister_and_register(t, url, matched_scope) | 
 |  140       .then(function(r) { | 
 |  141           registration = r; | 
 |  142           return wait_for_state(t, r.installing, 'activated'); | 
 |  143         }) | 
 |  144       .then(function() { | 
 |  145           return with_iframe(longer_matched_scope); | 
 |  146         }) | 
 |  147       .then(function(f) { | 
 |  148           frame = f; | 
 |  149           return f.contentWindow.navigator.serviceWorker.ready; | 
 |  150         }) | 
 |  151       .then(function(r) { | 
 |  152           assert_equals(r.scope, normalizeURL(matched_scope), | 
 |  153                         'matched registration should be returned'); | 
 |  154           return navigator.serviceWorker.register( | 
 |  155               url, {scope: longer_matched_scope}); | 
 |  156         }) | 
 |  157       .then(function() { | 
 |  158           return frame.contentWindow.navigator.serviceWorker.ready; | 
 |  159         }) | 
 |  160       .then(function(r) { | 
 |  161           assert_equals(r.scope, normalizeURL(matched_scope), | 
 |  162                         'ready should only be resolved once'); | 
 |  163           return registration.unregister(); | 
 |  164         }) | 
 |  165       .then(function() { | 
 |  166           frame.remove(); | 
 |  167           return service_worker_unregister_and_done(t, longer_matched_scope); | 
 |  168         }) | 
 |  169       .catch(unreached_rejection(t)); | 
 |  170   }, 'access ready after it has been resolved'); | 
 |  171  | 
|  132 </script> |  172 </script> | 
| OLD | NEW |