• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html manifest="resources/xhr-foreign-resource.manifest">
2<body>
3<p>Test that a resource marked as foreign can still be loaded via XHR.</p>
4<p>Should say SUCCESS:</p>
5<div id=result></div>
6
7<script>
8if (window.layoutTestController) {
9    layoutTestController.dumpAsText();
10    layoutTestController.waitUntilDone();
11}
12
13function log(message)
14{
15    document.getElementById("result").innerHTML += message + "<br>";
16}
17
18function createFrame1()
19{
20    applicationCache.onnoupdate = function() { log("FAIL: Unexpected noupdate event") }
21    applicationCache.oncached = function() { log("FAIL: Unexpected cached event") }
22
23    var ifr = document.createElement("iframe");
24    ifr.setAttribute("src", "resources/xhr-foreign-resource-frame.html");
25    document.body.appendChild(ifr);
26}
27
28function createFrame2()
29{
30    // A copy that doesn't have its main resource in cache manifest.
31    var ifr = document.createElement("iframe");
32    ifr.setAttribute("src", "resources/xhr-foreign-resource-frame.html?");
33    document.body.appendChild(ifr);
34}
35
36applicationCache.onnoupdate = function() { createFrame1() }
37applicationCache.oncached = function() { createFrame1() }
38
39applicationCache.onupdateready = function() { log("FAIL: received unexpected updateready event") }
40applicationCache.onerror = function() { log("FAIL: received unexpected error event") }
41
42var hadErrorFromSubframe = false;
43var subframeMessagesReceived = 0;
44function frameMessageReceived(evt)
45{
46    ++subframeMessagesReceived;
47    if (evt.data != "SUCCESS")
48        hadErrorFromSubframe = true;
49    if (subframeMessagesReceived == 1)
50        setTimeout(createFrame2, 0);
51    else if (subframeMessagesReceived == 2)
52        test();
53}
54
55function test(evt)
56{
57    if (!hadErrorFromSubframe) {
58        // The subframe has a different cache, but it is also listed as a resource in main frame's
59        // manifest, so it should be loaded successfully despite being marked as foreign now.
60        try {
61            var req = new XMLHttpRequest;
62            req.open("GET", "resources/xhr-foreign-resource-frame.html", false);
63            req.send("");
64            log("SUCCESS");
65        } catch (ex) {
66            log (ex);
67        }
68    } else
69        log("FAIL: subframe didn't get a correct cache");
70
71    if (window.layoutTestController)
72        layoutTestController.notifyDone();
73}
74
75window.addEventListener("message", frameMessageReceived, false);
76
77</script>
78</body>
79</html>
80