<!DOCTYPE html>
<title>ServiceWorker: navigator.serviceWorker.active</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';

// "active" 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});
  await wait_for_state(t, registration.installing, 'activating');
  const container = frame.contentWindow.navigator.serviceWorker;
  assert_equals(container.controller, null, 'controller');
  assert_equals(registration.active.state, 'activating',
                'registration.active');
  assert_equals(registration.waiting, null, 'registration.waiting');
  assert_equals(registration.installing, null, 'registration.installing');

  // FIXME: Add a test for a frame created after installation.
  // Should the existing frame ("frame") block activation?
}, 'active is set');

// Tests that the ServiceWorker objects returned from active 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.active, registration2.active,
                'ServiceWorkerRegistration.active should return the same ' +
                'object');
  await registration1.unregister();
}, 'The ServiceWorker objects returned from active attribute getter that ' +
   'represent the same service worker are the same objects');
</script>
