https://github.com/web-platform-tests/wpt
Raw File
Tip revision: 7b89105f042755ba3ef1c346cba087cfb758d0d6 authored by Luke Bjerring on 23 March 2018, 17:36:39 UTC
Support partial dictionaries
Tip revision: 7b89105
claim-fetch.https.html
<!doctype html>
<meta charset=utf-8>
<title></title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>

promise_test(function(t) {
  var frame;
  var resource = 'simple.txt';

  var worker;
  var scope = 'resources/';
  var script = 'resources/claim-worker.js';

  return Promise.resolve()
    // Create the test iframe.
    .then(() => with_iframe('resources/blank.html'))
    .then(f => frame = f)

    // Check the controller and test with fetch.
    .then(() => assert_equals(frame.contentWindow.navigator.controller,
                              undefined,
                              'Should have no controller.'))
    .then(() => frame.contentWindow.fetch(resource))
    .then(response => response.text())
    .then(response_text => assert_equals(response_text,
                                         'a simple text file\n',
                                         'fetch() should not be intercepted.'))

    // Register a service worker.
    .then(() => service_worker_unregister_and_register(t, script, scope))
    .then(r => worker = r.installing)
    .then(() => wait_for_state(t, worker, 'activated'))

    // Let the service worker claim the iframe.
    .then(() => {
      var channel = new MessageChannel();
      var saw_message = new Promise(function(resolve) {
        channel.port1.onmessage = t.step_func(function(e) {
          assert_equals(e.data, 'PASS',
                        'Worker call to claim() should fulfill.');
          resolve();
        });
      });
      worker.postMessage({port: channel.port2}, [channel.port2]);
      return saw_message;
    })

    // Check the controller and test with fetch.
    .then(() => frame.contentWindow.navigator.serviceWorker.getRegistration(scope))
    .then(r => assert_equals(frame.contentWindow.navigator.serviceWorker.controller,
                             r.active,
                             'Test iframe should be claimed.'))
    .then(() => frame.contentWindow.fetch(resource))
    .then(response => response.text())
    .then(response_text => assert_equals(response_text,
                                         'Intercepted!',
                                         'fetch() should be intercepted.'))

    // Cleanup this testcase.
    .then(() => frame.remove())
    .then(() => service_worker_unregister_and_done(t, scope));
}, 'fetch() should be intercepted after the client is claimed.')

</script>
</body>
back to top