<!DOCTYPE html>
<!-- This test is prefixed with `chromium.` because the equivalent version
  available in Web Platform Tests contains additional assertions which Chromium
  currently fails. This test should be persisted only to preserve test coverage
  until such time as the upstream version can be made to pass. See
  https://crbug.com/718935 -->
<title>Service Worker: FetchEvent for resources</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/get-host-info.js?pipe=sub"></script>
<script src="resources/test-helpers.js"></script>
<script>
var url_count = 0;
var expected_results = {};

function image_test(frame, url, cross_origin,
                    expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'Image load (url:' +
               actual_url + ' cross_origin:' + cross_origin + ')'
    };
  return frame.contentWindow.load_image(actual_url, cross_origin);
}

function script_test(frame, url, cross_origin,
                     expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'Script load (url:' +
               actual_url + ' cross_origin:' + cross_origin + ')'
    };
  return frame.contentWindow.load_script(actual_url, cross_origin);
}

function css_test(frame, url, cross_origin,
                  expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'CSS load (url:' +
               actual_url + ' cross_origin:' + cross_origin + ')'
    };
  return frame.contentWindow.load_css(actual_url, cross_origin);
}

function font_face_test(frame, url, expected_mode,
                        expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      url: actual_url,
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'FontFace load (url:' + actual_url + ')'
    };
  return frame.contentWindow.load_font(actual_url);
}

function css_image_test(frame, url, type,
                        expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      url: actual_url,
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'CSSImage load (url:' + actual_url + ' type:' + type + ')'
    };
  return frame.contentWindow.load_css_image(actual_url, type);
}

function css_image_set_test(frame, url, type,
                            expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      url: actual_url,
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'CSSImageSet load (url:' + actual_url + ' type:' + type + ')'
    };
  return frame.contentWindow.load_css_image_set(actual_url, type);
}

function fetch_test(frame, url, mode, credentials,
                    expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'fetch (url:' + actual_url + ' mode:' + mode + ' credentials:' +
               credentials + ')'
    };
  return frame.contentWindow.fetch(
      new Request(actual_url, {mode: mode, credentials: credentials}));
}

function audio_test(frame, url, cross_origin,
                    expected_mode, expected_credentials) {
  var actual_url = url + (++url_count);
  expected_results[actual_url] = {
      mode: expected_mode,
      credentials: expected_credentials,
      redirect: 'follow',
      message: 'Audio load (url:' + actual_url + ' cross_origin:' +
               cross_origin + ')'
    };
  return frame.contentWindow.load_audio(actual_url, cross_origin);
}

async_test(function(t) {
    var SCOPE = 'resources/fetch-request-resources-iframe.html';
    var SCRIPT = 'resources/fetch-request-resources-worker.js';
    var host_info = get_host_info();
    var LOCAL_URL =
      host_info['HTTP_ORIGIN'] + base_path() + 'resources/dummy?test';
    var REMOTE_URL =
      host_info['HTTP_REMOTE_ORIGIN'] + base_path() + 'resources/dummy?test';
    var worker;
    var frame;
    service_worker_unregister_and_register(t, SCRIPT, SCOPE)
      .then(function(registration) {
          worker = registration.installing;
          return wait_for_state(t, worker, 'activated');
        })
      .then(function() {
          return new Promise(function(resolve) {
              var channel = new MessageChannel();
              channel.port1.onmessage = t.step_func(function(msg) {
                if (msg.data.ready) {
                  resolve();
                  return;
                }
                var result = msg.data;
                var expected = expected_results[result.url];
                if (!expected) {
                  return;
                }
                assert_equals(
                    result.mode, expected.mode,
                    'mode of ' + expected.message +  ' must be ' +
                    expected.mode + '.');
                assert_equals(
                    result.credentials, expected.credentials,
                    'credentials of ' + expected.message +  ' must be ' +
                    expected.credentials + '.');
                assert_equals(
                    result.redirect, expected.redirect,
                    'redirect mode of ' + expected.message +  ' must be ' +
                    expected.redirect + '.');
                --url_count;
                delete expected_results[result.url];
                if (url_count == 0) {
                  frame.remove();
                  service_worker_unregister_and_done(t, SCOPE);
                }
              });
              worker.postMessage(
                {port: channel.port2}, [channel.port2]);
            });
        })
      .then(function() { return with_iframe(SCOPE); })
      .then(function(f) {
        frame = f;
        image_test(f, LOCAL_URL, '', 'no-cors', 'include');
        image_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
        image_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
        image_test(f, REMOTE_URL, '', 'no-cors', 'include');
        image_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
        image_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');

        script_test(f, LOCAL_URL, '', 'no-cors', 'include');
        script_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
        script_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
        script_test(f, REMOTE_URL, '', 'no-cors', 'include');
        script_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
        script_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');

        css_test(f, LOCAL_URL, '', 'no-cors', 'include');
        css_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
        css_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
        css_test(f, REMOTE_URL, '', 'no-cors', 'include');
        css_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
        css_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');

        font_face_test(f, LOCAL_URL, 'cors', 'same-origin');
        font_face_test(f, REMOTE_URL, 'cors', 'same-origin');

        css_image_test(f, LOCAL_URL, 'backgroundImage', 'no-cors', 'include');
        css_image_test(f, REMOTE_URL, 'backgroundImage', 'no-cors', 'include');
        css_image_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin');
        css_image_test(f, REMOTE_URL, 'shapeOutside', 'cors', 'same-origin');

        css_image_set_test(f, LOCAL_URL, 'backgroundImage',
                           'no-cors', 'include');
        css_image_set_test(f, REMOTE_URL, 'backgroundImage',
                           'no-cors', 'include');
        css_image_set_test(f, LOCAL_URL, 'shapeOutside', 'cors', 'same-origin');
        css_image_set_test(f, REMOTE_URL, 'shapeOutside',
                           'cors', 'same-origin');

        fetch_test(f, LOCAL_URL, 'same-origin', 'omit', 'same-origin', 'omit');
        fetch_test(f, LOCAL_URL, 'same-origin', 'same-origin',
                   'same-origin', 'same-origin');
        fetch_test(f, LOCAL_URL, 'same-origin', 'include',
                   'same-origin', 'include');
        fetch_test(f, LOCAL_URL, 'no-cors', 'omit', 'no-cors', 'omit');
        fetch_test(f, LOCAL_URL, 'no-cors', 'same-origin',
                   'no-cors', 'same-origin');
        fetch_test(f, LOCAL_URL, 'no-cors', 'include', 'no-cors', 'include');
        fetch_test(f, LOCAL_URL, 'cors', 'omit', 'cors', 'omit');
        fetch_test(f, LOCAL_URL, 'cors', 'same-origin', 'cors', 'same-origin');
        fetch_test(f, LOCAL_URL, 'cors', 'include', 'cors', 'include');
        fetch_test(f, REMOTE_URL, 'no-cors', 'omit', 'no-cors', 'omit');
        fetch_test(f, REMOTE_URL, 'no-cors', 'same-origin',
                   'no-cors', 'same-origin');
        fetch_test(f, REMOTE_URL, 'no-cors', 'include', 'no-cors', 'include');
        fetch_test(f, REMOTE_URL, 'cors', 'omit', 'cors', 'omit');
        fetch_test(f, REMOTE_URL, 'cors', 'same-origin', 'cors', 'same-origin');
        fetch_test(f, REMOTE_URL, 'cors', 'include', 'cors', 'include');

        audio_test(f, LOCAL_URL, '', 'no-cors', 'include');
        audio_test(f, LOCAL_URL, 'anonymous', 'cors', 'same-origin');
        audio_test(f, LOCAL_URL, 'use-credentials', 'cors', 'include');
        audio_test(f, REMOTE_URL, '', 'no-cors', 'include');
        audio_test(f, REMOTE_URL, 'anonymous', 'cors', 'same-origin');
        audio_test(f, REMOTE_URL, 'use-credentials', 'cors', 'include');
      })
      .catch(unreached_rejection(t));
  }, 'Verify FetchEvent for resources.');
</script>
