blob: cd48b934c8ffee8c76aa791539bf05e69d046582 [file] [log] [blame]
<html>
<body>
<p>Test that upload progress events are not dispatched for simple cross-origin requests
(i.e. if the listener is set after calling send(), and there are no other reasons to make a preflight request).</p>
<pre id="console"></pre>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function log(message)
{
document.getElementById('console').appendChild(document.createTextNode(message + '\n'));
}
var sawProgress;
var sawUploadProgress;
function progress(evt)
{
if (!sawProgress)
log("onprogress");
sawProgress = true;
}
function uploadProgress(evt)
{
if (!sawUploadProgress)
log("upload.onprogress");
sawUploadProgress = true;
}
// Build a long string.
var stringToSend = "a";
for (var i = 0; i < 23; ++i)
stringToSend += stringToSend;
function test1()
{
sawProgress = false;
sawUploadProgress = false;
log("Test 1: The URL is allowed for cross-origin requests");
var xhr = new XMLHttpRequest();
xhr.onprogress = progress;
xhr.open("POST", "http://localhost:8000/xmlhttprequest/resources/cross-site-progress-events.cgi?allow", true);
xhr.setRequestHeader("Content-Type", "text/plain");
xhr.send(stringToSend);
xhr.upload.onloadstart = function() { log("FAIL: upload.onloadstart") }
xhr.upload.onprogress = uploadProgress;
xhr.upload.onload = function() { log("FAIL: upload.onload") }
xhr.upload.onerror = function() { log("FAIL: upload.onerror") }
xhr.onerror = function() { log("onerror") }
xhr.onload = function() {
log("onload");
log("Response length: " + xhr.responseText.length);
test2();
}
}
function test2()
{
sawProgress = false;
sawUploadProgress = false;
log("\nTest 2: The URL is not allowed for cross-origin requests");
var xhr = new XMLHttpRequest();
xhr.onprogress = progress;
xhr.open("POST", "http://localhost:8000/xmlhttprequest/resources/cross-site-progress-events.cgi", true);
xhr.setRequestHeader("Content-Type", "text/plain");
xhr.send(stringToSend);
xhr.upload.onloadstart = function() { log("FAIL: upload.onloadstart") }
xhr.upload.onprogress = uploadProgress;
xhr.upload.onload = function() { log("FAIL: upload.onload") }
xhr.upload.onerror = function() { log("FAIL: upload.onerror") }
xhr.onerror = function() {
log("onerror (expected)");
log("Response length: " + xhr.responseText.length);
test3();
}
xhr.onload = function() {
log("onload");
}
}
function test3()
{
sawProgress = false;
sawUploadProgress = false;
log("\nTest 3: The URL is not allowed for cross-origin requests and at least one upload event is listened for before doing the send.");
var xhr = new XMLHttpRequest();
xhr.onprogress = progress;
xhr.open("POST", "http://localhost:8000/xmlhttprequest/resources/cross-site-progress-events.cgi", true);
xhr.setRequestHeader("Content-Type", "text/plain");
xhr.upload.onloadstart = function() { log("upload.onloadstart") }
xhr.send(stringToSend);
xhr.upload.onprogress = uploadProgress;
xhr.upload.onload = function() { log("FAIL: upload.onload") }
xhr.upload.onerror = function() {
log("upload.onerror (expected)")
}
xhr.onerror = function() {
log("onerror (expected)");
log("Response length: " + xhr.responseText.length);
if (window.testRunner)
testRunner.notifyDone();
}
xhr.onload = function() {
log("onload");
}
}
test1();
</script>
</body>
</html>