| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "platform/testing/URLTestHelpers.h" | 31 #include "platform/testing/URLTestHelpers.h" |
| 32 #include "platform/testing/UnitTestHelpers.h" | 32 #include "platform/testing/UnitTestHelpers.h" |
| 33 #include "public/platform/Platform.h" | 33 #include "public/platform/Platform.h" |
| 34 #include "public/platform/WebString.h" | 34 #include "public/platform/WebString.h" |
| 35 #include "public/platform/WebThread.h" | 35 #include "public/platform/WebThread.h" |
| 36 #include "public/platform/WebURL.h" | 36 #include "public/platform/WebURL.h" |
| 37 #include "public/platform/WebURLLoader.h" | 37 #include "public/platform/WebURLLoader.h" |
| 38 #include "public/platform/WebURLLoaderClient.h" | 38 #include "public/platform/WebURLLoaderClient.h" |
| 39 #include "public/platform/WebURLLoaderMockFactory.h" |
| 39 #include "public/platform/WebURLRequest.h" | 40 #include "public/platform/WebURLRequest.h" |
| 40 #include "public/platform/WebURLResponse.h" | 41 #include "public/platform/WebURLResponse.h" |
| 41 #include "public/platform/WebUnitTestSupport.h" | 42 #include "public/web/WebCache.h" |
| 42 #include "public/web/WebFrame.h" | 43 #include "public/web/WebFrame.h" |
| 43 #include "public/web/WebURLLoaderOptions.h" | 44 #include "public/web/WebURLLoaderOptions.h" |
| 44 #include "public/web/WebView.h" | 45 #include "public/web/WebView.h" |
| 45 #include "testing/gtest/include/gtest/gtest.h" | 46 #include "testing/gtest/include/gtest/gtest.h" |
| 46 #include "web/tests/FrameTestHelpers.h" | 47 #include "web/tests/FrameTestHelpers.h" |
| 47 #include "wtf/text/CString.h" | 48 #include "wtf/text/CString.h" |
| 48 #include "wtf/text/WTFString.h" | 49 #include "wtf/text/WTFString.h" |
| 49 | 50 |
| 50 using blink::URLTestHelpers::toKURL; | 51 using blink::URLTestHelpers::toKURL; |
| 51 using blink::testing::runPendingTasks; | 52 using blink::testing::runPendingTasks; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 72 } | 73 } |
| 73 | 74 |
| 74 KURL RegisterMockedUrl(const std::string& urlRoot, const WTF::String& filena
me) | 75 KURL RegisterMockedUrl(const std::string& urlRoot, const WTF::String& filena
me) |
| 75 { | 76 { |
| 76 WebURLResponse response; | 77 WebURLResponse response; |
| 77 response.initialize(); | 78 response.initialize(); |
| 78 response.setMIMEType("text/html"); | 79 response.setMIMEType("text/html"); |
| 79 WTF::String localPath = m_baseFilePath; | 80 WTF::String localPath = m_baseFilePath; |
| 80 localPath.append(filename); | 81 localPath.append(filename); |
| 81 KURL url = toKURL(urlRoot + filename.utf8().data()); | 82 KURL url = toKURL(urlRoot + filename.utf8().data()); |
| 82 Platform::current()->unitTestSupport()->registerMockedURL(url, response,
localPath); | 83 Platform::current()->getURLLoaderMockFactory()->registerURL(url, respons
e, localPath); |
| 83 return url; | 84 return url; |
| 84 } | 85 } |
| 85 | 86 |
| 86 void SetUp() override | 87 void SetUp() override |
| 87 { | 88 { |
| 88 m_helper.initialize(); | 89 m_helper.initialize(); |
| 89 | 90 |
| 90 std::string urlRoot = "http://www.test.com/"; | 91 std::string urlRoot = "http://www.test.com/"; |
| 91 KURL url = RegisterMockedUrl(urlRoot, "iframes_test.html"); | 92 KURL url = RegisterMockedUrl(urlRoot, "iframes_test.html"); |
| 92 const char* iframeSupportFiles[] = { | 93 const char* iframeSupportFiles[] = { |
| 93 "invisible_iframe.html", | 94 "invisible_iframe.html", |
| 94 "visible_iframe.html", | 95 "visible_iframe.html", |
| 95 "zero_sized_iframe.html", | 96 "zero_sized_iframe.html", |
| 96 }; | 97 }; |
| 97 for (size_t i = 0; i < WTF_ARRAY_LENGTH(iframeSupportFiles); ++i) { | 98 for (size_t i = 0; i < WTF_ARRAY_LENGTH(iframeSupportFiles); ++i) { |
| 98 RegisterMockedUrl(urlRoot, iframeSupportFiles[i]); | 99 RegisterMockedUrl(urlRoot, iframeSupportFiles[i]); |
| 99 } | 100 } |
| 100 | 101 |
| 101 FrameTestHelpers::loadFrame(mainFrame(), url.getString().utf8().data()); | 102 FrameTestHelpers::loadFrame(mainFrame(), url.getString().utf8().data()); |
| 102 | 103 |
| 103 Platform::current()->unitTestSupport()->unregisterMockedURL(url); | 104 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 104 } | 105 } |
| 105 | 106 |
| 106 void TearDown() override | 107 void TearDown() override |
| 107 { | 108 { |
| 108 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); | 109 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 110 WebCache::clear(); |
| 109 } | 111 } |
| 110 | 112 |
| 111 void serveRequests() | 113 void serveRequests() |
| 112 { | 114 { |
| 113 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(
); | 115 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequest
s(); |
| 114 } | 116 } |
| 115 | 117 |
| 116 PassOwnPtr<WebURLLoader> createAssociatedURLLoader(const WebURLLoaderOptions
options = WebURLLoaderOptions()) | 118 PassOwnPtr<WebURLLoader> createAssociatedURLLoader(const WebURLLoaderOptions
options = WebURLLoaderOptions()) |
| 117 { | 119 { |
| 118 return adoptPtr(mainFrame()->createAssociatedURLLoader(options)); | 120 return adoptPtr(mainFrame()->createAssociatedURLLoader(options)); |
| 119 } | 121 } |
| 120 | 122 |
| 121 // WebURLLoaderClient implementation. | 123 // WebURLLoaderClient implementation. |
| 122 void willFollowRedirect(WebURLLoader* loader, WebURLRequest& newRequest, con
st WebURLResponse& redirectResponse) override | 124 void willFollowRedirect(WebURLLoader* loader, WebURLRequest& newRequest, con
st WebURLResponse& redirectResponse) override |
| 123 { | 125 { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 | 239 |
| 238 WebString headerNameString(WebString::fromUTF8(headerName)); | 240 WebString headerNameString(WebString::fromUTF8(headerName)); |
| 239 m_expectedResponse = WebURLResponse(); | 241 m_expectedResponse = WebURLResponse(); |
| 240 m_expectedResponse.initialize(); | 242 m_expectedResponse.initialize(); |
| 241 m_expectedResponse.setMIMEType("text/html"); | 243 m_expectedResponse.setMIMEType("text/html"); |
| 242 m_expectedResponse.setHTTPStatusCode(200); | 244 m_expectedResponse.setHTTPStatusCode(200); |
| 243 m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"
); | 245 m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"
); |
| 244 if (exposed) | 246 if (exposed) |
| 245 m_expectedResponse.addHTTPHeaderField("access-control-expose-headers
", headerNameString); | 247 m_expectedResponse.addHTTPHeaderField("access-control-expose-headers
", headerNameString); |
| 246 m_expectedResponse.addHTTPHeaderField(headerNameString, "foo"); | 248 m_expectedResponse.addHTTPHeaderField(headerNameString, "foo"); |
| 247 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expecte
dResponse, m_frameFilePath); | 249 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expec
tedResponse, m_frameFilePath); |
| 248 | 250 |
| 249 WebURLLoaderOptions options; | 251 WebURLLoaderOptions options; |
| 250 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginReque
stPolicyUseAccessControl; | 252 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginReque
stPolicyUseAccessControl; |
| 251 m_expectedLoader = createAssociatedURLLoader(options); | 253 m_expectedLoader = createAssociatedURLLoader(options); |
| 252 EXPECT_TRUE(m_expectedLoader); | 254 EXPECT_TRUE(m_expectedLoader); |
| 253 m_expectedLoader->loadAsynchronously(request, this); | 255 m_expectedLoader->loadAsynchronously(request, this); |
| 254 serveRequests(); | 256 serveRequests(); |
| 255 EXPECT_TRUE(m_didReceiveResponse); | 257 EXPECT_TRUE(m_didReceiveResponse); |
| 256 EXPECT_TRUE(m_didReceiveData); | 258 EXPECT_TRUE(m_didReceiveData); |
| 257 EXPECT_TRUE(m_didFinishLoading); | 259 EXPECT_TRUE(m_didFinishLoading); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 286 { | 288 { |
| 287 KURL url = toKURL("http://www.test.com/SameOriginSuccess.html"); | 289 KURL url = toKURL("http://www.test.com/SameOriginSuccess.html"); |
| 288 WebURLRequest request; | 290 WebURLRequest request; |
| 289 request.initialize(); | 291 request.initialize(); |
| 290 request.setURL(url); | 292 request.setURL(url); |
| 291 | 293 |
| 292 m_expectedResponse = WebURLResponse(); | 294 m_expectedResponse = WebURLResponse(); |
| 293 m_expectedResponse.initialize(); | 295 m_expectedResponse.initialize(); |
| 294 m_expectedResponse.setMIMEType("text/html"); | 296 m_expectedResponse.setMIMEType("text/html"); |
| 295 m_expectedResponse.setHTTPStatusCode(200); | 297 m_expectedResponse.setHTTPStatusCode(200); |
| 296 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 298 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 297 | 299 |
| 298 m_expectedLoader = createAssociatedURLLoader(); | 300 m_expectedLoader = createAssociatedURLLoader(); |
| 299 EXPECT_TRUE(m_expectedLoader); | 301 EXPECT_TRUE(m_expectedLoader); |
| 300 m_expectedLoader->loadAsynchronously(request, this); | 302 m_expectedLoader->loadAsynchronously(request, this); |
| 301 serveRequests(); | 303 serveRequests(); |
| 302 EXPECT_TRUE(m_didReceiveResponse); | 304 EXPECT_TRUE(m_didReceiveResponse); |
| 303 EXPECT_TRUE(m_didReceiveData); | 305 EXPECT_TRUE(m_didReceiveData); |
| 304 EXPECT_TRUE(m_didFinishLoading); | 306 EXPECT_TRUE(m_didFinishLoading); |
| 305 } | 307 } |
| 306 | 308 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 321 // This is cross-origin since the frame was loaded from www.test.com. | 323 // This is cross-origin since the frame was loaded from www.test.com. |
| 322 KURL url = toKURL("http://www.other.com/CrossOriginSuccess.html"); | 324 KURL url = toKURL("http://www.other.com/CrossOriginSuccess.html"); |
| 323 WebURLRequest request; | 325 WebURLRequest request; |
| 324 request.initialize(); | 326 request.initialize(); |
| 325 request.setURL(url); | 327 request.setURL(url); |
| 326 | 328 |
| 327 m_expectedResponse = WebURLResponse(); | 329 m_expectedResponse = WebURLResponse(); |
| 328 m_expectedResponse.initialize(); | 330 m_expectedResponse.initialize(); |
| 329 m_expectedResponse.setMIMEType("text/html"); | 331 m_expectedResponse.setMIMEType("text/html"); |
| 330 m_expectedResponse.setHTTPStatusCode(200); | 332 m_expectedResponse.setHTTPStatusCode(200); |
| 331 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 333 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 332 | 334 |
| 333 WebURLLoaderOptions options; | 335 WebURLLoaderOptions options; |
| 334 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyAllow; | 336 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyAllow; |
| 335 m_expectedLoader = createAssociatedURLLoader(options); | 337 m_expectedLoader = createAssociatedURLLoader(options); |
| 336 EXPECT_TRUE(m_expectedLoader); | 338 EXPECT_TRUE(m_expectedLoader); |
| 337 m_expectedLoader->loadAsynchronously(request, this); | 339 m_expectedLoader->loadAsynchronously(request, this); |
| 338 serveRequests(); | 340 serveRequests(); |
| 339 EXPECT_TRUE(m_didReceiveResponse); | 341 EXPECT_TRUE(m_didReceiveResponse); |
| 340 EXPECT_TRUE(m_didReceiveData); | 342 EXPECT_TRUE(m_didReceiveData); |
| 341 EXPECT_TRUE(m_didFinishLoading); | 343 EXPECT_TRUE(m_didFinishLoading); |
| 342 } | 344 } |
| 343 | 345 |
| 344 // Test a successful cross-origin load using CORS. | 346 // Test a successful cross-origin load using CORS. |
| 345 TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlSuccess) | 347 TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlSuccess) |
| 346 { | 348 { |
| 347 // This is cross-origin since the frame was loaded from www.test.com. | 349 // This is cross-origin since the frame was loaded from www.test.com. |
| 348 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlSuccess.
html"); | 350 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlSuccess.
html"); |
| 349 WebURLRequest request; | 351 WebURLRequest request; |
| 350 request.initialize(); | 352 request.initialize(); |
| 351 request.setURL(url); | 353 request.setURL(url); |
| 352 | 354 |
| 353 m_expectedResponse = WebURLResponse(); | 355 m_expectedResponse = WebURLResponse(); |
| 354 m_expectedResponse.initialize(); | 356 m_expectedResponse.initialize(); |
| 355 m_expectedResponse.setMIMEType("text/html"); | 357 m_expectedResponse.setMIMEType("text/html"); |
| 356 m_expectedResponse.setHTTPStatusCode(200); | 358 m_expectedResponse.setHTTPStatusCode(200); |
| 357 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); | 359 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
| 358 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 360 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 359 | 361 |
| 360 WebURLLoaderOptions options; | 362 WebURLLoaderOptions options; |
| 361 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 363 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 362 m_expectedLoader = createAssociatedURLLoader(options); | 364 m_expectedLoader = createAssociatedURLLoader(options); |
| 363 EXPECT_TRUE(m_expectedLoader); | 365 EXPECT_TRUE(m_expectedLoader); |
| 364 m_expectedLoader->loadAsynchronously(request, this); | 366 m_expectedLoader->loadAsynchronously(request, this); |
| 365 serveRequests(); | 367 serveRequests(); |
| 366 EXPECT_TRUE(m_didReceiveResponse); | 368 EXPECT_TRUE(m_didReceiveResponse); |
| 367 EXPECT_TRUE(m_didReceiveData); | 369 EXPECT_TRUE(m_didReceiveData); |
| 368 EXPECT_TRUE(m_didFinishLoading); | 370 EXPECT_TRUE(m_didFinishLoading); |
| 369 } | 371 } |
| 370 | 372 |
| 371 // Test an unsuccessful cross-origin load using CORS. | 373 // Test an unsuccessful cross-origin load using CORS. |
| 372 TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlFailure) | 374 TEST_F(AssociatedURLLoaderTest, CrossOriginWithAccessControlFailure) |
| 373 { | 375 { |
| 374 // This is cross-origin since the frame was loaded from www.test.com. | 376 // This is cross-origin since the frame was loaded from www.test.com. |
| 375 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlFailure.
html"); | 377 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlFailure.
html"); |
| 376 WebURLRequest request; | 378 WebURLRequest request; |
| 377 request.initialize(); | 379 request.initialize(); |
| 378 request.setURL(url); | 380 request.setURL(url); |
| 379 | 381 |
| 380 m_expectedResponse = WebURLResponse(); | 382 m_expectedResponse = WebURLResponse(); |
| 381 m_expectedResponse.initialize(); | 383 m_expectedResponse.initialize(); |
| 382 m_expectedResponse.setMIMEType("text/html"); | 384 m_expectedResponse.setMIMEType("text/html"); |
| 383 m_expectedResponse.setHTTPStatusCode(200); | 385 m_expectedResponse.setHTTPStatusCode(200); |
| 384 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); | 386 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
| 385 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 387 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 386 | 388 |
| 387 WebURLLoaderOptions options; | 389 WebURLLoaderOptions options; |
| 388 // Send credentials. This will cause the CORS checks to fail, because creden
tials can't be | 390 // Send credentials. This will cause the CORS checks to fail, because creden
tials can't be |
| 389 // sent to a server which returns the header "access-control-allow-origin" w
ith "*" as its value. | 391 // sent to a server which returns the header "access-control-allow-origin" w
ith "*" as its value. |
| 390 options.allowCredentials = true; | 392 options.allowCredentials = true; |
| 391 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 393 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 392 m_expectedLoader = createAssociatedURLLoader(options); | 394 m_expectedLoader = createAssociatedURLLoader(options); |
| 393 EXPECT_TRUE(m_expectedLoader); | 395 EXPECT_TRUE(m_expectedLoader); |
| 394 m_expectedLoader->loadAsynchronously(request, this); | 396 m_expectedLoader->loadAsynchronously(request, this); |
| 395 | 397 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 408 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlFailure.
html"); | 410 KURL url = toKURL("http://www.other.com/CrossOriginWithAccessControlFailure.
html"); |
| 409 WebURLRequest request; | 411 WebURLRequest request; |
| 410 request.initialize(); | 412 request.initialize(); |
| 411 request.setURL(url); | 413 request.setURL(url); |
| 412 | 414 |
| 413 m_expectedResponse = WebURLResponse(); | 415 m_expectedResponse = WebURLResponse(); |
| 414 m_expectedResponse.initialize(); | 416 m_expectedResponse.initialize(); |
| 415 m_expectedResponse.setMIMEType("text/html"); | 417 m_expectedResponse.setMIMEType("text/html"); |
| 416 m_expectedResponse.setHTTPStatusCode(0); | 418 m_expectedResponse.setHTTPStatusCode(0); |
| 417 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); | 419 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
| 418 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 420 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 419 | 421 |
| 420 WebURLLoaderOptions options; | 422 WebURLLoaderOptions options; |
| 421 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 423 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 422 m_expectedLoader = createAssociatedURLLoader(options); | 424 m_expectedLoader = createAssociatedURLLoader(options); |
| 423 EXPECT_TRUE(m_expectedLoader); | 425 EXPECT_TRUE(m_expectedLoader); |
| 424 m_expectedLoader->loadAsynchronously(request, this); | 426 m_expectedLoader->loadAsynchronously(request, this); |
| 425 | 427 |
| 426 // Failure should not be reported synchronously. | 428 // Failure should not be reported synchronously. |
| 427 EXPECT_FALSE(m_didFail); | 429 EXPECT_FALSE(m_didFail); |
| 428 // The loader needs to receive the response, before doing the CORS check. | 430 // The loader needs to receive the response, before doing the CORS check. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 440 | 442 |
| 441 WebURLRequest request; | 443 WebURLRequest request; |
| 442 request.initialize(); | 444 request.initialize(); |
| 443 request.setURL(url); | 445 request.setURL(url); |
| 444 | 446 |
| 445 m_expectedRedirectResponse = WebURLResponse(); | 447 m_expectedRedirectResponse = WebURLResponse(); |
| 446 m_expectedRedirectResponse.initialize(); | 448 m_expectedRedirectResponse.initialize(); |
| 447 m_expectedRedirectResponse.setMIMEType("text/html"); | 449 m_expectedRedirectResponse.setMIMEType("text/html"); |
| 448 m_expectedRedirectResponse.setHTTPStatusCode(301); | 450 m_expectedRedirectResponse.setHTTPStatusCode(301); |
| 449 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); | 451 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); |
| 450 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRed
irectResponse, m_frameFilePath); | 452 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
edirectResponse, m_frameFilePath); |
| 451 | 453 |
| 452 m_expectedNewRequest = WebURLRequest(); | 454 m_expectedNewRequest = WebURLRequest(); |
| 453 m_expectedNewRequest.initialize(); | 455 m_expectedNewRequest.initialize(); |
| 454 m_expectedNewRequest.setURL(redirectURL); | 456 m_expectedNewRequest.setURL(redirectURL); |
| 455 | 457 |
| 456 m_expectedResponse = WebURLResponse(); | 458 m_expectedResponse = WebURLResponse(); |
| 457 m_expectedResponse.initialize(); | 459 m_expectedResponse.initialize(); |
| 458 m_expectedResponse.setMIMEType("text/html"); | 460 m_expectedResponse.setMIMEType("text/html"); |
| 459 m_expectedResponse.setHTTPStatusCode(200); | 461 m_expectedResponse.setHTTPStatusCode(200); |
| 460 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_exp
ectedResponse, m_frameFilePath); | 462 Platform::current()->getURLLoaderMockFactory()->registerURL(redirectURL, m_e
xpectedResponse, m_frameFilePath); |
| 461 | 463 |
| 462 m_expectedLoader = createAssociatedURLLoader(); | 464 m_expectedLoader = createAssociatedURLLoader(); |
| 463 EXPECT_TRUE(m_expectedLoader); | 465 EXPECT_TRUE(m_expectedLoader); |
| 464 m_expectedLoader->loadAsynchronously(request, this); | 466 m_expectedLoader->loadAsynchronously(request, this); |
| 465 serveRequests(); | 467 serveRequests(); |
| 466 EXPECT_TRUE(m_willFollowRedirect); | 468 EXPECT_TRUE(m_willFollowRedirect); |
| 467 EXPECT_TRUE(m_didReceiveResponse); | 469 EXPECT_TRUE(m_didReceiveResponse); |
| 468 EXPECT_TRUE(m_didReceiveData); | 470 EXPECT_TRUE(m_didReceiveData); |
| 469 EXPECT_TRUE(m_didFinishLoading); | 471 EXPECT_TRUE(m_didFinishLoading); |
| 470 } | 472 } |
| 471 | 473 |
| 472 // Test a cross-origin URL redirect without Access Control set. | 474 // Test a cross-origin URL redirect without Access Control set. |
| 473 TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginFailure) | 475 TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginFailure) |
| 474 { | 476 { |
| 475 KURL url = toKURL("http://www.test.com/RedirectCrossOriginFailure.html"); | 477 KURL url = toKURL("http://www.test.com/RedirectCrossOriginFailure.html"); |
| 476 char redirect[] = "http://www.other.com/RedirectCrossOriginFailure.html"; /
/ Cross-origin | 478 char redirect[] = "http://www.other.com/RedirectCrossOriginFailure.html"; /
/ Cross-origin |
| 477 KURL redirectURL = toKURL(redirect); | 479 KURL redirectURL = toKURL(redirect); |
| 478 | 480 |
| 479 WebURLRequest request; | 481 WebURLRequest request; |
| 480 request.initialize(); | 482 request.initialize(); |
| 481 request.setURL(url); | 483 request.setURL(url); |
| 482 | 484 |
| 483 m_expectedRedirectResponse = WebURLResponse(); | 485 m_expectedRedirectResponse = WebURLResponse(); |
| 484 m_expectedRedirectResponse.initialize(); | 486 m_expectedRedirectResponse.initialize(); |
| 485 m_expectedRedirectResponse.setMIMEType("text/html"); | 487 m_expectedRedirectResponse.setMIMEType("text/html"); |
| 486 m_expectedRedirectResponse.setHTTPStatusCode(301); | 488 m_expectedRedirectResponse.setHTTPStatusCode(301); |
| 487 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); | 489 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); |
| 488 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRed
irectResponse, m_frameFilePath); | 490 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
edirectResponse, m_frameFilePath); |
| 489 | 491 |
| 490 m_expectedNewRequest = WebURLRequest(); | 492 m_expectedNewRequest = WebURLRequest(); |
| 491 m_expectedNewRequest.initialize(); | 493 m_expectedNewRequest.initialize(); |
| 492 m_expectedNewRequest.setURL(redirectURL); | 494 m_expectedNewRequest.setURL(redirectURL); |
| 493 | 495 |
| 494 m_expectedResponse = WebURLResponse(); | 496 m_expectedResponse = WebURLResponse(); |
| 495 m_expectedResponse.initialize(); | 497 m_expectedResponse.initialize(); |
| 496 m_expectedResponse.setMIMEType("text/html"); | 498 m_expectedResponse.setMIMEType("text/html"); |
| 497 m_expectedResponse.setHTTPStatusCode(200); | 499 m_expectedResponse.setHTTPStatusCode(200); |
| 498 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_exp
ectedResponse, m_frameFilePath); | 500 Platform::current()->getURLLoaderMockFactory()->registerURL(redirectURL, m_e
xpectedResponse, m_frameFilePath); |
| 499 | 501 |
| 500 m_expectedLoader = createAssociatedURLLoader(); | 502 m_expectedLoader = createAssociatedURLLoader(); |
| 501 EXPECT_TRUE(m_expectedLoader); | 503 EXPECT_TRUE(m_expectedLoader); |
| 502 m_expectedLoader->loadAsynchronously(request, this); | 504 m_expectedLoader->loadAsynchronously(request, this); |
| 503 | 505 |
| 504 serveRequests(); | 506 serveRequests(); |
| 505 EXPECT_FALSE(m_willFollowRedirect); | 507 EXPECT_FALSE(m_willFollowRedirect); |
| 506 EXPECT_FALSE(m_didReceiveResponse); | 508 EXPECT_FALSE(m_didReceiveResponse); |
| 507 EXPECT_FALSE(m_didReceiveData); | 509 EXPECT_FALSE(m_didReceiveData); |
| 508 EXPECT_FALSE(m_didFinishLoading); | 510 EXPECT_FALSE(m_didFinishLoading); |
| 509 } | 511 } |
| 510 | 512 |
| 511 // Test that a cross origin redirect response without CORS headers fails. | 513 // Test that a cross origin redirect response without CORS headers fails. |
| 512 TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginWithAccessControlFailure) | 514 TEST_F(AssociatedURLLoaderTest, RedirectCrossOriginWithAccessControlFailure) |
| 513 { | 515 { |
| 514 KURL url = toKURL("http://www.test.com/RedirectCrossOriginWithAccessControlF
ailure.html"); | 516 KURL url = toKURL("http://www.test.com/RedirectCrossOriginWithAccessControlF
ailure.html"); |
| 515 char redirect[] = "http://www.other.com/RedirectCrossOriginWithAccessControl
Failure.html"; // Cross-origin | 517 char redirect[] = "http://www.other.com/RedirectCrossOriginWithAccessControl
Failure.html"; // Cross-origin |
| 516 KURL redirectURL = toKURL(redirect); | 518 KURL redirectURL = toKURL(redirect); |
| 517 | 519 |
| 518 WebURLRequest request; | 520 WebURLRequest request; |
| 519 request.initialize(); | 521 request.initialize(); |
| 520 request.setURL(url); | 522 request.setURL(url); |
| 521 | 523 |
| 522 m_expectedRedirectResponse = WebURLResponse(); | 524 m_expectedRedirectResponse = WebURLResponse(); |
| 523 m_expectedRedirectResponse.initialize(); | 525 m_expectedRedirectResponse.initialize(); |
| 524 m_expectedRedirectResponse.setMIMEType("text/html"); | 526 m_expectedRedirectResponse.setMIMEType("text/html"); |
| 525 m_expectedRedirectResponse.setHTTPStatusCode(301); | 527 m_expectedRedirectResponse.setHTTPStatusCode(301); |
| 526 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); | 528 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); |
| 527 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRed
irectResponse, m_frameFilePath); | 529 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
edirectResponse, m_frameFilePath); |
| 528 | 530 |
| 529 m_expectedNewRequest = WebURLRequest(); | 531 m_expectedNewRequest = WebURLRequest(); |
| 530 m_expectedNewRequest.initialize(); | 532 m_expectedNewRequest.initialize(); |
| 531 m_expectedNewRequest.setURL(redirectURL); | 533 m_expectedNewRequest.setURL(redirectURL); |
| 532 | 534 |
| 533 m_expectedResponse = WebURLResponse(); | 535 m_expectedResponse = WebURLResponse(); |
| 534 m_expectedResponse.initialize(); | 536 m_expectedResponse.initialize(); |
| 535 m_expectedResponse.setMIMEType("text/html"); | 537 m_expectedResponse.setMIMEType("text/html"); |
| 536 m_expectedResponse.setHTTPStatusCode(200); | 538 m_expectedResponse.setHTTPStatusCode(200); |
| 537 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_exp
ectedResponse, m_frameFilePath); | 539 Platform::current()->getURLLoaderMockFactory()->registerURL(redirectURL, m_e
xpectedResponse, m_frameFilePath); |
| 538 | 540 |
| 539 WebURLLoaderOptions options; | 541 WebURLLoaderOptions options; |
| 540 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 542 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 541 m_expectedLoader = createAssociatedURLLoader(options); | 543 m_expectedLoader = createAssociatedURLLoader(options); |
| 542 EXPECT_TRUE(m_expectedLoader); | 544 EXPECT_TRUE(m_expectedLoader); |
| 543 m_expectedLoader->loadAsynchronously(request, this); | 545 m_expectedLoader->loadAsynchronously(request, this); |
| 544 | 546 |
| 545 serveRequests(); | 547 serveRequests(); |
| 546 // We should get a notification about access control check failure. | 548 // We should get a notification about access control check failure. |
| 547 EXPECT_FALSE(m_willFollowRedirect); | 549 EXPECT_FALSE(m_willFollowRedirect); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 563 // Add a CORS simple header. | 565 // Add a CORS simple header. |
| 564 request.setHTTPHeaderField("accept", "application/json"); | 566 request.setHTTPHeaderField("accept", "application/json"); |
| 565 | 567 |
| 566 // Create a redirect response that allows the redirect to pass the access co
ntrol checks. | 568 // Create a redirect response that allows the redirect to pass the access co
ntrol checks. |
| 567 m_expectedRedirectResponse = WebURLResponse(); | 569 m_expectedRedirectResponse = WebURLResponse(); |
| 568 m_expectedRedirectResponse.initialize(); | 570 m_expectedRedirectResponse.initialize(); |
| 569 m_expectedRedirectResponse.setMIMEType("text/html"); | 571 m_expectedRedirectResponse.setMIMEType("text/html"); |
| 570 m_expectedRedirectResponse.setHTTPStatusCode(301); | 572 m_expectedRedirectResponse.setHTTPStatusCode(301); |
| 571 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); | 573 m_expectedRedirectResponse.setHTTPHeaderField("Location", redirect); |
| 572 m_expectedRedirectResponse.addHTTPHeaderField("access-control-allow-origin",
"*"); | 574 m_expectedRedirectResponse.addHTTPHeaderField("access-control-allow-origin",
"*"); |
| 573 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRed
irectResponse, m_frameFilePath); | 575 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
edirectResponse, m_frameFilePath); |
| 574 | 576 |
| 575 m_expectedNewRequest = WebURLRequest(); | 577 m_expectedNewRequest = WebURLRequest(); |
| 576 m_expectedNewRequest.initialize(); | 578 m_expectedNewRequest.initialize(); |
| 577 m_expectedNewRequest.setURL(redirectURL); | 579 m_expectedNewRequest.setURL(redirectURL); |
| 578 m_expectedNewRequest.setHTTPHeaderField("accept", "application/json"); | 580 m_expectedNewRequest.setHTTPHeaderField("accept", "application/json"); |
| 579 | 581 |
| 580 m_expectedResponse = WebURLResponse(); | 582 m_expectedResponse = WebURLResponse(); |
| 581 m_expectedResponse.initialize(); | 583 m_expectedResponse.initialize(); |
| 582 m_expectedResponse.setMIMEType("text/html"); | 584 m_expectedResponse.setMIMEType("text/html"); |
| 583 m_expectedResponse.setHTTPStatusCode(200); | 585 m_expectedResponse.setHTTPStatusCode(200); |
| 584 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); | 586 m_expectedResponse.addHTTPHeaderField("access-control-allow-origin", "*"); |
| 585 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, m_exp
ectedResponse, m_frameFilePath); | 587 Platform::current()->getURLLoaderMockFactory()->registerURL(redirectURL, m_e
xpectedResponse, m_frameFilePath); |
| 586 | 588 |
| 587 WebURLLoaderOptions options; | 589 WebURLLoaderOptions options; |
| 588 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 590 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 589 m_expectedLoader = createAssociatedURLLoader(options); | 591 m_expectedLoader = createAssociatedURLLoader(options); |
| 590 EXPECT_TRUE(m_expectedLoader); | 592 EXPECT_TRUE(m_expectedLoader); |
| 591 m_expectedLoader->loadAsynchronously(request, this); | 593 m_expectedLoader->loadAsynchronously(request, this); |
| 592 serveRequests(); | 594 serveRequests(); |
| 593 // We should not receive a notification for the redirect. | 595 // We should not receive a notification for the redirect. |
| 594 EXPECT_FALSE(m_willFollowRedirect); | 596 EXPECT_FALSE(m_willFollowRedirect); |
| 595 EXPECT_TRUE(m_didReceiveResponse); | 597 EXPECT_TRUE(m_didReceiveResponse); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 KURL url = toKURL("http://www.other.com/CrossOriginHeaderAllowResponseHeader
s.html"); | 692 KURL url = toKURL("http://www.other.com/CrossOriginHeaderAllowResponseHeader
s.html"); |
| 691 request.setURL(url); | 693 request.setURL(url); |
| 692 | 694 |
| 693 WebString headerNameString(WebString::fromUTF8("non-whitelisted")); | 695 WebString headerNameString(WebString::fromUTF8("non-whitelisted")); |
| 694 m_expectedResponse = WebURLResponse(); | 696 m_expectedResponse = WebURLResponse(); |
| 695 m_expectedResponse.initialize(); | 697 m_expectedResponse.initialize(); |
| 696 m_expectedResponse.setMIMEType("text/html"); | 698 m_expectedResponse.setMIMEType("text/html"); |
| 697 m_expectedResponse.setHTTPStatusCode(200); | 699 m_expectedResponse.setHTTPStatusCode(200); |
| 698 m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"); | 700 m_expectedResponse.addHTTPHeaderField("Access-Control-Allow-Origin", "*"); |
| 699 m_expectedResponse.addHTTPHeaderField(headerNameString, "foo"); | 701 m_expectedResponse.addHTTPHeaderField(headerNameString, "foo"); |
| 700 Platform::current()->unitTestSupport()->registerMockedURL(url, m_expectedRes
ponse, m_frameFilePath); | 702 Platform::current()->getURLLoaderMockFactory()->registerURL(url, m_expectedR
esponse, m_frameFilePath); |
| 701 | 703 |
| 702 WebURLLoaderOptions options; | 704 WebURLLoaderOptions options; |
| 703 options.exposeAllResponseHeaders = true; // This turns off response whitelis
ting. | 705 options.exposeAllResponseHeaders = true; // This turns off response whitelis
ting. |
| 704 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; | 706 options.crossOriginRequestPolicy = WebURLLoaderOptions::CrossOriginRequestPo
licyUseAccessControl; |
| 705 m_expectedLoader = createAssociatedURLLoader(options); | 707 m_expectedLoader = createAssociatedURLLoader(options); |
| 706 EXPECT_TRUE(m_expectedLoader); | 708 EXPECT_TRUE(m_expectedLoader); |
| 707 m_expectedLoader->loadAsynchronously(request, this); | 709 m_expectedLoader->loadAsynchronously(request, this); |
| 708 serveRequests(); | 710 serveRequests(); |
| 709 EXPECT_TRUE(m_didReceiveResponse); | 711 EXPECT_TRUE(m_didReceiveResponse); |
| 710 EXPECT_TRUE(m_didReceiveData); | 712 EXPECT_TRUE(m_didReceiveData); |
| 711 EXPECT_TRUE(m_didFinishLoading); | 713 EXPECT_TRUE(m_didFinishLoading); |
| 712 | 714 |
| 713 EXPECT_FALSE(m_actualResponse.httpHeaderField(headerNameString).isEmpty()); | 715 EXPECT_FALSE(m_actualResponse.httpHeaderField(headerNameString).isEmpty()); |
| 714 } | 716 } |
| 715 | 717 |
| 716 } // namespace blink | 718 } // namespace blink |
| OLD | NEW |