<html manifest="resources/xhr-foreign-resource.manifest">
<body>
<p>Test that a resource marked as foreign can still be loaded via XHR.</p>
<p>Should say SUCCESS:</p>
<div id=result></div>
<script>
if (window.layoutTestController) {
layoutTestController.dumpAsText();
layoutTestController.waitUntilDone();
}
function log(message)
{
document.getElementById("result").innerHTML += message + "<br>";
}
function createFrame1()
{
applicationCache.onnoupdate = function() { log("FAIL: Unexpected noupdate event") }
applicationCache.oncached = function() { log("FAIL: Unexpected cached event") }
var ifr = document.createElement("iframe");
ifr.setAttribute("src", "resources/xhr-foreign-resource-frame.html");
document.body.appendChild(ifr);
}
function createFrame2()
{
// A copy that doesn't have its main resource in cache manifest.
var ifr = document.createElement("iframe");
ifr.setAttribute("src", "resources/xhr-foreign-resource-frame.html?");
document.body.appendChild(ifr);
}
applicationCache.onnoupdate = function() { createFrame1() }
applicationCache.oncached = function() { createFrame1() }
applicationCache.onupdateready = function() { log("FAIL: received unexpected updateready event") }
applicationCache.onerror = function() { log("FAIL: received unexpected error event") }
var hadErrorFromSubframe = false;
var subframeMessagesReceived = 0;
function frameMessageReceived(evt)
{
++subframeMessagesReceived;
if (evt.data != "SUCCESS")
hadErrorFromSubframe = true;
if (subframeMessagesReceived == 1)
setTimeout(createFrame2, 0);
else if (subframeMessagesReceived == 2)
test();
}
function test(evt)
{
if (!hadErrorFromSubframe) {
// The subframe has a different cache, but it is also listed as a resource in main frame's
// manifest, so it should be loaded successfully despite being marked as foreign now.
try {
var req = new XMLHttpRequest;
req.open("GET", "resources/xhr-foreign-resource-frame.html", false);
req.send("");
log("SUCCESS");
} catch (ex) {
log (ex);
}
} else
log("FAIL: subframe didn't get a correct cache");
if (window.layoutTestController)
layoutTestController.notifyDone();
}
window.addEventListener("message", frameMessageReceived, false);
</script>
</body>
</html>