<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="test-helpers.sub.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<body>
<script>
var host_info = get_host_info();

function send_result(result) {
  window.parent.postMessage({message: result},
                            host_info['HTTPS_ORIGIN']);
}

function executeTask(params) {
  // Execute task for each parameter
  if (params.has('register')) {
    var worker_url = decodeURIComponent(params.get('register'));
    var scope = decodeURIComponent(params.get('scope'));
    navigator.serviceWorker.register(worker_url, {scope: scope})
      .then(r => send_result('registered'));
  } else if (params.has('redirected')) {
    send_result('redirected');
  } else if (params.has('update')) {
    var scope = decodeURIComponent(params.get('update'));
    navigator.serviceWorker.getRegistration(scope)
      .then(r => r.update())
      .then(() => send_result('updated'));
  } else if (params.has('unregister')) {
    var scope = decodeURIComponent(params.get('unregister'));
    navigator.serviceWorker.getRegistration(scope)
      .then(r => r.unregister())
      .then(succeeded => {
          if (succeeded) {
            send_result('unregistered');
          } else {
            send_result('failure: unregister');
          }
        });
  } else {
    send_result('unknown parameter: ' + params.toString());
  }
}

var params = new URLSearchParams(location.search.slice(1));
executeTask(params);
</script>
</body>
