| <!DOCTYPE html> |
| <title>Service Worker: Synchronous XHR on Worker is intercepted</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <script> |
| 'use strict'; |
| |
| promise_test((t) => { |
| const url = 'resources/fetch-request-xhr-sync-on-worker-worker.js'; |
| const scope = 'resources/fetch-request-xhr-sync-on-worker-scope/'; |
| const non_existent_file = 'non-existent-file.txt'; |
| |
| // In Chromium, the service worker scope matching for workers is based on |
| // the URL of the parent HTML. So this test creates an iframe which is |
| // controlled by the service worker first, and creates a worker from the |
| // iframe. |
| return service_worker_unregister_and_register(t, url, scope) |
| .then((registration) => { |
| t.add_cleanup(() => registration.unregister()); |
| return wait_for_state(t, registration.installing, 'activated'); |
| }) |
| .then(() => { return with_iframe(scope + 'iframe_page'); }) |
| .then((frame) => { |
| t.add_cleanup(() => frame.remove()); |
| return frame.contentWindow.performSyncXHROnWorker(non_existent_file); |
| }) |
| .then((result) => { |
| assert_equals( |
| result.status, |
| 200, |
| 'HTTP response status code for intercepted request' |
| ); |
| assert_equals( |
| result.responseText, |
| 'Response from service worker', |
| 'HTTP response text for intercepted request' |
| ); |
| }); |
| }, 'Verify SyncXHR on Worker is intercepted'); |
| </script> |