2 <script src="../resources/testharness.js"></script>
3 <script src="../resources/testharnessreport.js"></script>
4 <script src="resources/test-helpers.js"></script>
6 var worker_url = 'resources/empty-worker.js';
8 async_test(function(t) {
9 var scope = 'resources/scope/subsequent-register-from-same-window';
12 service_worker_unregister_and_register(t, worker_url, scope)
15 return wait_for_activated(t, registration);
18 return navigator.serviceWorker.register(worker_url, { scope: scope });
20 .then(function(new_registration) {
21 assert_equals(new_registration, registration,
22 'register should resolve to the same registration');
23 assert_equals(new_registration.active, registration.active,
24 'register should resolve to the same worker');
25 assert_equals(new_registration.active.state, 'activated',
26 'the worker should be in state "activated"');
27 return registration.unregister();
29 .then(function() { t.done(); })
30 .catch(unreached_rejection(t));
31 }, 'Subsequent registrations resolve to the same registration object');
33 async_test(function(t) {
34 var scope = 'resources/scope/subsequent-register-from-different-iframe';
38 service_worker_unregister_and_register(t, worker_url, scope)
41 return wait_for_activated(t, registration);
43 .then(function() { return with_iframe('out-of-scope'); })
46 return frame.contentWindow.navigator.serviceWorker.register(
47 worker_url, { scope: scope });
49 .then(function(new_registration) {
51 registration, new_registration,
52 'register should resolve to the different registration');
54 registration.scope, new_registration.scope,
55 'registrations should have the same scope');
58 registration.installing, null,
59 'installing worker should be null');
61 new_registration.installing, null,
62 'installing worker should be null');
64 registration.waiting, null,
65 'waiting worker should be null')
67 new_registration.waiting, null,
68 'waiting worker should be null')
71 registration.active, new_registration.active,
72 'registration should have the different active worker');
74 registration.active.scriptURL,
75 new_registration.active.scriptURL,
76 'active workers should have the same script URL');
78 registration.active.state,
79 new_registration.active.state,
80 'active workers should be in the same state');
83 return registration.unregister();
85 .then(function() { t.done(); })
86 .catch(unreached_rejection(t));
87 }, 'Subsequent registrations from a different iframe resolve to the ' +
88 'different registration object but they refer to the same ' +
89 'registration and workers');
91 async_test(function(t) {
92 var scope = 'resources/scope/concurrent-register';
94 service_worker_unregister(t, scope)
97 for (var i = 0; i < 10; ++i) {
98 promises.push(navigator.serviceWorker.register(worker_url,
101 return Promise.all(promises);
103 .then(function(registrations) {
104 registrations.forEach(function(registration) {
105 assert_equals(registration, registrations[0],
106 'register should resolve to the same registration');
108 return registrations[0].unregister();
110 .then(function() { t.done(); })
111 .catch(unreached_rejection(t));
112 }, 'Concurrent registrations resolve to the same registration object');