| <!DOCTYPE html> |
| <html> |
| <script src="../../js-test-resources/js-test-pre.js"></script> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| <script> |
| description('Tests that isolated worlds can have XHRs run in a different origin.'); |
| |
| jsTestIsAsync = true; |
| |
| var tests = [ |
| function() { |
| debug('XHR from main world'); |
| xhr(); |
| }, |
| function() { |
| debug('XHR from isolated world with unchanged security origin'); |
| runTestInWorld(1, 'xhr'); |
| }, |
| function() { |
| debug('XHR from isolated world with same security origin as XHR target'); |
| testRunner.setIsolatedWorldSecurityOrigin(1, 'http://localhost:8000'); |
| runTestInWorld(1, 'xhr'); |
| }, |
| function() { |
| debug('XHR from isolated world with security origin that is whitelisted for XHR target'); |
| testRunner.setIsolatedWorldSecurityOrigin(2, 'chrome-extension://123'); |
| testRunner.addOriginAccessWhitelistEntry('chrome-extension://123', 'http', 'localhost', false); |
| runTestInWorld(2, 'xhr'); |
| }, |
| function() { |
| debug('XHR from main world is not affected by the isolated world origin or whitelist'); |
| xhr(); |
| } |
| ]; |
| var currentTest = 0; |
| |
| // This test is meaningless without testRunner. |
| if (window.testRunner) { |
| window.addEventListener( |
| 'message', |
| function(event) { |
| var message = JSON.parse(event.data); |
| switch (message.type) { |
| case 'test-done': |
| currentTest++; |
| if (currentTest == tests.length) { |
| testRunner.setIsolatedWorldSecurityOrigin(1, null); |
| testRunner.setIsolatedWorldSecurityOrigin(2, null); |
| finishJSTest(); |
| } |
| else |
| tests[currentTest](); |
| break; |
| case 'debug': |
| debug(message.message); |
| break; |
| default: |
| testFailed('Unknown message: ' + event.data); |
| break; |
| } |
| }, |
| false); |
| |
| tests[0](); |
| } else { |
| testFailed('Test depends on LayoutTestController and must be run by DRT'); |
| } |
| |
| function runTestInWorld(worldId, funcName) |
| { |
| testRunner.evaluateScriptInIsolatedWorld( |
| worldId, String(eval(funcName)) + "\n" + funcName + "();"); |
| } |
| |
| function xhr() |
| { |
| function debug(message) { |
| window.postMessage(JSON.stringify({ |
| 'type': 'debug', |
| 'message': message |
| }), |
| '*'); |
| } |
| |
| var xhr = new XMLHttpRequest(); |
| xhr.open('GET', 'http://localhost:8000/security/isolatedWorld/resources/cross-origin-xhr.txt', true); |
| xhr.onreadystatechange = function() { |
| if (xhr.readyState != 4) |
| return; |
| |
| debug('XHR completed with status ' + xhr.status); |
| window.postMessage(JSON.stringify({'type': 'test-done'}), '*'); |
| }; |
| xhr.send(null); |
| } |
| |
| </script> |
| |
| <script src="../../js-test-resources/js-test-post.js"></script> |
| </body> |
| </html> |