tor-browser

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

test_root_element_replacement.html (4327B)


      1 <html>
      2 <head>
      3  <title>Test for root element replacement</title>
      4  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5  <script src="/tests/SimpleTest/EventUtils.js"></script>
      6  <link rel="stylesheet" type="text/css"
      7          href="/tests/SimpleTest/test.css" />
      8 </head>
      9 <body>
     10 <p id="display">
     11 </p>
     12 <div id="content" style="display: none">
     13  
     14 </div>
     15 <pre id="test">
     16 </pre>
     17 
     18 <script class="testbody" type="application/javascript">
     19 
     20 SimpleTest.waitForExplicitFinish();
     21 SimpleTest.waitForFocus(runTest);
     22 
     23 function runDesignModeTest(aDoc, aFocus, aNewSource) {
     24  aDoc.designMode = "on";
     25 
     26  if (aFocus) {
     27    aDoc.documentElement.focus();
     28  }
     29 
     30  aDoc.open();
     31  aDoc.write(aNewSource);
     32  aDoc.close();
     33  aDoc.documentElement.focus();
     34 }
     35 
     36 function runContentEditableTest(aDoc, aFocus, aNewSource) {
     37  if (aFocus) {
     38    aDoc.body.setAttribute("contenteditable", "true");
     39    aDoc.body.focus();
     40  }
     41 
     42  aDoc.open();
     43  aDoc.write(aNewSource);
     44  aDoc.close();
     45  aDoc.getElementById("focus").focus();
     46 }
     47 
     48 var gTestIndex = 0;
     49 
     50 const kTests = [
     51  { description: "Replace to '<body></body>', designMode",
     52    initializer: runDesignModeTest,
     53    args: [ "<body></body>" ] },
     54  { description: "Replace to '<html><body></body></html>', designMode",
     55    initializer: runDesignModeTest,
     56    args: [ "<html><body></body></html>" ] },
     57  { description: "Replace to '<html>&nbsp;<body></body></html>', designMode",
     58    initializer: runDesignModeTest,
     59    args: [ "<html> <body></body></html>" ] },
     60  { description: "Replace to '&nbsp;<html>&nbsp;<body></body></html>', designMode",
     61    initializer: runDesignModeTest,
     62    args: [ " <html> <body></body></html>" ] },
     63 
     64  { description: "Replace to '<html contenteditable='true'><body></body></html>",
     65    initializer: runContentEditableTest,
     66    args: [ "<html contenteditable='true' id='focus'><body></body></html>" ] },
     67  { description: "Replace to '<html><body contenteditable='true'></body></html>",
     68    initializer: runContentEditableTest,
     69    args: [ "<html><body contenteditable='true' id='focus'></body></html>" ] },
     70  { description: "Replace to '<body contenteditable='true'></body>",
     71    initializer: runContentEditableTest,
     72    args: [ "<body contenteditable='true' id='focus'></body>" ] },
     73 ];
     74 
     75 var gIFrame;
     76 var gSetFocusToIFrame = false;
     77 
     78 function onLoadIFrame() {
     79  var frameDoc = gIFrame.contentWindow.document;
     80 
     81  var selCon = SpecialPowers.wrap(gIFrame).contentWindow.
     82    docShell.
     83    QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor).
     84    getInterface(SpecialPowers.Ci.nsISelectionDisplay).
     85    QueryInterface(SpecialPowers.Ci.nsISelectionController);
     86  var utils = SpecialPowers.getDOMWindowUtils(window);
     87 
     88  // move focus to the HTML editor
     89  const kTest = kTests[gTestIndex];
     90  ok(true, "Running " + kTest.description);
     91  if (kTest.args.length == 1) {
     92    kTest.initializer(frameDoc, gSetFocusToIFrame, kTest.args[0]);
     93    ok(selCon.caretVisible, "caret isn't visible -- " + kTest.description);
     94  } else {
     95    ok(false, "kTests is broken at index=" + gTestIndex);
     96  }
     97 
     98  is(utils.IMEStatus, utils.IME_STATUS_ENABLED,
     99     "IME isn't enabled -- " + kTest.description);
    100  synthesizeKey("A", { }, gIFrame.contentWindow);
    101  synthesizeKey("B", { }, gIFrame.contentWindow);
    102  synthesizeKey("C", { }, gIFrame.contentWindow);
    103  var content = frameDoc.body.firstChild;
    104  ok(content, "body doesn't have contents -- " + kTest.description);
    105  if (content) {
    106    is(content.nodeType, Node.TEXT_NODE,
    107       "the content of body isn't text node -- " + kTest.description);
    108    if (content.nodeType == Node.TEXT_NODE) {
    109      is(content.data, "ABC",
    110         "the content of body text isn't 'ABC' -- " + kTest.description);
    111      is(frameDoc.body.innerHTML, "ABC",
    112         "the innerHTML of body isn't 'ABC' -- " + kTest.description);
    113    }
    114  }
    115 
    116  document.getElementById("display").removeChild(gIFrame);
    117 
    118  // Do next test or finish the tests.
    119  if (++gTestIndex < kTests.length) {
    120    setTimeout(runTest, 0);
    121  } else if (!gSetFocusToIFrame) {
    122    gSetFocusToIFrame = true;
    123    gTestIndex = 0;
    124    setTimeout(runTest, 0);
    125  } else {
    126    SimpleTest.finish();
    127  }
    128 }
    129 
    130 function runTest() {
    131  gIFrame = document.createElement("iframe");
    132  document.getElementById("display").appendChild(gIFrame);
    133  gIFrame.src = "about:blank";
    134  gIFrame.onload = onLoadIFrame;
    135 }
    136 
    137 </script>
    138 </body>
    139 
    140 </html>