tor-browser

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

onselectionchange-on-document.html (2795B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <link rel="help" href="https://w3c.github.io/selection-api/#selectionchange-event">
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <body>
      7 <div id="container"><br><br></div>
      8 <script>
      9 
     10 promise_test(() => {
     11  return new Promise(resolve => {
     12    let didFireSelectionChangeEvent = false;
     13    document.addEventListener("selectionchange", () => { didFireSelectionChangeEvent = true; resolve(); }, {once: true});
     14    getSelection().setPosition(container, 1);
     15    assert_false(didFireSelectionChangeEvent);
     16  });
     17 }, "selectionchange event on document fires");
     18 
     19 promise_test(() => {
     20  return (async function() {
     21    let selectionChangeCount = 0;
     22    document.addEventListener("selectionchange", () => ++selectionChangeCount);
     23    container.innerHTML = '<span><br></span><span><br></span>';
     24    getSelection().setPosition(container, 1);
     25    assert_equals(selectionChangeCount, 0);
     26    getSelection().setPosition(container, 2);
     27    assert_equals(selectionChangeCount, 0);
     28    await new Promise(setTimeout);
     29    assert_equals(selectionChangeCount, 1);
     30  })();
     31 }, "selectionchange event on document fires once");
     32 
     33 promise_test(() => {
     34  return (async function() {
     35    let selectionChangeCount = 0;
     36    document.addEventListener("selectionchange", () => ++selectionChangeCount);
     37    container.innerHTML = '<span><br></span><span><br></span>';
     38    getSelection().setPosition(container, 1);
     39    assert_equals(selectionChangeCount, 0);
     40    getSelection().setPosition(container, 2);
     41    assert_equals(selectionChangeCount, 0);
     42    await new Promise(setTimeout);
     43    assert_equals(selectionChangeCount, 1);
     44    getSelection().setPosition(container, 0);
     45    assert_equals(selectionChangeCount, 1);
     46    getSelection().setPosition(container, 2);
     47    assert_equals(selectionChangeCount, 1);
     48    await new Promise(setTimeout);
     49    assert_equals(selectionChangeCount, 2);
     50  })();
     51 }, "task to fire selectionchange event gets queued each time selection is mutated");
     52 
     53 promise_test(() => {
     54  return (async function() {
     55    let selectionChangeCount = 0;
     56    document.addEventListener("selectionchange", () => {
     57      if (!selectionChangeCount) {
     58        getSelection().setPosition(container, 2);
     59        getSelection().setPosition(container, 0);
     60      }
     61      ++selectionChangeCount;
     62    });
     63    container.innerHTML = '<b><br></b><b><br></b>';
     64    getSelection().setPosition(container, 1);
     65    assert_equals(selectionChangeCount, 0);
     66    await new Promise(setTimeout);
     67    assert_equals(selectionChangeCount, 1);
     68    await new Promise(setTimeout);
     69    assert_equals(selectionChangeCount, 2);
     70  })();
     71 }, "has scheduled selectionchange event is set to false at the beginning of a task to fire selectionchange event");
     72 
     73 </script>