OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="../resources/testharness.js"></script> | 2 <script src="../resources/testharness.js"></script> |
3 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
4 <script src="resources/test-helpers.js"></script> | 4 <script src="resources/test-helpers.js"></script> |
5 <body> | 5 <body> |
6 <script> | 6 <script> |
7 // Temporary measure to diagnose timeouts on Win XP. Let the W3C harness | 7 // Temporary measure to diagnose timeouts on Win XP. Let the W3C harness |
8 // timeout before run-webkit-tests does, so it can report the particular | 8 // timeout before run-webkit-tests does, so it can report the particular |
9 // test that timed out. | 9 // test that timed out. |
10 // FIXME: Remove after the cause of timeout is fixed. | 10 // FIXME: Remove after the cause of timeout is fixed. |
11 var properties = {timeout: 5500}; | 11 var properties = {timeout: 5500}; |
12 | 12 |
13 var worker = 'resources/fetch-event-test-worker.js'; | 13 var worker = 'resources/fetch-event-test-worker.js'; |
14 | 14 |
15 async_test(function(t) { | 15 async_test(function(t) { |
16 var scope = 'resources/simple.html?string'; | 16 var scope = 'resources/simple.html?string'; |
17 service_worker_unregister_and_register(t, worker, scope) | 17 service_worker_unregister_and_register(t, worker, scope) |
18 .then(function(registration) { | 18 .then(function(reg) { return wait_for_activated(t, reg); }) |
19 return wait_for_update(t, registration); | 19 .then(function() { return with_iframe(scope); }) |
20 }) | 20 .then(function(frame) { |
21 .then(t.step_func(function(sw) { | |
22 return wait_for_state(t, sw, 'activated'); | |
23 })) | |
24 .then(t.step_func(function() { return with_iframe(scope); })) | |
25 .then(t.step_func(function(frame) { | |
26 assert_equals( | 21 assert_equals( |
27 frame.contentDocument.body.textContent, | 22 frame.contentDocument.body.textContent, |
28 'Test string', | 23 'Test string', |
29 'Service Worker should respond to fetch with a test string'); | 24 'Service Worker should respond to fetch with a test string'); |
30 assert_equals( | 25 assert_equals( |
31 frame.contentDocument.contentType, | 26 frame.contentDocument.contentType, |
32 'text/plain', | 27 'text/plain', |
33 'The content type of the response created with a string should be te
xt/plain'); | 28 'The content type of the response created with a string should be te
xt/plain'); |
34 assert_equals( | 29 assert_equals( |
35 frame.contentDocument.characterSet, | 30 frame.contentDocument.characterSet, |
36 'UTF-8', | 31 'UTF-8', |
37 'The character set of the response created with a string should be U
TF-8'); | 32 'The character set of the response created with a string should be U
TF-8'); |
| 33 unload_iframe(frame); |
38 return service_worker_unregister_and_done(t, scope); | 34 return service_worker_unregister_and_done(t, scope); |
39 })) | 35 }) |
40 .catch(unreached_rejection(t)); | 36 .catch(unreached_rejection(t)); |
41 }, 'Service Worker responds to fetch event with string', properties); | 37 }, 'Service Worker responds to fetch event with string', properties); |
42 | 38 |
43 async_test(function(t) { | 39 async_test(function(t) { |
44 var scope = 'resources/simple.html?blob'; | 40 var scope = 'resources/simple.html?blob'; |
45 service_worker_unregister_and_register(t, worker, scope) | 41 service_worker_unregister_and_register(t, worker, scope) |
46 .then(function(registration) { | 42 .then(function(reg) { return wait_for_activated(t, reg); }) |
47 return wait_for_update(t, registration); | 43 .then(function() { return with_iframe(scope); }) |
48 }) | 44 .then(function(frame) { |
49 .then(t.step_func(function(sw) { | |
50 return wait_for_state(t, sw, 'activated'); | |
51 })) | |
52 .then(t.step_func(function() { return with_iframe(scope); })) | |
53 .then(t.step_func(function(frame) { | |
54 assert_equals( | 45 assert_equals( |
55 frame.contentDocument.body.textContent, | 46 frame.contentDocument.body.textContent, |
56 'Test blob', | 47 'Test blob', |
57 'Service Worker should respond to fetch with a test string'); | 48 'Service Worker should respond to fetch with a test string'); |
| 49 unload_iframe(frame); |
58 return service_worker_unregister_and_done(t, scope); | 50 return service_worker_unregister_and_done(t, scope); |
59 })) | 51 }) |
60 .catch(unreached_rejection(t)); | 52 .catch(unreached_rejection(t)); |
61 }, 'Service Worker responds to fetch event with blob body', properties); | 53 }, 'Service Worker responds to fetch event with blob body', properties); |
62 | 54 |
63 async_test(function(t) { | 55 async_test(function(t) { |
64 var scope = 'resources/simple.html?referrer'; | 56 var scope = 'resources/simple.html?referrer'; |
65 service_worker_unregister_and_register(t, worker, scope) | 57 service_worker_unregister_and_register(t, worker, scope) |
66 .then(function(registration) { | 58 .then(function(reg) { return wait_for_activated(t, reg); }) |
67 return wait_for_update(t, registration); | 59 .then(function() { return with_iframe(scope); }) |
68 }) | 60 .then(function(frame) { |
69 .then(t.step_func(function(sw) { | |
70 return wait_for_state(t, sw, 'activated'); | |
71 })) | |
72 .then(t.step_func(function() { return with_iframe(scope); })) | |
73 .then(t.step_func(function(frame) { | |
74 assert_equals( | 61 assert_equals( |
75 frame.contentDocument.body.textContent, | 62 frame.contentDocument.body.textContent, |
76 'Referrer: ' + document.location.href, | 63 'Referrer: ' + document.location.href, |
77 'Service Worker should respond to fetch with the referrer URL'); | 64 'Service Worker should respond to fetch with the referrer URL'); |
| 65 unload_iframe(frame); |
78 return service_worker_unregister_and_done(t, scope); | 66 return service_worker_unregister_and_done(t, scope); |
79 })) | 67 }) |
80 .catch(unreached_rejection(t)); | 68 .catch(unreached_rejection(t)); |
81 }, 'Service Worker responds to fetch event with the referrer URL', properties)
; | 69 }, 'Service Worker responds to fetch event with the referrer URL', properties)
; |
82 | 70 |
83 async_test(function(t) { | 71 async_test(function(t) { |
84 var scope = 'resources/simple.html?ignore'; | 72 var scope = 'resources/simple.html?ignore'; |
85 service_worker_unregister_and_register(t, worker, scope) | 73 service_worker_unregister_and_register(t, worker, scope) |
86 .then(function(registration) { | 74 .then(function(reg) { return wait_for_activated(t, reg); }) |
87 return wait_for_update(t, registration); | 75 .then(function() { return with_iframe(scope); }) |
88 }) | 76 .then(function(frame) { |
89 .then(t.step_func(function(sw) { | |
90 return wait_for_state(t, sw, 'activated'); | |
91 })) | |
92 .then(t.step_func(function() { return with_iframe(scope); })) | |
93 .then(t.step_func(function(frame) { | |
94 assert_equals(frame.contentDocument.body.textContent, | 77 assert_equals(frame.contentDocument.body.textContent, |
95 'Here\'s a simple html file.\n', | 78 'Here\'s a simple html file.\n', |
96 'Response should come from fallback to native fetch'); | 79 'Response should come from fallback to native fetch'); |
| 80 unload_iframe(frame); |
97 return service_worker_unregister_and_done(t, scope); | 81 return service_worker_unregister_and_done(t, scope); |
98 })) | 82 }) |
99 .catch(unreached_rejection(t)); | 83 .catch(unreached_rejection(t)); |
100 }, 'Service Worker does not respond to fetch event', properties); | 84 }, 'Service Worker does not respond to fetch event', properties); |
101 | 85 |
102 async_test(function(t) { | 86 async_test(function(t) { |
103 var scope = 'resources/simple.html?null'; | 87 var scope = 'resources/simple.html?null'; |
104 service_worker_unregister_and_register(t, worker, scope) | 88 service_worker_unregister_and_register(t, worker, scope) |
105 .then(function(registration) { | 89 .then(function(reg) { return wait_for_activated(t, reg); }) |
106 return wait_for_update(t, registration); | 90 .then(function() { return with_iframe(scope); }) |
107 }) | 91 .then(function(frame) { |
108 .then(t.step_func(function(sw) { | |
109 return wait_for_state(t, sw, 'activated'); | |
110 })) | |
111 .then(t.step_func(function() { return with_iframe(scope); })) | |
112 .then(t.step_func(function(frame) { | |
113 assert_equals(frame.contentDocument.body.textContent, | 92 assert_equals(frame.contentDocument.body.textContent, |
114 '', | 93 '', |
115 'Response should be the empty string'); | 94 'Response should be the empty string'); |
| 95 unload_iframe(frame); |
116 return service_worker_unregister_and_done(t, scope); | 96 return service_worker_unregister_and_done(t, scope); |
117 })) | 97 }) |
118 .catch(unreached_rejection(t)); | 98 .catch(unreached_rejection(t)); |
119 }, 'Service Worker responds to fetch event with null response body', propertie
s); | 99 }, 'Service Worker responds to fetch event with null response body', propertie
s); |
120 | 100 |
121 async_test(function(t) { | 101 async_test(function(t) { |
122 var scope = 'resources/simple.html?reject'; | 102 var scope = 'resources/simple.html?reject'; |
123 service_worker_unregister_and_register(t, worker, scope) | 103 service_worker_unregister_and_register(t, worker, scope) |
124 .then(function(registration) { | 104 .then(function(reg) { return wait_for_activated(t, reg); }) |
125 return wait_for_update(t, registration); | 105 .then(function() { return with_iframe(scope); }) |
126 }) | 106 .then(function(frame) { |
127 .then(t.step_func(function(sw) { | |
128 return wait_for_state(t, sw, 'activated'); | |
129 })) | |
130 .then(t.step_func(function() { return with_iframe(scope); })) | |
131 .then(t.step_func(function(frame) { | |
132 assert_equals(frame.contentDocument.body.textContent, | 107 assert_equals(frame.contentDocument.body.textContent, |
133 'Here\'s a simple html file.\n', | 108 'Here\'s a simple html file.\n', |
134 'Response should come from fallback to native fetch'); | 109 'Response should come from fallback to native fetch'); |
| 110 unload_iframe(frame); |
135 return service_worker_unregister_and_done(t, scope); | 111 return service_worker_unregister_and_done(t, scope); |
136 })) | 112 }) |
137 .catch(unreached_rejection(t)); | 113 .catch(unreached_rejection(t)); |
138 }, 'Service Worker rejects fetch event', properties); | 114 }, 'Service Worker rejects fetch event', properties); |
139 | 115 |
140 async_test(function(t) { | 116 async_test(function(t) { |
141 var scope = 'resources/simple.html?fetch'; | 117 var scope = 'resources/simple.html?fetch'; |
142 service_worker_unregister_and_register(t, worker, scope) | 118 service_worker_unregister_and_register(t, worker, scope) |
143 .then(function(registration) { | 119 .then(function(reg) { return wait_for_activated(t, reg); }) |
144 return wait_for_update(t, registration); | 120 .then(function() { return with_iframe(scope); }) |
145 }) | 121 .then(function(frame) { |
146 .then(t.step_func(function(sw) { | |
147 return wait_for_state(t, sw, 'activated'); | |
148 })) | |
149 .then(t.step_func(function() { return with_iframe(scope); })) | |
150 .then(t.step_func(function(frame) { | |
151 assert_equals(frame.contentDocument.body.textContent, | 122 assert_equals(frame.contentDocument.body.textContent, |
152 'Here\'s an other html file.\n', | 123 'Here\'s an other html file.\n', |
153 'Response should come from fetched other file'); | 124 'Response should come from fetched other file'); |
| 125 unload_iframe(frame); |
154 return service_worker_unregister_and_done(t, scope); | 126 return service_worker_unregister_and_done(t, scope); |
155 })) | 127 }) |
156 .catch(unreached_rejection(t)); | 128 .catch(unreached_rejection(t)); |
157 }, 'Service Worker fetches other file in fetch event', properties); | 129 }, 'Service Worker fetches other file in fetch event', properties); |
158 | 130 |
159 async_test(function(t) { | 131 async_test(function(t) { |
160 var scope = 'resources/simple.html?form-post'; | 132 var scope = 'resources/simple.html?form-post'; |
161 var frame_name = 'xhr-post-frame'; | 133 var frame_name = 'xhr-post-frame'; |
162 service_worker_unregister_and_register(t, worker, scope) | 134 service_worker_unregister_and_register(t, worker, scope) |
163 .then(function(registration) { | 135 .then(function(reg) { return wait_for_activated(t, reg); }) |
164 return wait_for_update(t, registration); | 136 .then(function(sw) { |
165 }) | |
166 .then(t.step_func(function(sw) { | |
167 return wait_for_state(t, sw, 'activated'); | |
168 })) | |
169 .then(t.step_func(function(sw) { | |
170 return new Promise(function(resolve) { | 137 return new Promise(function(resolve) { |
171 var frame = document.createElement('iframe'); | 138 var frame = document.createElement('iframe'); |
172 frame.name = frame_name; | 139 frame.name = frame_name; |
173 document.body.appendChild(frame); | 140 document.body.appendChild(frame); |
174 var form = document.createElement('form'); | 141 var form = document.createElement('form'); |
175 form.target = frame_name; | 142 form.target = frame_name; |
176 form.action = scope; | 143 form.action = scope; |
177 form.method = 'post'; | 144 form.method = 'post'; |
178 var input1 = document.createElement('input'); | 145 var input1 = document.createElement('input'); |
179 input1.type = 'text'; | 146 input1.type = 'text'; |
180 input1.value = 'testValue1'; | 147 input1.value = 'testValue1'; |
181 input1.name = 'testName1' | 148 input1.name = 'testName1' |
182 form.appendChild(input1); | 149 form.appendChild(input1); |
183 var input2 = document.createElement('input'); | 150 var input2 = document.createElement('input'); |
184 input2.type = 'text'; | 151 input2.type = 'text'; |
185 input2.value = 'testValue2'; | 152 input2.value = 'testValue2'; |
186 input2.name = 'testName2' | 153 input2.name = 'testName2' |
187 form.appendChild(input2); | 154 form.appendChild(input2); |
188 document.body.appendChild(form); | 155 document.body.appendChild(form); |
189 frame.onload = function() { | 156 frame.onload = function() { |
190 document.body.removeChild(form); | 157 document.body.removeChild(form); |
191 resolve(frame); | 158 resolve(frame); |
192 }; | 159 }; |
193 form.submit(); | 160 form.submit(); |
194 }); | 161 }); |
195 })) | 162 }) |
196 .then(t.step_func(function(frame) { | 163 .then(function(frame) { |
197 assert_equals(frame.contentDocument.body.textContent, | 164 assert_equals(frame.contentDocument.body.textContent, |
198 'POST:testName1=testValue1&testName2=testValue2'); | 165 'POST:testName1=testValue1&testName2=testValue2'); |
199 document.body.removeChild(frame); | 166 document.body.removeChild(frame); |
200 return service_worker_unregister_and_done(t, scope); | 167 return service_worker_unregister_and_done(t, scope); |
201 })) | 168 }) |
202 .catch(unreached_rejection(t)); | 169 .catch(unreached_rejection(t)); |
203 }, 'Service Worker responds to fetch event with POST form', properties); | 170 }, 'Service Worker responds to fetch event with POST form', properties); |
204 | 171 |
205 async_test(function(t) { | 172 async_test(function(t) { |
206 var scope = 'resources/simple.html?multiple-respond-with'; | 173 var scope = 'resources/simple.html?multiple-respond-with'; |
207 service_worker_unregister_and_register(t, worker, scope) | 174 service_worker_unregister_and_register(t, worker, scope) |
208 .then(function(registration) { | 175 .then(function(reg) { return wait_for_activated(t, reg); }) |
209 return wait_for_update(t, registration); | |
210 }) | |
211 .then(function(sw) { return wait_for_state(t, sw, 'activated'); }) | |
212 .then(function() { return with_iframe(scope); }) | 176 .then(function() { return with_iframe(scope); }) |
213 .then(function(frame) { | 177 .then(function(frame) { |
214 assert_equals( | 178 assert_equals( |
215 frame.contentDocument.body.textContent, | 179 frame.contentDocument.body.textContent, |
216 '(0)', | 180 '(0)', |
217 'Response should be the argument of the first respondWith() call.'); | 181 'Response should be the argument of the first respondWith() call.'); |
218 unload_iframe(frame); | 182 unload_iframe(frame); |
219 return with_iframe(scope); | 183 return with_iframe(scope); |
220 }) | 184 }) |
221 .then(function(frame) { | 185 .then(function(frame) { |
222 assert_equals( | 186 assert_equals( |
223 frame.contentDocument.body.textContent, | 187 frame.contentDocument.body.textContent, |
224 '(0)(1)[InvalidStateError](2)[InvalidStateError](0)', | 188 '(0)(1)[InvalidStateError](2)[InvalidStateError](0)', |
225 'Multiple calls of respondWith must throw InvalidStateErrors.'); | 189 'Multiple calls of respondWith must throw InvalidStateErrors.'); |
226 unload_iframe(frame); | 190 unload_iframe(frame); |
227 return service_worker_unregister_and_done(t, scope); | 191 return service_worker_unregister_and_done(t, scope); |
228 }) | 192 }) |
229 .catch(unreached_rejection(t)); | 193 .catch(unreached_rejection(t)); |
230 }, 'Multiple calls of respondWith must throw InvalidStateErrors', properties); | 194 }, 'Multiple calls of respondWith must throw InvalidStateErrors', properties); |
231 | 195 |
232 </script> | 196 </script> |
233 </body> | 197 </body> |
OLD | NEW |