<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/test-helpers.js"></script>
<script>
async_test(function(t) {
    var scope = 'resources/scope/installing-waiting-active-after-registration';
    var worker_url = 'resources/empty-worker.js';
    var expected_url = normalizeURL(worker_url);

    service_worker_unregister_and_register(t, worker_url, scope)
      .then(function(r) {
          registration = r;
          assert_equals(registration.installing.scriptURL, expected_url,
                        'installing before updatefound');
          assert_equals(registration.waiting, null,
                        'waiting before updatefound');
          assert_equals(registration.active, null,
                        'active before updatefound');
          return wait_for_update(t, registration);
        })
      .then(function(worker) {
          assert_equals(registration.installing.scriptURL, expected_url,
                        'installing after updatefound');
          assert_equals(registration.waiting, null,
                        'waiting after updatefound');
          assert_equals(registration.active, null,
                        'active after updatefound');
          return wait_for_state(t, registration.installing, 'installed');
        })
      .then(function() {
          assert_equals(registration.installing, null,
                        'installing after installed');
          assert_equals(registration.waiting.scriptURL, expected_url,
                        'waiting after installed');
          assert_equals(registration.active, null,
                        'active after installed');
          return wait_for_state(t, registration.waiting, 'activated');
        })
      .then(function() {
          assert_equals(registration.installing, null,
                        'installing after activated');
          assert_equals(registration.waiting, null,
                        'waiting after activated');
          assert_equals(registration.active.scriptURL, expected_url,
                        'active after activated');
          return Promise.all([
              wait_for_state(t, registration.active, 'redundant'),
              registration.unregister()
            ]);
        })
      .then(function() {
          assert_equals(registration.installing, null,
                        'installing after redundant');
          assert_equals(registration.waiting, null,
                        'waiting after redundant');
          assert_equals(registration.active.scriptURL, expected_url,
                        'active after redundant');
          t.done();
        })
      .catch(unreached_rejection(t));
  }, 'installing/waiting/active after registration');
</script>
