| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Opaque responses should not be reused for XHRs</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <script> |
| const WORKER = |
| 'resources/opaque-response-preloaded-worker.js'; |
| |
| var done; |
| |
| // These test that the browser does not inappropriately use a cached opaque |
| // response for a request that is not no-cors. The test opens a controlled |
| // iframe that uses link rel=preload to issue a same-origin no-cors request. |
| // The service worker responds to the request with an opaque response. Then the |
| // iframe does an XHR (not no-cors) to that URL again. The request should fail. |
| promise_test(t => { |
| const SCOPE = |
| 'resources/opaque-response-being-preloaded-xhr.html'; |
| const promise = new Promise(resolve => done = resolve); |
| |
| return service_worker_unregister_and_register(t, WORKER, SCOPE) |
| .then(reg => { |
| add_completion_callback(() => reg.unregister()); |
| return wait_for_state(t, reg.installing, 'activated'); |
| }) |
| .then(() => with_iframe(SCOPE)) |
| .then(frame => t.add_cleanup(() => frame.remove() )) |
| .then(() => promise) |
| .then(result => assert_equals(result, 'PASS')); |
| }, 'Opaque responses should not be reused for XHRs, loading case'); |
| |
| promise_test(t => { |
| const SCOPE = |
| 'resources/opaque-response-preloaded-xhr.html'; |
| const promise = new Promise(resolve => done = resolve); |
| |
| return service_worker_unregister_and_register(t, WORKER, SCOPE) |
| .then(reg => { |
| add_completion_callback(() => reg.unregister()); |
| return wait_for_state(t, reg.installing, 'activated'); |
| }) |
| .then(() => with_iframe(SCOPE)) |
| .then(frame => t.add_cleanup(() => frame.remove() )) |
| .then(() => promise) |
| .then(result => assert_equals(result, 'PASS')); |
| }, 'Opaque responses should not be reused for XHRs, done case'); |
| |
| </script> |