<!DOCTYPE html>
<title>ServiceWorker: navigator.serviceWorker.installing</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>

const SCRIPT = 'resources/empty-worker.js';
const SCOPE = 'resources/blank.html';

// "installing" is set
promise_test(async t => {

  t.add_cleanup(async() => {
    if (frame)
      frame.remove();
    if (registration)
      await registration.unregister();
  });

  await service_worker_unregister(t, SCOPE);
  const frame = await with_iframe(SCOPE);
  const registration =
      await navigator.serviceWorker.register(SCRIPT, {scope: SCOPE});
  const container = frame.contentWindow.navigator.serviceWorker;
  assert_equals(container.controller, null, 'controller');
  assert_equals(registration.active, null, 'registration.active');
  assert_equals(registration.waiting, null, 'registration.waiting');
  assert_equals(registration.installing.scriptURL, normalizeURL(SCRIPT),
                'registration.installing.scriptURL');
  // FIXME: Add a test for a frame created after installation.
  // Should the existing frame ("frame") block activation?
}, 'installing is set');

// Tests that The ServiceWorker objects returned from installing attribute getter
// that represent the same service worker are the same objects.
promise_test(async t => {
  const registration1 =
      await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
  const registration2 = await navigator.serviceWorker.getRegistration(SCOPE);
  assert_equals(registration1.installing, registration2.installing,
                'ServiceWorkerRegistration.installing should return the ' +
                'same object');
  await registration1.unregister();
}, 'The ServiceWorker objects returned from installing attribute getter that ' +
   'represent the same service worker are the same objects');
</script>
