tor-browser

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

content-index.https.html (5337B)


      1 <!DOCTYPE html>
      2 <title>Test Content Index API</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/resources/testdriver.js"></script>
      6 <script src="/resources/testdriver-vendor.js"></script>
      7 <script src="/common/utils.js"></script>
      8 <script src="/common/dispatcher/dispatcher.js"></script>
      9 <script src="resources/utils.js"></script>
     10 
     11 <body>
     12 <script>
     13 const id = 'fenced-frame-id';
     14 
     15 promise_test(async () => {
     16  const frame = attachFencedFrameContext();
     17  try {
     18    await frame.execute(async (id) => {
     19      navigator.serviceWorker.register(
     20        "empty-worker.js", { scope: location.href });
     21      const registration = await navigator.serviceWorker.ready;
     22      return registration.index.add({
     23        id,
     24        title: 'same title',
     25        description: 'same description',
     26        url: 'resources/'
     27      });
     28    }, [id]);
     29    assert_unreached('index.add executed without error; want error');
     30  } catch(e) {
     31    assert_equals(e.message, "Failed to execute 'add' on 'ContentIndex': " +
     32    "ContentIndex is not allowed in fenced frames.")
     33  }
     34 }, 'index.add should fail inside a fenced frame');
     35 
     36 promise_test(async () => {
     37  const frame = attachFencedFrameContext();
     38  try {
     39    await frame.execute(async (id) => {
     40      navigator.serviceWorker.register(
     41        "empty-worker.js", { scope: location.href });
     42      const registration = await navigator.serviceWorker.ready;
     43      return registration.index.delete(id);
     44    }, [id]);
     45    assert_unreached('index.delete executed without error; want error');
     46  } catch(e) {
     47    assert_equals(e.message, "Failed to execute 'delete' on 'ContentIndex': " + "ContentIndex is not allowed in fenced frames.");
     48  }
     49 }, 'index.delete should fail inside a fenced frame');
     50 
     51 promise_test(async () => {
     52  const frame = attachFencedFrameContext();
     53  try {
     54    await frame.execute(async () => {
     55      navigator.serviceWorker.register(
     56        "empty-worker.js", { scope: location.href });
     57      const registration = await navigator.serviceWorker.ready;
     58      return registration.index.getAll();
     59    });
     60    assert_unreached('index.getAll executed without error; want error');
     61  } catch(e) {
     62    assert_equals(e.message, "Failed to execute 'getAll' on 'ContentIndex': " + "ContentIndex is not allowed in fenced frames.");
     63  }
     64 }, 'index.getAll should fail inside a fenced frame');
     65 
     66 promise_test(async () => {
     67  const frame = attachFencedFrameContext();
     68  const message = await frame.execute(async () => {
     69    const getController = () => {
     70      if (navigator.serviceWorker.controller) {
     71        return navigator.serviceWorker.controller;
     72      }
     73      return new Promise(resolve => {
     74        navigator.serviceWorker.addEventListener('controllerchange', () => {
     75          resolve(navigator.serviceWorker.controller);
     76        });
     77      });
     78    };
     79 
     80    navigator.serviceWorker.register(
     81      "content-index-sw.js", { scope: location.href });
     82    return new Promise(async resolve => {
     83      const ctrl = await getController();
     84      ctrl.postMessage('add');
     85      navigator.serviceWorker.onmessage = e => {
     86        resolve(e.data);
     87      }
     88    });
     89  });
     90  assert_equals(message, "Failed to execute 'add' on 'ContentIndex': " +
     91    "ContentIndex is not allowed in fenced frames.");
     92 }, 'index.add should fail from the service worker inside a fenced frame');
     93 
     94 promise_test(async () => {
     95  const frame = attachFencedFrameContext();
     96  const message = await frame.execute(async () => {
     97    const getController = () => {
     98      if (navigator.serviceWorker.controller) {
     99        return navigator.serviceWorker.controller;
    100      }
    101      return new Promise(resolve => {
    102        navigator.serviceWorker.addEventListener('controllerchange', () => {
    103          resolve(navigator.serviceWorker.controller);
    104        });
    105      });
    106    };
    107 
    108    navigator.serviceWorker.register(
    109      "content-index-sw.js", { scope: location.href });
    110    return new Promise(async resolve => {
    111      const ctrl = await getController();
    112      ctrl.postMessage('delete');
    113      navigator.serviceWorker.onmessage = e => {
    114        resolve(e.data);
    115      }
    116    });
    117  });
    118  assert_equals(message, "Failed to execute 'delete' on 'ContentIndex': " +
    119    "ContentIndex is not allowed in fenced frames.");
    120 }, 'index.delete should fail from the service worker inside a fenced frame');
    121 
    122 promise_test(async () => {
    123  const frame = attachFencedFrameContext();
    124  const message = await frame.execute(async () => {
    125    const getController = () => {
    126      if (navigator.serviceWorker.controller) {
    127        return navigator.serviceWorker.controller;
    128      }
    129      return new Promise(resolve => {
    130        navigator.serviceWorker.addEventListener('controllerchange', () => {
    131          resolve(navigator.serviceWorker.controller);
    132        });
    133      });
    134    };
    135 
    136    navigator.serviceWorker.register(
    137      "content-index-sw.js", { scope: location.href });
    138    return new Promise(async resolve => {
    139      const ctrl = await getController();
    140      ctrl.postMessage('getAll');
    141      navigator.serviceWorker.onmessage = e => {
    142        resolve(e.data);
    143      }
    144    });
    145  });
    146  assert_equals(message, "Failed to execute 'getAll' on 'ContentIndex': " +
    147    "ContentIndex is not allowed in fenced frames.");
    148 }, 'index.getAll should fail from the service worker inside a fenced frame');
    149 </script>
    150 </body>