<!DOCTYPE html>
<title>Service Worker: respondWith with header value containing an ISO Latin 1 (ISO-8859-1 Character Set) string</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
promise_test(function(t) {
    var SCOPE = 'resources/iso-latin1-header-iframe.html';
    var SCRIPT = 'resources/iso-latin1-header-worker.js';
    var host_info = get_host_info();
    return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
      .then(function(registration) {
          t.add_cleanup(function() {
              return service_worker_unregister(t, SCOPE);
            });

          return wait_for_state(t, registration.installing, 'activated');
        })
      .then(function() { return with_iframe(SCOPE); })
      .then(function(frame) {
          var channel = new MessageChannel();
          t.add_cleanup(function() {
              frame.remove();
            });

          var onMsg = new Promise(function(resolve) {
              channel.port1.onmessage = resolve;
            });

          frame.contentWindow.postMessage({},
                                          host_info['HTTPS_ORIGIN'],
                                          [channel.port2]);
          return onMsg;
        })
      .then(function(e) {
          assert_equals(e.data.results, 'finish');
        });
  }, 'Verify the response of FetchEvent using XMLHttpRequest');
</script>
