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 |