<!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>
async_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();
    service_worker_unregister_and_register(t, SCRIPT, SCOPE)
      .then(function(registration) {
          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();
            });
          channel.port1.onmessage = t.step_func(function(e) {
              assert_equals(e.data.results, 'finish');
              service_worker_unregister_and_done(t, SCOPE);
            });
          frame.contentWindow.postMessage({},
                                          host_info['HTTPS_ORIGIN'],
                                          [channel.port2]);
        })
      .catch(unreached_rejection(t));
  }, 'Verify the response of FetchEvent using XMLHttpRequest');
</script>
