chromium/third_party/blink/web_tests/external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/resources/registration-attribute-newer-worker.js

// TODO(nhiroki): stop using global states because service workers can be killed
// at any point. Instead, we could post a message to the page on each event via
// Client object (http://crbug.com/558244).
var results = [];

function stringify(worker) {
  return worker ? worker.scriptURL : 'empty';
}

function record(event_name) {
  results.push(event_name);
  results.push('  installing: ' + stringify(self.registration.installing));
  results.push('  waiting: ' + stringify(self.registration.waiting));
  results.push('  active: ' + stringify(self.registration.active));
}

record('evaluate');

self.registration.addEventListener('updatefound', function() {
    record('updatefound');
    var worker = self.registration.installing;
    self.registration.installing.addEventListener('statechange', function() {
        record('statechange(' + worker.state + ')');
      });
  });

self.addEventListener('install', function(e) { record('install'); });

self.addEventListener('activate', function(e) { record('activate'); });

self.addEventListener('message', function(e) {
    e.data.port.postMessage(results);
  });