tor-browser

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

test_unregister.html (3690B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <!DOCTYPE HTML>
      6 <html>
      7 <head>
      8  <title>Bug 984048 - Test unregister</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <p id="display"></p>
     14 <div id="content" style="display: none"></div>
     15 <pre id="test"></pre>
     16 <script class="testbody" type="text/javascript">
     17 
     18  function simpleRegister() {
     19    return navigator.serviceWorker.register("worker.js", { scope: "unregister/" }).then(function(swr) {
     20      if (swr.installing) {
     21        return new Promise(function(resolve, reject) {
     22          swr.installing.onstatechange = function(e) {
     23            if (swr.waiting) {
     24              swr.waiting.onstatechange = function(event) {
     25                if (swr.active) {
     26                  resolve();
     27                } else if (swr.waiting && swr.waiting.state == "redundant") {
     28                  reject("Should not go into redundant");
     29                }
     30              }
     31            } else {
     32              if (swr.active) {
     33                resolve();
     34              } else {
     35                reject("No waiting and no active!");
     36              }
     37            }
     38          }
     39        });
     40      } else {
     41        return Promise.reject("Installing should be non-null");
     42      }
     43    });
     44  }
     45 
     46  function testControlled() {
     47    var testPromise = new Promise(function(res, rej) {
     48      window.onmessage = function(e) {
     49        if (!("controlled" in e.data)) {
     50          ok(false, "Something went wrong.");
     51          rej();
     52          return;
     53        }
     54 
     55        ok(e.data.controlled, "New window should be controlled.");
     56        res();
     57      }
     58    })
     59 
     60    var div = document.getElementById("content");
     61    ok(div, "Parent exists");
     62 
     63    var ifr = document.createElement("iframe");
     64    ifr.setAttribute('src', "unregister/index.html");
     65    div.appendChild(ifr);
     66 
     67    return testPromise.then(function() {
     68      div.removeChild(ifr);
     69    });
     70  }
     71 
     72  async function unregister() {
     73    let reg = await navigator.serviceWorker.getRegistration("unregister/")
     74    if (!reg) {
     75      info("Registration already removed");
     76      return;
     77    }
     78 
     79    info("getRegistration() succeeded " + reg.scope);
     80    try {
     81      let v = await reg.unregister();
     82      ok(v, "Unregister should resolve to true");
     83    } catch (e) {
     84      ok(false, "Unregister failed with " + e.name);
     85    }
     86  }
     87 
     88  function testUncontrolled() {
     89    var testPromise = new Promise(function(res, rej) {
     90      window.onmessage = function(e) {
     91        if (!("controlled" in e.data)) {
     92          ok(false, "Something went wrong.");
     93          rej();
     94          return;
     95        }
     96 
     97        ok(!e.data.controlled, "New window should not be controlled.");
     98        res();
     99      }
    100    });
    101 
    102    var div = document.getElementById("content");
    103    ok(div, "Parent exists");
    104 
    105    var ifr = document.createElement("iframe");
    106    ifr.setAttribute('src', "unregister/index.html");
    107    div.appendChild(ifr);
    108 
    109    return testPromise.then(function() {
    110      div.removeChild(ifr);
    111    });
    112  }
    113 
    114  function runTest() {
    115    simpleRegister()
    116      .then(testControlled)
    117      .then(unregister)
    118      .then(testUncontrolled)
    119      .then(function() {
    120        SimpleTest.finish();
    121      }).catch(function(e) {
    122        ok(false, "Some test failed with error " + e);
    123        SimpleTest.finish();
    124      });
    125  }
    126 
    127  SimpleTest.waitForExplicitFinish();
    128  SpecialPowers.pushPrefEnv({"set": [
    129    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
    130    ["dom.serviceWorkers.enabled", true],
    131    ["dom.serviceWorkers.testing.enabled", true]
    132  ]}, runTest);
    133 </script>
    134 </pre>
    135 </body>
    136 </html>