tor-browser

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

serviceWorker-push.https.html (2234B)


      1 <!doctype html>
      2 <html>
      3 <head>
      4 <title>Service Worker: Push Messaging Test</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src="/resources/testdriver.js"></script>
      8 <script src="/resources/testdriver-vendor.js"></script>
      9 <script src="/common/utils.js"></script>
     10 <script src="/common/dispatcher/dispatcher.js"></script>
     11 <script src="resources/utils.js"></script>
     12 </head>
     13 <body>
     14 <script>
     15  promise_test(async () => {
     16    const frame = attachFencedFrameContext();
     17    try {
     18      await frame.execute(async () => {
     19        await navigator.serviceWorker.register(
     20          'empty-worker.js', { scope: location.href });
     21        const registration= await navigator.serviceWorker.ready;
     22        return await registration.pushManager.subscribe({
     23          userVisibleOnly: true
     24        });
     25      });
     26      assert_unreached('subscribe() executed without error; want error');
     27    } catch(e) {
     28      assert_equals(e.message,
     29        "Failed to execute 'subscribe' on 'PushManager': subscribe() is not " +
     30        "allowed in fenced frames.");
     31    }
     32  }, 'subscribe() should fail inside a fenced frame');
     33 
     34  promise_test(async () => {
     35    const frame = attachFencedFrameContext();
     36    const message = await frame.execute(async () => {
     37      const getController = () => {
     38        if (navigator.serviceWorker.controller) {
     39          return navigator.serviceWorker.controller;
     40        }
     41        return new Promise(resolve => {
     42          navigator.serviceWorker.addEventListener('controllerchange', () => {
     43            resolve(navigator.serviceWorker.controller);
     44          });
     45        });
     46      };
     47      await navigator.serviceWorker.register(
     48        'serviceWorker-push-sw.js', { scope: location.href });
     49      return new Promise(async resolve => {
     50        const ctrl = await getController();
     51        ctrl.postMessage('subscribe');
     52        navigator.serviceWorker.onmessage = e => {
     53          resolve(e.data);
     54        }
     55      });
     56    });
     57    assert_equals(message, "Failed to execute 'subscribe' on " +
     58    "'PushManager': subscribe() is not allowed in fenced frames.");
     59  }, 'subscribe() should fail from the service worker inside a fenced frame');
     60 </script>
     61 </body>
     62 </html>