Home | History | Annotate | Download | only in ManualTests
      1 <html>
      2 <!--
      3 This test case is used to prove HTMLParserScheduler should be suspended when page loading is deferred. See https://bugs.webkit.org/show_bug.cgi?id=48077.
      4 However, this test case can work only when customHTMLTokenizerChunkSize() is equal to or smaller than 256. To reproduce the problem with other settings, try
      5 adding more tags into body.
      6 
      7 To use the test case, open it in browser, when the alert shows up, wait for a few seconds, and close the alert. If it shows "Error detected", that means the problem exists.
      8 -->
      9 <script>
     10 var showingAlert = false;
     11 
     12 function log(message, replace)
     13 {
     14     if (replace)
     15         document.getElementById("result").innerHTML = message;
     16     else
     17         document.getElementById("result").innerHTML += "<br>" + message;
     18 }
     19 
     20 function showAlert()
     21 {
     22     showingAlert = true;
     23     alert("Test");
     24     showingAlert = false;
     25 }
     26 
     27 // Insert a script element so the script will be executed when the resource is loaded.
     28 function insertScript()
     29 {
     30     var head = document.getElementsByTagName("head")[0];
     31     var myScript = document.createElement('script');
     32     myScript.type = 'text/javascript';
     33     myScript.src = 'resources/bugzilla-48077.js';
     34     head.appendChild(myScript);
     35 }
     36 function check()
     37 {
     38     // Check JS re-entrancy. If showingAlert is true, we are still in showAlert().
     39     if (showingAlert)
     40         log("Error detected!", false);
     41     else
     42         log("No error detected.", false);
     43 }
     44 
     45 // Do a time consuming job so we can make HTML parser run over time limit.
     46 function logTime()
     47 {
     48     // time consuming job;
     49     var startTime = new Date();
     50     do {
     51         var currentTime = new Date();
     52         log(currentTime, true);
     53     } while (currentTime - startTime < 1000);
     54 }
     55 </script>
     56 <body>
     57 <p id="result"></p>
     58 
     59 <script>
     60 insertScript();
     61 </script>
     62 
     63 <!-- Time consuming job to make HTML parser run over chunk time limit -->
     64 <script>
     65 logTime();
     66 </script>
     67 
     68 <!-- Lots of tags to make HTML parser run over chunk size limit -->
     69 <a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
     70 
     71 <!-- Time consuming job to make HTML parser run over chunk time limit -->
     72 <script>
     73 logTime();
     74 </script>
     75 
     76 <!-- Lots of tags to make HTML parser run over chunk size limit -->
     77 <a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
     78 
     79 
     80 <script>
     81 check();
     82 </script>
     83 
     84 
     85 
     86 </body>
     87 </html>