<!DOCTYPE html>
<title>Service Worker: registration events</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
promise_test(function(t) {
  var script = 'resources/empty-worker.js';
  var scope = 'resources/blank.html';
  var registration;

  return service_worker_unregister_and_register(t, script, scope)
    .then(function(registration) {
        t.add_cleanup(function() {
            return service_worker_unregister(t, scope);
          });

        var sw = registration.installing;

        return new Promise(t.step_func(function(resolve) {
          sw.onstatechange = t.step_func(function() {
            if (sw.state === 'installed') {
              assert_equals(registration.active, null,
                            'installed event should be fired before activating service worker');
              resolve();
            }
          });
        }));
      })
    .catch(unreached_rejection(t));
  }, 'installed event should be fired before activating service worker');

</script>
