Index: Source/web/tests/AssociatedURLLoaderTest.cpp |
diff --git a/Source/web/tests/AssociatedURLLoaderTest.cpp b/Source/web/tests/AssociatedURLLoaderTest.cpp |
index 5c0cc4ced0bb6f0a9e47057052847059e613cc4c..2394174527a51747787101a0e19ae873244c776b 100644 |
--- a/Source/web/tests/AssociatedURLLoaderTest.cpp |
+++ b/Source/web/tests/AssociatedURLLoaderTest.cpp |
@@ -246,6 +246,7 @@ public: |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"); |
if (exposed) |
m_expectedResponse.addHTTPHeaderField("access-control-expose-headers", headerNameString); |
@@ -299,6 +300,7 @@ TEST_F(AssociatedURLLoaderTest, SameOriginSuccess) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |
m_expectedLoader = createAssociatedURLLoader(); |
@@ -333,6 +335,7 @@ TEST_F(AssociatedURLLoaderTest, CrossOriginSuccess) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |
WebURLLoaderOptions options; |
@@ -358,6 +361,7 @@ TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlSuccess) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |
@@ -384,6 +388,7 @@ TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlFailure) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |
@@ -404,6 +409,36 @@ TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlFailure) |
EXPECT_FALSE(m_didReceiveResponse); |
} |
+// Test an unsuccessful cross-origin load using CORS. |
+TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlFailureBadStatusCode) |
+{ |
+ // This is cross-origin since the frame was loaded from www.test.com. |
+ WebCore::KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlFailure.html"); |
+ WebURLRequest request; |
+ request.initialize(); |
+ request.setURL(url); |
+ |
+ m_expectedResponse = WebURLResponse(); |
+ m_expectedResponse.initialize(); |
+ m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(0); |
+ m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
+ Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |
+ |
+ WebURLLoaderOptions options; |
+ options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl; |
+ m_expectedLoader = createAssociatedURLLoader(options); |
+ EXPECT_TRUE(m_expectedLoader); |
+ m_expectedLoader->loadAsynchronously(request, this); |
+ |
+ // Failure should not be reported synchronously. |
+ EXPECT_FALSE(m_didFail); |
+ // The loader needs to receive the response, before doing the CORS check. |
+ serveRequests(); |
+ EXPECT_TRUE(m_didFail); |
+ EXPECT_FALSE(m_didReceiveResponse); |
+} |
+ |
// Test a same-origin URL redirect and load. |
TEST_F(AssociatedURLLoaderTest, RedirectSuccess) |
{ |
@@ -429,6 +464,7 @@ TEST_F(AssociatedURLLoaderTest, RedirectSuccess) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_expectedResponse, m_frameFilePath); |
m_expectedLoader = createAssociatedURLLoader(); |
@@ -501,6 +537,7 @@ TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginWithAccessControlSuccess) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_expectedResponse, m_frameFilePath); |
@@ -607,6 +644,7 @@ TEST_F(AssociatedURLLoaderTest, CrossOriginHeaderAllowResponseHeaders) |
m_expectedResponse = WebURLResponse(); |
m_expectedResponse.initialize(); |
m_expectedResponse.setMIMEType("text/html"); |
+ m_expectedResponse.setHTTPStatusCode(200); |
m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"); |
m_expectedResponse.addHTTPHeaderField(headerNameString, "foo"); |
Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedResponse, m_frameFilePath); |