JS Test Harness: Remove successfullyParsed from more tests
[WebKit-https.git] / LayoutTests / http / tests / security / isolatedWorld / cross-origin-xhr.html
1 <!DOCTYPE html>
2 <html>
3 <script src="../../js-test-resources/js-test-pre.js"></script>
4 <body>
5 <p id="description"></p>
6 <div id="console"></div>
7
8 <script>
9 description('Tests that isolated worlds can have XHRs run in a different origin.');
10
11 jsTestIsAsync = true;
12
13 var tests = [
14     function() {
15         debug('XHR from main world');
16         xhr();
17     },
18     function() {
19         debug('XHR from isolated world with unchanged security origin');
20         runTestInWorld(1, 'xhr');
21     },
22     function() {
23         debug('XHR from isolated world with same security origin as XHR target');
24         layoutTestController.setIsolatedWorldSecurityOrigin(1, 'http://localhost:8000');
25         runTestInWorld(1, 'xhr');
26     },
27     function() {
28         debug('XHR from isolated world with security origin that is whitelisted for XHR target');
29         layoutTestController.setIsolatedWorldSecurityOrigin(2, 'chrome-extension://123');
30         layoutTestController.addOriginAccessWhitelistEntry('chrome-extension://123', 'http', 'localhost', false);
31         runTestInWorld(2, 'xhr');
32     },
33     function() {
34         debug('XHR from main world is not affected by the isolated world origin or whitelist');
35         xhr();
36     }
37 ];
38 var currentTest = 0;
39
40 // This test is meaningless without layoutTestController.
41 if (window.layoutTestController) {
42     window.addEventListener(
43         'message',
44         function(event) {
45             var message = JSON.parse(event.data);
46             switch (message.type) {
47                 case 'test-done':
48                     currentTest++;
49                     if (currentTest == tests.length)
50                         finishJSTest();
51                     else
52                         tests[currentTest]();
53                     break;
54                 case 'debug':
55                     debug(message.message);
56                     break;
57                 default:
58                     testFailed('Unknown message: ' + event.data);
59                     break;
60             }
61         },
62         false);
63
64     tests[0]();
65 } else {
66     testFailed('Test depends on LayoutTestController and must be run by DRT');
67 }
68
69 function runTestInWorld(worldId, funcName)
70 {
71     layoutTestController.evaluateScriptInIsolatedWorld(
72         worldId, String(eval(funcName)) + "\n" + funcName + "();");
73 }
74
75 function xhr()
76 {
77     function debug(message) {
78         window.postMessage(JSON.stringify({
79                 'type': 'debug',
80                 'message': message
81             }),
82             '*');
83     }
84
85     var xhr = new XMLHttpRequest();
86     xhr.open('GET', 'http://localhost:8000/security/isolatedWorld/resources/cross-origin-xhr.txt', true);
87     xhr.onreadystatechange = function() {
88         if (xhr.readyState != 4)
89             return;
90
91         debug('XHR completed with status ' + xhr.status);
92         window.postMessage(JSON.stringify({'type': 'test-done'}), '*');
93     };
94     xhr.send(null);
95 }
96
97 </script>
98
99 <script src="../../js-test-resources/js-test-post.js"></script>
100 </body>
101 </html>