Home | History | Annotate | Download | only in Interactive
      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4 <script src="../../LayoutTests/editing/editing.js"></script>
      5 <script src="../../LayoutTests/editing/spelling/resources/util.js"></script>
      6 <script src="../resources/runner.js"></script>
      7 </head>
      8 <body onload="start()">
      9 <textarea style="border:2px solid red;" id="huge_text">
     10 </textarea><br/>
     11 <textarea id="destination">
     12 </textarea>
     13 <p id="helper" contenteditable spellcheck="false"></p>
     14 <script>
     15 var srcNode = null;
     16 var dstNode = null;
     17 var auxNode = null;
     18 var startTime = 0;
     19 
     20 function start()
     21 {
     22     if (window.internals) {
     23         internals.settings.setUnifiedTextCheckerEnabled(true);
     24         internals.settings.setAsynchronousSpellCheckingEnabled(true);
     25         internals.setContinuousSpellCheckingEnabled(true);
     26         internals.settings.setJavaScriptCanAccessClipboard(true);
     27         internals.settings.setDOMPasteAllowed(true);
     28     }
     29     
     30     var testText = "";
     31     for (var i = 0; i < 260; i++)
     32         testText += "zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz zz.\n";
     33 
     34     srcNode = document.getElementById('huge_text');
     35     srcNode.innerText = testText;
     36 
     37     PerfTestRunner.prepareToMeasureValuesAsync({ unit: "ms", done:done });
     38 
     39     test();
     40 }
     41 
     42 function test()
     43 {
     44     startTime = PerfTestRunner.now();
     45     stepSelectAllInSrc();
     46 }
     47 
     48 function stepSelectAllInSrc()
     49 {
     50     srcNode.focus();
     51     document.execCommand('SelectAll');
     52     waitUntilSelectedAndSpellchecked();
     53 }
     54 
     55 function waitUntilSelectedAndSpellchecked()
     56 {
     57     if (!window.getSelection().toString().length) {
     58         setTimeout(waitUntilSelectedAndSpellchecked, 0);
     59         return;
     60     } else {
     61         if (window.internals) {
     62             if (!internals.markerCountForNode(findFirstTextNode(srcNode), "spelling")) {
     63                 setTimeout(waitUntilSelectedAndSpellchecked, 0);
     64                 return;
     65             }
     66         }
     67     }
     68     document.execCommand("Copy");
     69     stepHelper();
     70 }
     71 
     72 function stepHelper()
     73 {
     74     auxNode = document.getElementById('helper');
     75     var textToType = 'good';
     76     typeText(auxNode, textToType);
     77     var textNode = findFirstTextNode(auxNode);
     78     if (!textNode || textNode.textContent != textToType) {
     79         setTimeout(stepHelper, 0);
     80         return;
     81     }
     82     stepPaste();
     83 }
     84 
     85 function stepPaste()
     86 {
     87     dstNode = document.getElementById('destination');
     88     dstNode.focus();
     89     document.execCommand("Paste");
     90     check();
     91 }
     92 
     93 function check()
     94 {
     95     if (window.internals) {
     96         if (!internals.markerCountForNode(findFirstTextNode(dstNode), "spelling")) {
     97             setTimeout(check, 0);
     98             return;
     99         }
    100     } else {
    101         if (dstNode.scrollTop > 0) {
    102             dstNode.scrollTop = dstNode.scrollTop - 1;
    103             setTimeout(check, 0);
    104             return;
    105         }
    106     }
    107 
    108     PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime);
    109     PerfTestRunner.gc();
    110     dstNode.innerText = "";
    111     auxNode.innerText = "";
    112     setTimeout(test, 0);
    113 }
    114 
    115 function done()
    116 {
    117     srcNode.innerText = "";
    118     dstNode.innerText = "";
    119     auxNode.innerText = "";
    120 }
    121 
    122 </script>
    123 </body>
    124 </html>
    125