| Index: Source/web/tests/AssociatedURLLoaderTest.cpp
|
| diff --git a/Source/web/tests/AssociatedURLLoaderTest.cpp b/Source/web/tests/AssociatedURLLoaderTest.cpp
|
| index a5ed5b64d52fbe305a13c202968ec3a0d457cabe..06c2b49c0c1da6748a595ceb24e972498c6d8893 100644
|
| --- a/Source/web/tests/AssociatedURLLoaderTest.cpp
|
| +++ b/Source/web/tests/AssociatedURLLoaderTest.cpp
|
| @@ -478,9 +478,47 @@ TEST_F(AssociatedURLLoaderTest, RedirectSuccess)
|
| EXPECT_TRUE(m_didFinishLoading);
|
| }
|
|
|
| +// Test a cross-origin URL redirect without Access Control set.
|
| +TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginFailure)
|
| +{
|
| + KURL url = toKURL("http://www.test.com/RedirectCrossOriginFailure.html");
|
| + char redirect[] = "http://www.other.com/RedirectCrossOriginFailure.html"; // Cross-origin
|
| + KURL redirectURL;
|
| +
|
| + WebURLRequest request;
|
| + request.initialize();
|
| + request.setURL(url);
|
| +
|
| + m_expectedRedirectResponse = WebURLResponse();
|
| + m_expectedRedirectResponse.initialize();
|
| + m_expectedRedirectResponse.setMIMEType("text/html");
|
| + m_expectedRedirectResponse.setHTTPStatusCode(301);
|
| + m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect);
|
| + Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRedirectResponse, m_frameFilePath);
|
| +
|
| + m_expectedNewRequest = WebURLRequest();
|
| + m_expectedNewRequest.initialize();
|
| + m_expectedNewRequest.setURL(redirectURL);
|
| +
|
| + 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();
|
| + EXPECT_TRUE(m_expectedLoader);
|
| + m_expectedLoader->loadAsynchronously(request, this);
|
| +
|
| + serveRequests();
|
| + EXPECT_FALSE(m_willSendRequest);
|
| + EXPECT_TRUE(m_didReceiveResponse);
|
| + EXPECT_TRUE(m_didReceiveData);
|
| + EXPECT_TRUE(m_didFinishLoading);
|
| +}
|
| +
|
| // Test that a cross origin redirect response without CORS headers fails.
|
| -// Disabled, http://crbug.com/240912 .
|
| -TEST_F(AssociatedURLLoaderTest, DISABLED_RedirectCrossOriginWithAccessControlFailure)
|
| +TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginWithAccessControlFailure)
|
| {
|
| KURL url = toKURL("http://www.test.com/RedirectCrossOriginWithAccessControlFailure.html");
|
| char redirect[] = "http://www.other.com/RedirectCrossOriginWithAccessControlFailure.html"; // Cross-origin
|
| @@ -490,7 +528,6 @@ TEST_F(AssociatedURLLoaderTest, DISABLED_RedirectCrossOriginWithAccessControlFai
|
| request.initialize();
|
| request.setURL(url);
|
|
|
| - // Create a redirect response without CORS headers.
|
| m_expectedRedirectResponse = WebURLResponse();
|
| m_expectedRedirectResponse.initialize();
|
| m_expectedRedirectResponse.setMIMEType("text/html");
|
| @@ -498,17 +535,28 @@ TEST_F(AssociatedURLLoaderTest, DISABLED_RedirectCrossOriginWithAccessControlFai
|
| m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect);
|
| Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRedirectResponse, m_frameFilePath);
|
|
|
| + m_expectedNewRequest = WebURLRequest();
|
| + m_expectedNewRequest.initialize();
|
| + m_expectedNewRequest.setURL(redirectURL);
|
| +
|
| + m_expectedResponse = WebURLResponse();
|
| + m_expectedResponse.initialize();
|
| + m_expectedResponse.setMIMEType("text/html");
|
| + m_expectedResponse.setHTTPStatusCode(200);
|
| + Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_expectedResponse, m_frameFilePath);
|
| +
|
| WebURLLoaderOptions options;
|
| options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl;
|
| m_expectedLoader = createAssociatedURLLoader(options);
|
| EXPECT_TRUE(m_expectedLoader);
|
| m_expectedLoader->loadAsynchronously(request, this);
|
| +
|
| serveRequests();
|
| - // We should not receive a notification for the redirect or any response.
|
| + // We should get a notification about access control check failure.
|
| EXPECT_FALSE(m_willSendRequest);
|
| EXPECT_FALSE(m_didReceiveResponse);
|
| - EXPECT_FALSE(m_didReceiveData);
|
| - EXPECT_FALSE(m_didFail);
|
| + EXPECT_TRUE(m_didReceiveData);
|
| + EXPECT_TRUE(m_didFail);
|
| }
|
|
|
| // Test that a cross origin redirect response with CORS headers that allow the requesting origin succeeds.
|
|
|