| 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 |