| <!DOCTYPE html> |
| <title>Service Worker: Synchronous XHR 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(function(t) { |
| var url = 'resources/fetch-request-xhr-sync-worker.js'; |
| var scope = 'resources/fetch-request-xhr-sync-iframe.html'; |
| var non_existent_file = 'non-existent-file.txt'; |
| |
| return service_worker_unregister_and_register(t, url, scope) |
| .then(function(registration) { |
| t.add_cleanup(function() { |
| return registration.unregister(); |
| }); |
| |
| return wait_for_state(t, registration.installing, 'activated'); |
| }) |
| .then(function() { return with_iframe(scope); }) |
| .then(function(frame) { |
| t.add_cleanup(function() { |
| frame.remove(); |
| }); |
| |
| return new Promise(function(resolve, reject) { |
| t.step_timeout(function() { |
| var xhr; |
| try { |
| xhr = frame.contentWindow.performSyncXHR(non_existent_file); |
| resolve(xhr); |
| } catch (err) { |
| reject(err); |
| } |
| }, 0); |
| }) |
| }) |
| .then(function(xhr) { |
| assert_equals( |
| xhr.status, |
| 200, |
| 'HTTP response status code for intercepted request' |
| ); |
| assert_equals( |
| xhr.responseText, |
| 'Response from service worker', |
| 'HTTP response text for intercepted request' |
| ); |
| }); |
| }, 'Verify SyncXHR is intercepted'); |
| </script> |