<!DOCTYPE html>
<title>Service Worker: check referer of fetch()</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?pipe=sub"></script>
<script>
promise_test(function(t) {
    var SCOPE = 'resources/referer-iframe.html';
    var SCRIPT = 'resources/fetch-rewrite-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 referer');
</script>
