chromium/third_party/blink/web_tests/external/wpt/service-workers/service-worker/navigation-preload/resources/wait-for-activate-worker.js

// This worker remains in the installing phase so that the
// navigation preload API can be tested when there is no
// active worker.
importScripts('/resources/testharness.js');
importScripts('helpers.js');

function expect_rejection(promise) {
  return promise.then(
      () => { return Promise.reject('unexpected fulfillment'); },
      err => { assert_equals('InvalidStateError', err.name); });
}

function test_before_activation() {
  const np = self.registration.navigationPreload;
  return expect_rejection(np.enable())
      .then(() => expect_rejection(np.disable()))
      .then(() => expect_rejection(np.setHeaderValue('hi')))
      .then(() => np.getState())
      .then(state => expect_navigation_preload_state(
          state, false, 'true', 'state should be the default'))
      .then(() => 'PASS')
      .catch(err => 'FAIL: ' + err);
}

var resolve_done_promise;
var done_promise = new Promise(resolve => { resolve_done_promise = resolve; });

// Run the test once the page messages this worker.
self.addEventListener('message', e => {
    e.waitUntil(test_before_activation()
        .then(result => {
            e.source.postMessage(result);
            resolve_done_promise();
          }));
  });

// Don't become the active worker until the test is done.
self.addEventListener('install', e => {
    e.waitUntil(done_promise);
  });