| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014, Google Inc. All rights reserved. | 2 * Copyright (c) 2014, 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 14 matching lines...) Expand all Loading... |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "platform/loader/fetch/MemoryCache.h" | 31 #include "platform/loader/fetch/MemoryCache.h" |
| 32 | 32 |
| 33 #include "platform/loader/fetch/FetchContext.h" | 33 #include "platform/loader/fetch/FetchContext.h" |
| 34 #include "platform/loader/fetch/FetchParameters.h" | 34 #include "platform/loader/fetch/FetchParameters.h" |
| 35 #include "platform/loader/fetch/RawResource.h" | |
| 36 #include "platform/loader/fetch/Resource.h" | 35 #include "platform/loader/fetch/Resource.h" |
| 37 #include "platform/loader/fetch/ResourceFetcher.h" | 36 #include "platform/loader/fetch/ResourceFetcher.h" |
| 38 #include "platform/loader/fetch/ResourceRequest.h" | 37 #include "platform/loader/fetch/ResourceRequest.h" |
| 39 #include "platform/loader/testing/MockFetchContext.h" | 38 #include "platform/loader/testing/MockFetchContext.h" |
| 40 #include "platform/loader/testing/MockResource.h" | 39 #include "platform/loader/testing/MockResource.h" |
| 41 #include "platform/testing/TestingPlatformSupport.h" | 40 #include "platform/testing/TestingPlatformSupport.h" |
| 42 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
| 43 | 42 |
| 44 namespace blink { | 43 namespace blink { |
| 45 | 44 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 72 if (request.Url().IsNull()) | 71 if (request.Url().IsNull()) |
| 73 request.SetURL(KURL(kParsedURLString, kResourceURL)); | 72 request.SetURL(KURL(kParsedURLString, kResourceURL)); |
| 74 MockResource* resource = MockResource::Create(request); | 73 MockResource* resource = MockResource::Create(request); |
| 75 resource->SetResponse(ResourceResponse(KURL(kParsedURLString, kResourceURL), | 74 resource->SetResponse(ResourceResponse(KURL(kParsedURLString, kResourceURL), |
| 76 "text/html", 0, g_null_atom)); | 75 "text/html", 0, g_null_atom)); |
| 77 resource->Finish(); | 76 resource->Finish(); |
| 78 GetMemoryCache()->Add(resource); | 77 GetMemoryCache()->Add(resource); |
| 79 | 78 |
| 80 return resource; | 79 return resource; |
| 81 } | 80 } |
| 82 // TODO(toyoshim): Consider to use MockResource for all tests instead of | |
| 83 // RawResource. | |
| 84 RawResource* FetchRawResource() { | |
| 85 ResourceRequest resource_request(KURL(kParsedURLString, kResourceURL)); | |
| 86 resource_request.SetRequestContext(WebURLRequest::kRequestContextInternal); | |
| 87 FetchParameters fetch_params(resource_request, FetchInitiatorInfo()); | |
| 88 return RawResource::Fetch(fetch_params, Fetcher()); | |
| 89 } | |
| 90 MockResource* FetchMockResource() { | 81 MockResource* FetchMockResource() { |
| 91 FetchParameters fetch_params( | 82 FetchParameters fetch_params( |
| 92 ResourceRequest(KURL(kParsedURLString, kResourceURL)), | 83 ResourceRequest(KURL(kParsedURLString, kResourceURL)), |
| 93 FetchInitiatorInfo()); | 84 FetchInitiatorInfo()); |
| 94 return MockResource::Fetch(fetch_params, Fetcher()); | 85 return MockResource::Fetch(fetch_params, Fetcher()); |
| 95 } | 86 } |
| 96 ResourceFetcher* Fetcher() const { return fetcher_.Get(); } | 87 ResourceFetcher* Fetcher() const { return fetcher_.Get(); } |
| 97 void AdvanceClock(double seconds) { platform_->AdvanceClockSeconds(seconds); } | 88 void AdvanceClock(double seconds) { platform_->AdvanceClockSeconds(seconds); } |
| 98 | 89 |
| 99 private: | 90 private: |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 first_resource->SetResponse(fresh200_response); | 409 first_resource->SetResponse(fresh200_response); |
| 419 first_resource->Finish(); | 410 first_resource->Finish(); |
| 420 GetMemoryCache()->Add(first_resource); | 411 GetMemoryCache()->Add(first_resource); |
| 421 | 412 |
| 422 AdvanceClock(500.); | 413 AdvanceClock(500.); |
| 423 | 414 |
| 424 MockResource* fetched = FetchMockResource(); | 415 MockResource* fetched = FetchMockResource(); |
| 425 EXPECT_NE(first_resource, fetched); | 416 EXPECT_NE(first_resource, fetched); |
| 426 } | 417 } |
| 427 | 418 |
| 428 TEST_F(MemoryCacheCorrectnessTest, PostToSameURLTwice) { | |
| 429 ResourceRequest request1(KURL(kParsedURLString, kResourceURL)); | |
| 430 request1.SetHTTPMethod(HTTPNames::POST); | |
| 431 RawResource* resource1 = | |
| 432 RawResource::Create(ResourceRequest(request1.Url()), Resource::kRaw); | |
| 433 resource1->SetStatus(ResourceStatus::kPending); | |
| 434 GetMemoryCache()->Add(resource1); | |
| 435 | |
| 436 ResourceRequest request2(KURL(kParsedURLString, kResourceURL)); | |
| 437 request2.SetHTTPMethod(HTTPNames::POST); | |
| 438 FetchParameters fetch2(request2, FetchInitiatorInfo()); | |
| 439 RawResource* resource2 = RawResource::FetchSynchronously(fetch2, Fetcher()); | |
| 440 | |
| 441 EXPECT_EQ(resource2, GetMemoryCache()->ResourceForURL(request2.Url())); | |
| 442 EXPECT_NE(resource1, resource2); | |
| 443 } | |
| 444 | |
| 445 TEST_F(MemoryCacheCorrectnessTest, 302RedirectNotImplicitlyFresh) { | 419 TEST_F(MemoryCacheCorrectnessTest, 302RedirectNotImplicitlyFresh) { |
| 446 KURL redirect_url(kParsedURLString, kResourceURL); | 420 KURL redirect_url(kParsedURLString, kResourceURL); |
| 447 const char kRedirectTargetUrlString[] = "http://redirect-target.com"; | 421 const char kRedirectTargetUrlString[] = "http://redirect-target.com"; |
| 448 KURL redirect_target_url(kParsedURLString, kRedirectTargetUrlString); | 422 KURL redirect_target_url(kParsedURLString, kRedirectTargetUrlString); |
| 449 | 423 |
| 450 RawResource* first_resource = | 424 MockResource* first_resource = |
| 451 RawResource::Create(ResourceRequest(redirect_url), Resource::kRaw); | 425 MockResource::Create(ResourceRequest(redirect_url)); |
| 452 | 426 |
| 453 ResourceResponse fresh302_response; | 427 ResourceResponse fresh302_response; |
| 454 fresh302_response.SetURL(redirect_url); | 428 fresh302_response.SetURL(redirect_url); |
| 455 fresh302_response.SetHTTPStatusCode(302); | 429 fresh302_response.SetHTTPStatusCode(302); |
| 456 fresh302_response.SetHTTPHeaderField(HTTPNames::Date, | 430 fresh302_response.SetHTTPHeaderField(HTTPNames::Date, |
| 457 kOriginalRequestDateAsString); | 431 kOriginalRequestDateAsString); |
| 458 fresh302_response.SetHTTPHeaderField(HTTPNames::Last_Modified, | 432 fresh302_response.SetHTTPHeaderField(HTTPNames::Last_Modified, |
| 459 kOneDayBeforeOriginalRequest); | 433 kOneDayBeforeOriginalRequest); |
| 460 fresh302_response.SetHTTPHeaderField(HTTPNames::Location, | 434 fresh302_response.SetHTTPHeaderField(HTTPNames::Location, |
| 461 kRedirectTargetUrlString); | 435 kRedirectTargetUrlString); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 472 kOriginalRequestDateAsString); | 446 kOriginalRequestDateAsString); |
| 473 fresh200_response.SetHTTPHeaderField(HTTPNames::Expires, | 447 fresh200_response.SetHTTPHeaderField(HTTPNames::Expires, |
| 474 kOneDayAfterOriginalRequest); | 448 kOneDayAfterOriginalRequest); |
| 475 | 449 |
| 476 first_resource->SetResponse(fresh200_response); | 450 first_resource->SetResponse(fresh200_response); |
| 477 first_resource->Finish(); | 451 first_resource->Finish(); |
| 478 GetMemoryCache()->Add(first_resource); | 452 GetMemoryCache()->Add(first_resource); |
| 479 | 453 |
| 480 AdvanceClock(500.); | 454 AdvanceClock(500.); |
| 481 | 455 |
| 482 RawResource* fetched = FetchRawResource(); | 456 MockResource* fetched = FetchMockResource(); |
| 483 EXPECT_NE(first_resource, fetched); | 457 EXPECT_NE(first_resource, fetched); |
| 484 } | 458 } |
| 485 | 459 |
| 486 TEST_F(MemoryCacheCorrectnessTest, 302RedirectExplicitlyFreshMaxAge) { | 460 TEST_F(MemoryCacheCorrectnessTest, 302RedirectExplicitlyFreshMaxAge) { |
| 487 KURL redirect_url(kParsedURLString, kResourceURL); | 461 KURL redirect_url(kParsedURLString, kResourceURL); |
| 488 const char kRedirectTargetUrlString[] = "http://redirect-target.com"; | 462 const char kRedirectTargetUrlString[] = "http://redirect-target.com"; |
| 489 KURL redirect_target_url(kParsedURLString, kRedirectTargetUrlString); | 463 KURL redirect_target_url(kParsedURLString, kRedirectTargetUrlString); |
| 490 | 464 |
| 491 MockResource* first_resource = | 465 MockResource* first_resource = |
| 492 MockResource::Create(ResourceRequest(redirect_url)); | 466 MockResource::Create(ResourceRequest(redirect_url)); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 first_resource->Finish(); | 532 first_resource->Finish(); |
| 559 GetMemoryCache()->Add(first_resource); | 533 GetMemoryCache()->Add(first_resource); |
| 560 | 534 |
| 561 AdvanceClock(500.); | 535 AdvanceClock(500.); |
| 562 | 536 |
| 563 MockResource* fetched = FetchMockResource(); | 537 MockResource* fetched = FetchMockResource(); |
| 564 EXPECT_EQ(first_resource, fetched); | 538 EXPECT_EQ(first_resource, fetched); |
| 565 } | 539 } |
| 566 | 540 |
| 567 } // namespace blink | 541 } // namespace blink |
| OLD | NEW |