<!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>
