tor-browser

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

controller-on-reload.https.html (2086B)


      1 <!DOCTYPE html>
      2 <title>Service Worker: Controller on reload</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="resources/test-helpers.sub.js"></script>
      6 <body>
      7 <script>
      8 promise_test(function(t) {
      9    const iframe_scope = 'blank.html';
     10    const scope = 'resources/' + iframe_scope;
     11    var frame;
     12    var registration;
     13    var controller;
     14    return service_worker_unregister(t, scope)
     15      .then(function() {
     16          t.add_cleanup(function() {
     17              return service_worker_unregister(t, scope);
     18            });
     19 
     20          return with_iframe(scope);
     21        })
     22      .then(function(f) {
     23          frame = f;
     24          return frame.contentWindow.navigator.serviceWorker.register(
     25              'empty-worker.js', {scope: iframe_scope});
     26        })
     27      .then(function(swr) {
     28          registration = swr;
     29          return wait_for_state(t, registration.installing, 'activated');
     30        })
     31      .then(function() {
     32          var w = frame.contentWindow;
     33          assert_equals(w.navigator.serviceWorker.controller, null,
     34                        'controller should be null until the document is ' +
     35                        'reloaded');
     36          return new Promise(function(resolve) {
     37              frame.onload = function() { resolve(); }
     38              w.location.reload();
     39            });
     40        })
     41      .then(function() {
     42          var w = frame.contentWindow;
     43          controller = w.navigator.serviceWorker.controller;
     44          assert_true(controller instanceof w.ServiceWorker,
     45                      'controller should be a ServiceWorker object upon reload');
     46 
     47          // objects from separate windows should not be equal
     48          assert_not_equals(controller, registration.active);
     49 
     50          return w.navigator.serviceWorker.getRegistration(iframe_scope);
     51        })
     52      .then(function(frameRegistration) {
     53          assert_equals(frameRegistration.active, controller);
     54          frame.remove();
     55        });
     56  }, 'controller is set upon reload after registration');
     57 </script>
     58 </body>