1<html>
2<!--
3This 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.
4However, this test case can work only when customHTMLTokenizerChunkSize() is equal to or smaller than 256. To reproduce the problem with other settings, try
5adding more tags into body.
6
7To 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>
10var showingAlert = false;
11
12function log(message, replace)
13{
14    if (replace)
15        document.getElementById("result").innerHTML = message;
16    else
17        document.getElementById("result").innerHTML += "<br>" + message;
18}
19
20function 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.
28function 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}
36function 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.
46function 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>
60insertScript();
61</script>
62
63<!-- Time consuming job to make HTML parser run over chunk time limit -->
64<script>
65logTime();
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>
73logTime();
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>
81check();
82</script>
83
84
85
86</body>
87</html>