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>