tor-browser

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

move-selection-range-into-different-root.tentative.html (2592B)


      1 <!doctype html>
      2 <html>
      3 <head>
      4 <meta charset="utf-8">
      5 <title>Updating selection range to outside of scope of the selection should cause the range removed from the selection</title>
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script>
      9 "use strict";
     10 
     11 const ArgTypeNodeAndOffset = 0;
     12 const ArgTypeNode = 1;
     13 
     14 const rangeMethods = [
     15  { name: "selectNode", type: ArgTypeNode },
     16  { name: "selectNodeContents", type: ArgTypeNode },
     17  { name: "setEnd", type: ArgTypeNodeAndOffset },
     18  { name: "setEndAfter", type: ArgTypeNode },
     19  { name: "setEndBefore", type: ArgTypeNode },
     20  { name: "setStart", type: ArgTypeNodeAndOffset },
     21  { name: "setStartAfter", type: ArgTypeNode },
     22  { name: "setStartBefore", type: ArgTypeNode },
     23 ];
     24 
     25 function execute(range, rangeMethod, node, offset) {
     26  switch (rangeMethod.type) {
     27    case ArgTypeNodeAndOffset:
     28      range[rangeMethod.name](node, offset);
     29      break;
     30    case ArgTypeNode:
     31      range[rangeMethod.name](node);
     32      break;
     33    default:
     34      throw new Error("Unexpected arg type is set");
     35  }
     36 }
     37 
     38 addEventListener("load", () => {
     39  function selectDiv() {
     40    getSelection().removeAllRanges();
     41    const range = document.createRange();
     42    range.selectNodeContents(document.getElementById("rangeContainer"));
     43    getSelection().addRange(range);
     44  }
     45  function createDocumentFragment() {
     46    const fragment = document.createDocumentFragment();
     47    const div = document.createElement("div");
     48    div.id = "rangeContainer";
     49    div.innerHTML = "<br>";
     50    fragment.appendChild(div);
     51    return fragment;
     52  }
     53  for (const rangeMethod of rangeMethods) {
     54    test(() => {
     55      selectDiv();
     56      const fragment = createDocumentFragment();
     57      execute(
     58        getSelection().getRangeAt(0),
     59        rangeMethod,
     60        fragment.getElementById("rangeContainer"),
     61        0
     62      );
     63      assert_equals(
     64        getSelection().rangeCount,
     65        0
     66      );
     67    }, `Set selection range into a document fragment with ${rangeMethod.name}`);
     68    test(() => {
     69      selectDiv();
     70      const div = document.querySelector("iframe").contentDocument.getElementById("rangeContainer");
     71      execute(
     72        getSelection().getRangeAt(0),
     73        rangeMethod,
     74        div,
     75        0
     76      );
     77      assert_equals(
     78        getSelection().rangeCount,
     79        0
     80      );
     81    }, `Set selection range into a sub-document with ${rangeMethod.name}`);
     82  }
     83 }, {once: true});
     84 </script>
     85 </head>
     86 <body>
     87 <div id="rangeContainer"><br></div>
     88 <iframe srcdoc="<div id='rangeContainer'><br></div>"></iframe>
     89 </body>
     90 </html>