--- /dev/null
+<html>
+<body>
+<p>Tests for <a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=8210"> bug 8210</a> -
+Conditional XMLHttpRequest gets should pass 304 responses unchanged.</p>
+<script>
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.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 = 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.layoutTestController)
+ layoutTestController.notifyDone();
+ }
+ }
+ }
+</script>
+</body>
+</html>