Raw File
register-link-header.https.html
<!DOCTYPE html>
<title>Service Worker: Registration using Link header</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>
function get_newest_worker(registration) {
  if (registration.installing)
    return registration.installing;
  if (registration.waiting)
    return registration.waiting;
  if (registration.active)
    return registration.active;
}

promise_test(function(t) {
    var scope = normalizeURL('resources/blank.html?fetch');
    var header = '<empty-worker.js>; rel=serviceworker; scope="' + scope + '"';
    var resource = 'resources/link-header.py?Link=' +
        encodeURIComponent(header);
    return with_iframe(scope)
      .then(frame =>
          Promise.all([frame.contentWindow.navigator.serviceWorker.ready,
                      fetch(resource)]))
      .then(([registration, response]) => {
          assert_equals(registration.scope, scope);
          assert_equals(get_newest_worker(registration).scriptURL,
                        normalizeURL('resources/empty-worker.js'));
          return registration.unregister();
        });
  }, 'fetch can trigger service worker installation');

promise_test(function(t) {
    var scope = normalizeURL('resources/blank.html?iframe');
    var header = '<empty-worker.js>; rel=serviceworker; scope="' + scope + '"';
    var resource = 'resources/link-header.py?Link=' +
        encodeURIComponent(header);
    return with_iframe(scope)
      .then(frame =>
          Promise.all([frame.contentWindow.navigator.serviceWorker.ready,
                       with_iframe(resource)]))
      .then(([registration, frame]) => {
          assert_equals(registration.scope, scope);
          assert_equals(get_newest_worker(registration).scriptURL,
                        normalizeURL('resources/empty-worker.js'));
          return registration.unregister();
        });
  }, 'An iframe can trigger service worker installation');

promise_test(function(t) {
    var scope = normalizeURL('resources/blank.html?css');
    var header = '<empty-worker.js>; rel=serviceworker; scope="' + scope + '"';
    var resource = 'resources/link-header.py?Link=' +
        encodeURIComponent(header);
    return with_iframe(scope)
      .then(frame => {
          var link = document.createElement('link');
          link.setAttribute('rel', 'stylesheet');
          link.setAttribute('type', 'text/css');
          link.setAttribute('href', resource);
          document.getElementsByTagName('head')[0].appendChild(link);
          return frame.contentWindow.navigator.serviceWorker.ready;
        })
      .then(registration => {
          assert_equals(registration.scope, scope);
          assert_equals(get_newest_worker(registration).scriptURL,
                        normalizeURL('resources/empty-worker.js'));
          return registration.unregister();
        });
  }, 'A stylesheet can trigger service worker installation');

</script>
back to top