| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| chrome.test.getConfig(function(config) { |
| |
| function rewriteURL(url) { |
| var isFtp = /^ftp:/i.test(url); |
| var port = isFtp ? config.ftpServer.port : config.testServer.port; |
| return url.replace(/PORT/, port); |
| } |
| |
| function doReq(domain, expectSuccess) { |
| var req = new XMLHttpRequest(); |
| var url = rewriteURL(domain + ":PORT/extensions/test_file.txt"); |
| var isErrorTriggered = false; |
| |
| chrome.test.log("Requesting url: " + url); |
| req.open("GET", url, true); |
| |
| |
| if (expectSuccess) { |
| req.onload = function() { |
| if (/^https?:/i.test(url)) |
| chrome.test.assertEq(200, req.status); |
| chrome.test.assertEq("Hello!", req.responseText); |
| chrome.test.succeed(); |
| } |
| req.onerror = function() { |
| isErrorTriggered = true; |
| chrome.test.log("status: " + req.status); |
| chrome.test.log("text: " + req.responseText); |
| chrome.test.fail("Unexpected error for domain: " + domain); |
| } |
| } else { |
| req.onload = function() { |
| chrome.test.fail("Unexpected success for domain: " + domain); |
| } |
| req.onerror = function() { |
| isErrorTriggered = true; |
| chrome.test.assertEq(0, req.status); |
| chrome.test.succeed(); |
| } |
| } |
| |
| try { |
| req.send(null); |
| } catch (e) { |
| if (/^https?:/i.test(url)) { |
| chrome.test.fail( |
| "req.send() has thrown an error for " + domain + ": " + e); |
| } else if (!isErrorTriggered) { |
| // A NetworkError will synchronously be be thrown whenever a |
| // FTP request fails. This should be handled by req.onerror. |
| chrome.test.fail("req.send() has thrown an error without dispatching " + |
| "the req.onerror event for " + domain + ": " + e); |
| } |
| } |
| } |
| |
| chrome.test.runTests([ |
| function allowedOrigin() { |
| doReq("http://a.com", true); |
| }, |
| function diallowedOrigin() { |
| doReq("http://c.com", false); |
| }, |
| function allowedSubdomain() { |
| doReq("http://foo.b.com", true); |
| }, |
| function noSubdomain() { |
| doReq("http://b.com", true); |
| }, |
| function disallowedSubdomain() { |
| doReq("http://foob.com", false); |
| }, |
| // TODO(asargent): Explicitly create SSL test server and enable the test. |
| // function disallowedSSL() { |
| // doReq("https://a.com", false); |
| // }, |
| function allowedFtpHostDisallowed() { |
| doReq('ftp://127.0.0.1', false); |
| }, |
| function disallowedFtpHostDisallowed() { |
| doReq('ftp://this.host.is.not.whitelisted', false); |
| } |
| ]); |
| }); |