Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: LayoutTests/http/tests/serviceworker/unregister-then-register.html

Issue 416003003: Test for register canceling an unregister. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: more tests Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « LayoutTests/http/tests/serviceworker/unregister-controller.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <script src="../resources/testharness.js"></script>
3 <script src="../resources/testharnessreport.js"></script>
4 <script src="resources/test-helpers.js"></script>
5 <script>
6 var worker_url = 'resources/empty-worker.js';
7
8 // Test that calling unregister() when the active worker has a controllee
9 // is cancelable by calling register() while the worker still has a controllee.
10 async_test(function(t) {
11 var scope = 'unregister-then-register';
12 var iframe;
13 var worker;
14
15 service_worker_unregister_and_register(t, worker_url, scope)
16 .then(function(registered_worker) {
17 worker = registered_worker;
18 return wait_for_state(t, worker, 'activated');
19 })
20 .then(function() {
21 // Create a controllee.
22 return with_iframe(scope);
23 })
24 .then(function(frame) {
25 iframe = frame;
26 // There's a controllee so unregistration won't take effect immediately.
27 return navigator.serviceWorker.unregister(scope);
28 })
29 .then(function() {
30 // Reverse the unregister.
31 return navigator.serviceWorker.register(worker_url, { scope: scope });
32 })
33 .then(function(registered_worker) {
34 assert_equals(registered_worker, worker,
35 'register should resolve to the same worker');
36 return unload_iframe(iframe);
37 })
38 .then(function() {
39 // Make a new controllee to prove unregistration didn't happen.
40 return with_iframe(scope);
41 })
42 .then(function(frame) {
43 var controller = frame.contentWindow.navigator.serviceWorker.controller;
44 assert_equals(controller.state, 'activated',
45 'document should load with an active controller');
46 service_worker_unregister_and_done(t, scope);
47 })
48 .catch(unreached_rejection(t));
49 }, 'Unregister is cancelable by register');
50
51 // Test that unregister() is canceled by register() for a new script URL, even
52 // if registration fails due to a 404 error when fetching the script.
michaeln 2014/07/30 02:49:42 I agree this is the result of the specified algos,
53 async_test(function(t) {
54 var scope = 'non-existent-worker'
55 var iframe;
56
57 service_worker_unregister_and_register(t, worker_url, scope)
58 .then(function(worker) {
59 return wait_for_state(t, worker, 'activated');
60 })
61 .then(function() {
62 return with_iframe(scope);
63 })
64 .then(function(frame) {
65 iframe = frame;
66 return navigator.serviceWorker.unregister(scope);
67 })
68 .then(function() {
69 return navigator.serviceWorker.register('nothing-here',
70 { scope: scope });
71 })
72 .then(
73 function() {
74 assert_unreached('register should reject the promise');
75 },
76 function() {
77 return unload_iframe(iframe);
78 })
79 .then(function() {
80 return with_iframe(scope);
81 })
82 .then(function(frame) {
83 var controller = frame.contentWindow.navigator.serviceWorker.controller;
84 // FIXME: When crbug.com/398355 is fixed, assert that document *does*
85 // load with a controller, whose script is worker_url.
86 assert_equals(controller, null,
87 'document should load with a controller');
88 service_worker_unregister_and_done(t, scope);
89 })
90 .catch(unreached_rejection(t));
91 }, 'Registering a new script URL that 404s does not affect the original ' +
92 'registration');
93
94 // Test that unregister() is canceled by register() for a new script URL, even
95 // if installation of the new worker fails.
michaeln 2014/07/30 02:49:42 ditto
96 async_test(function(t) {
97 var scope = 'reject-install-worker'
98 var iframe;
99
100 service_worker_unregister_and_register(t, worker_url, scope)
101 .then(function(worker) {
102 return wait_for_state(t, worker, 'activated');
103 })
104 .then(function() {
105 return with_iframe(scope);
106 })
107 .then(function(frame) {
108 iframe = frame;
109 return navigator.serviceWorker.unregister();
110 })
111 .then(function() {
112 return navigator.serviceWorker.register(
113 'resources/reject-install-worker.js', { scope: scope });
114 })
115 .then(function(worker) {
116 return wait_for_state(t, worker, 'redundant');
117 })
118 .then(function(worker) {
119 return unload_iframe(iframe);
120 })
121 .then(function() {
122 return with_iframe(scope);
123 })
124 .then(function(frame) {
125 var controller = frame.contentWindow.navigator.serviceWorker.controller;
126 // FIXME: When crbug.com/398355 is fixed, assert that document *does*
127 // load with a controller, whose script is worker_url.
128 assert_equals(controller, null,
129 'document should load with a controller');
130 service_worker_unregister_and_done(t, scope);
131 })
132 .catch(unreached_rejection(t));
133 }, 'Registering a new script URL that fails to install does not affect the ' +
134 'original registration');
135
136 // Test that unregister() is canceled by register() for a new script URL.
137 async_test(function(t) {
138 var scope = 'new-script'
139 var new_worker_url = worker_url + '?new';
140 var iframe;
141
142 service_worker_unregister_and_register(t, worker_url, scope)
143 .then(function(worker) {
144 return wait_for_state(t, worker, 'activated');
145 })
146 .then(function() {
147 return with_iframe(scope);
148 })
149 .then(function(frame) {
150 iframe = frame;
151 return navigator.serviceWorker.unregister();
152 })
153 .then(function() {
154 return navigator.serviceWorker.register(new_worker_url,
155 { scope: scope });
156 })
157 .then(function(worker) {
158 return wait_for_state(t, worker, 'installed');
159 })
160 .then(function() {
161 return with_iframe(scope);
162 })
163 .then(function(frame) {
164 // FIXME: When crbug.com/398355 is fixed, assert that controller
165 // uses the old url and waiting uses the new url.
166 var controller = frame.contentWindow.navigator.serviceWorker.controller;
167 assert_equals(controller.url, normalizeURL(new_worker_url),
168 'controller should have the old url');
169 return unload_iframe(frame);
170 })
171 .then(function() {
172 return unload_iframe(iframe);
173 })
174 .then(function() {
175 return with_iframe(scope);
176 })
177 .then(function(frame) {
178 var controller = frame.contentWindow.navigator.serviceWorker.controller;
179 // FIXME: When crbug.com/398355 is fixed, assert that controller
180 // uses the new url and waiting is null.
181 assert_equals(controller.url, normalizeURL(new_worker_url),
182 'document should load with a controller');
183 service_worker_unregister_and_done(t, scope);
184 })
185 .catch(unreached_rejection(t));
186 }, 'Registering a new script URL creates a waiting worker');
187 </script>
OLDNEW
« no previous file with comments | « LayoutTests/http/tests/serviceworker/unregister-controller.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698