| <html> |
| <body> |
| <p>Tests for <a href="https://bugs.webkit.org/show_bug.cgi?id=8210"> bug 8210</a> - |
| Conditional XMLHttpRequest gets should pass 304 responses unchanged.</p> |
| <script> |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| var console_messages = document.createElement("ul"); |
| document.body.appendChild(console_messages); |
| |
| function log(message) |
| { |
| var item = document.createElement("li"); |
| item.appendChild(document.createTextNode(message)); |
| console_messages.appendChild(item); |
| } |
| |
| // sync |
| req = new XMLHttpRequest; |
| req.open("GET", "resources/reply.xml", false); |
| log("Fetching the resource once to cache the response..."); |
| req.send(null); |
| lastModified = req.getResponseHeader("Last-Modified"); |
| eTag = req.getResponseHeader("ETag"); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.send(null); |
| if (req.responseText == '<?xml version="1.0" encoding="windows-1251"?>\n<node>Проверка</node>\n') |
| log("Automatically cached response body is correct; status = " + req.status); |
| else |
| log("Automatically cached response body is different from the expected one; status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Modified-Since", lastModified); |
| req.send(null); |
| log("If-Modified-Since override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-MODIFIED-Since", lastModified); |
| req.send(null); |
| log("If-MODIFIED-Since override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Modified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| log("If-Modified-Since override (modified): status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Unmodified-Since", lastModified); |
| req.send(null); |
| log("If-Unmodified-Since override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Unmodified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| log("If-Unmodified-Since override (modified): status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Match", eTag); |
| req.send(null); |
| log("If-Match override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Match", "xyzzy"); |
| req.send(null); |
| log("If-Match override (none match): status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-None-Match", eTag); |
| req.send(null); |
| log("If-None-Match override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-None-Match", "xyzzy"); |
| req.send(null); |
| log("If-None-Match override (none match): status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Range", eTag); |
| req.setRequestHeader("Range", "bytes=52-60"); |
| req.send(null); |
| log("If-Range override: status = " + req.status); |
| |
| req.open("GET", "resources/reply.xml", false); |
| req.setRequestHeader("If-Range", "xyzzy"); |
| req.setRequestHeader("Range", "bytes=52-60"); |
| req.send(null); |
| log("If-Range override (none match): status = " + req.status); |
| |
| req.open("GET", "resources/304.pl", false); |
| req.setRequestHeader("If-Modified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| log("If-Modified-Since override (uncached response): status = " + req.status); |
| |
| // async |
| var asyncStep = 1; |
| |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.send(null); |
| |
| function processStateChange() { |
| |
| if (req.readyState == 4){ |
| if (asyncStep == 1) { |
| asyncStep = 2; |
| if (req.responseText == '<?xml version="1.0" encoding="windows-1251"?>\n<node>Проверка</node>\n') |
| log("async: Automatically cached response body is correct; status = " + req.status); |
| else |
| log("async: Automatically cached response body is different from the expected one; status = " + req.status + "; req.responseText='" + req.responseText + "' (expected '<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n<node>Проверка</node>\n')"); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Modified-Since", lastModified); |
| req.send(null); |
| } else if (asyncStep == 2) { |
| asyncStep = 3; |
| log("async: If-Modified-Since override: status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Modified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| } else if (asyncStep == 3) { |
| asyncStep = 4; |
| log("async: If-Modified-Since override (modified): status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Unmodified-Since", lastModified); |
| req.send(null); |
| } else if (asyncStep == 4) { |
| asyncStep = 5; |
| log("async: If-Unmodified-Since override: status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Unmodified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| } else if (asyncStep == 5) { |
| asyncStep = 6; |
| log("async: If-Unmodified-Since override (modified): status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Match", eTag); |
| req.send(null); |
| } else if (asyncStep == 6) { |
| asyncStep = 7; |
| log("async: If-Match override: status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Match", "xyzzy"); |
| req.send(null); |
| } else if (asyncStep == 7) { |
| asyncStep = 8; |
| log("async: If-Match override (none match): status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-None-Match", eTag); |
| req.send(null); |
| } else if (asyncStep == 8) { |
| asyncStep = 9; |
| log("async: If-None-Match override: status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-None-Match", "xyzzy"); |
| req.send(null); |
| } else if (asyncStep == 9) { |
| asyncStep = 10; |
| log("async: If-None-Match override (none match): status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Range", eTag); |
| req.setRequestHeader("Range", "bytes=52-59"); |
| req.send(null); |
| } else if (asyncStep == 10) { |
| asyncStep = 11; |
| log("async: If-Range override: status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/reply.xml", true); |
| req.setRequestHeader("If-Range", "xyzzy"); |
| req.setRequestHeader("Range", "bytes=52-59"); |
| req.send(null); |
| } else if (asyncStep == 11) { |
| asyncStep = 12; |
| log("async: If-Range override (none match): status = " + req.status); |
| |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = processStateChange; |
| req.open("GET", "resources/304.pl", true); |
| req.setRequestHeader("If-Modified-Since", "Tue, 01 Jan 1980 01:00:00 GMT"); |
| req.send(null); |
| } else if (asyncStep == 12) { |
| log("async: If-Modified-Since override (uncached response): status = " + req.status); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| } |
| } |
| </script> |
| </body> |
| </html> |