tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

unregister-immediately-during-extendable-events.https.html (1941B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>Use Clear-Site-Data to immediately unregister service workers</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="resources/test-helpers.sub.js"></script>
      7 <script src="resources/unregister-immediately-helpers.js"></script>
      8 <body>
      9 <script>
     10 'use strict';
     11 
     12 // These tests use the Clear-Site-Data network response header to immediately
     13 // unregister a service worker registration with a worker that has pending
     14 // extendable events.  Clear-Site-Data must delete the registration,
     15 // abort all pending extendable events and then clear the registration by
     16 // setting the worker's state to 'redundant'
     17 
     18 promise_test(async test => {
     19  // Use a service worker script that can produce fetch events with pending
     20  // respondWith() promises that never resolve.
     21  const script_url = 'resources/onfetch-waituntil-forever.js';
     22  const scope_url =
     23    'resources/blank.html?unregister-immediately-with-fetch-event';
     24 
     25  const registration = await service_worker_unregister_and_register(
     26    test, script_url, scope_url);
     27 
     28  await wait_for_state(test, registration.installing, 'activated');
     29 
     30  const frame = await add_controlled_iframe(test, scope_url);
     31 
     32  // Clear-Site-Data must cause the pending fetch promise to reject.
     33  const fetch_promise = promise_rejects_js(
     34    test, TypeError, frame.contentWindow.fetch('waituntil-forever'));
     35 
     36  const event_watcher = new EventWatcher(
     37    test, frame.contentWindow.navigator.serviceWorker, 'controllerchange');
     38 
     39  await Promise.all([
     40    clear_site_data(),
     41    fetch_promise,
     42    event_watcher.wait_for('controllerchange'),
     43    wait_for_state(test, registration.active, 'redundant'),]);
     44 
     45  assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null);
     46  await assert_no_registrations_exist();
     47 }, 'Clear-Site-Data must fail pending subresource fetch events.');
     48 
     49 </script>
     50 </body>