Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Side by Side Diff: third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp

Issue 2930323003: Show client placeholders for Server LoFi images. (Closed)
Patch Set: rebase flag_descriptions.cc Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013, Google Inc. All rights reserved. 2 * Copyright (c) 2013, 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
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 "core/loader/resource/ImageResource.h" 31 #include "core/loader/resource/ImageResource.h"
32 32
33 #include <memory> 33 #include <memory>
34 #include "core/loader/resource/MockImageResourceObserver.h" 34 #include "core/loader/resource/MockImageResourceObserver.h"
35 #include "platform/RuntimeEnabledFeatures.h"
35 #include "platform/SharedBuffer.h" 36 #include "platform/SharedBuffer.h"
36 #include "platform/exported/WrappedResourceResponse.h" 37 #include "platform/exported/WrappedResourceResponse.h"
37 #include "platform/graphics/BitmapImage.h" 38 #include "platform/graphics/BitmapImage.h"
38 #include "platform/graphics/Image.h" 39 #include "platform/graphics/Image.h"
39 #include "platform/loader/fetch/FetchInitiatorInfo.h" 40 #include "platform/loader/fetch/FetchInitiatorInfo.h"
40 #include "platform/loader/fetch/FetchParameters.h" 41 #include "platform/loader/fetch/FetchParameters.h"
41 #include "platform/loader/fetch/MemoryCache.h" 42 #include "platform/loader/fetch/MemoryCache.h"
42 #include "platform/loader/fetch/ResourceFetcher.h" 43 #include "platform/loader/fetch/ResourceFetcher.h"
43 #include "platform/loader/fetch/ResourceLoader.h" 44 #include "platform/loader/fetch/ResourceLoader.h"
44 #include "platform/loader/fetch/UniqueIdentifier.h" 45 #include "platform/loader/fetch/UniqueIdentifier.h"
45 #include "platform/loader/testing/MockFetchContext.h" 46 #include "platform/loader/testing/MockFetchContext.h"
46 #include "platform/loader/testing/MockResourceClient.h" 47 #include "platform/loader/testing/MockResourceClient.h"
47 #include "platform/scheduler/test/fake_web_task_runner.h" 48 #include "platform/scheduler/test/fake_web_task_runner.h"
49 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
48 #include "platform/testing/ScopedMockedURL.h" 50 #include "platform/testing/ScopedMockedURL.h"
49 #include "platform/testing/TestingPlatformSupport.h" 51 #include "platform/testing/TestingPlatformSupport.h"
50 #include "platform/testing/UnitTestHelpers.h" 52 #include "platform/testing/UnitTestHelpers.h"
51 #include "platform/wtf/PtrUtil.h" 53 #include "platform/wtf/PtrUtil.h"
52 #include "platform/wtf/text/Base64.h" 54 #include "platform/wtf/text/Base64.h"
53 #include "public/platform/Platform.h" 55 #include "public/platform/Platform.h"
54 #include "public/platform/WebCachePolicy.h" 56 #include "public/platform/WebCachePolicy.h"
55 #include "public/platform/WebURL.h" 57 #include "public/platform/WebURL.h"
56 #include "public/platform/WebURLLoaderMockFactory.h" 58 #include "public/platform/WebURLLoaderMockFactory.h"
57 #include "public/platform/WebURLResponse.h" 59 #include "public/platform/WebURLResponse.h"
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 338 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
337 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsSVGImage()); 339 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsSVGImage());
338 } 340 }
339 341
340 ResourceFetcher* CreateFetcher() { 342 ResourceFetcher* CreateFetcher() {
341 auto* context = 343 auto* context =
342 MockFetchContext::Create(MockFetchContext::kShouldLoadNewResource); 344 MockFetchContext::Create(MockFetchContext::kShouldLoadNewResource);
343 return ResourceFetcher::Create(context, context->GetTaskRunner()); 345 return ResourceFetcher::Create(context, context->GetTaskRunner());
344 } 346 }
345 347
348 using ScopedClientPlaceholderForServerLoFiForTest =
349 ScopedRuntimeEnabledFeatureForTest<
350 RuntimeEnabledFeatures::ClientPlaceholdersForServerLoFiEnabled,
351 RuntimeEnabledFeatures::SetClientPlaceholdersForServerLoFiEnabled>;
352
346 TEST(ImageResourceTest, MultipartImage) { 353 TEST(ImageResourceTest, MultipartImage) {
347 ResourceFetcher* fetcher = CreateFetcher(); 354 ResourceFetcher* fetcher = CreateFetcher();
348 KURL test_url(kParsedURLString, kTestURL); 355 KURL test_url(kParsedURLString, kTestURL);
349 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 356 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
350 357
351 // Emulate starting a real load, but don't expect any "real" 358 // Emulate starting a real load, but don't expect any "real"
352 // WebURLLoaderClient callbacks. 359 // WebURLLoaderClient callbacks.
353 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 360 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
354 image_resource->SetIdentifier(CreateUniqueIdentifier()); 361 image_resource->SetIdentifier(CreateUniqueIdentifier());
355 fetcher->StartLoad(image_resource); 362 fetcher->StartLoad(image_resource);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 sizeof(kJpegImage)); 560 sizeof(kJpegImage));
554 image_resource->Finish(); 561 image_resource->Finish();
555 EXPECT_FALSE(image_resource->ErrorOccurred()); 562 EXPECT_FALSE(image_resource->ErrorOccurred());
556 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 563 ASSERT_TRUE(image_resource->GetContent()->HasImage());
557 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 564 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
558 EXPECT_EQ(2, observer->ImageChangedCount()); 565 EXPECT_EQ(2, observer->ImageChangedCount());
559 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 566 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
560 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 567 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
561 } 568 }
562 569
563 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) { 570 class ImageResourceReloadTest : public ::testing::TestWithParam<bool> {
571 public:
572 ~ImageResourceReloadTest() override {}
573
574 bool IsClientPlaceholderForServerLoFiEnabled() const { return GetParam(); }
575
576 void SetUp() override {
577 scoped_show_placeholder_.reset(
578 new ScopedClientPlaceholderForServerLoFiForTest(GetParam()));
579 }
580
581 private:
582 std::unique_ptr<ScopedClientPlaceholderForServerLoFiForTest>
583 scoped_show_placeholder_;
584 };
585
586 TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderAfterFinished) {
564 KURL test_url(kParsedURLString, kTestURL); 587 KURL test_url(kParsedURLString, kTestURL);
565 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 588 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
566 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 589 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
567 image_resource->SetStatus(ResourceStatus::kPending); 590 image_resource->SetStatus(ResourceStatus::kPending);
568 image_resource->NotifyStartLoad(); 591 image_resource->NotifyStartLoad();
569 592
570 std::unique_ptr<MockImageResourceObserver> observer = 593 std::unique_ptr<MockImageResourceObserver> observer =
571 MockImageResourceObserver::Create(image_resource->GetContent()); 594 MockImageResourceObserver::Create(image_resource->GetContent());
572 ResourceFetcher* fetcher = CreateFetcher(); 595 ResourceFetcher* fetcher = CreateFetcher();
573 596
574 // Send the image response. 597 // Send the image response.
575 ResourceResponse resource_response(NullURL(), "image/jpeg", 598 ResourceResponse resource_response(NullURL(), "image/jpeg",
576 sizeof(kJpegImage), g_null_atom); 599 sizeof(kJpegImage), g_null_atom);
577 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform", 600 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform",
578 "empty-image"); 601 "empty-image");
579 602
580 image_resource->ResponseReceived(resource_response, nullptr); 603 image_resource->ResponseReceived(resource_response, nullptr);
581 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), 604 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage),
582 sizeof(kJpegImage)); 605 sizeof(kJpegImage));
583 image_resource->Finish(); 606 image_resource->Finish();
584 EXPECT_FALSE(image_resource->ErrorOccurred()); 607 EXPECT_FALSE(image_resource->ErrorOccurred());
585 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 608 ASSERT_TRUE(image_resource->GetContent()->HasImage());
586 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 609 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
587 EXPECT_EQ(2, observer->ImageChangedCount()); 610 EXPECT_EQ(2, observer->ImageChangedCount());
588 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); 611 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
589 // The observer should have been notified that the image load completed. 612 // The observer should have been notified that the image load completed.
590 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 613 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
591 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); 614 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished());
592 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 615 EXPECT_NE(IsClientPlaceholderForServerLoFiEnabled(),
616 image_resource->GetContent()->GetImage()->IsBitmapImage());
617 EXPECT_EQ(IsClientPlaceholderForServerLoFiEnabled(),
618 image_resource->ShouldShowPlaceholder());
593 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); 619 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
594 EXPECT_EQ(kJpegImageHeight, 620 EXPECT_EQ(kJpegImageHeight,
595 image_resource->GetContent()->GetImage()->height()); 621 image_resource->GetContent()->GetImage()->height());
596 622
597 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. 623 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading.
598 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 624 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
599 Resource::kReloadAlways); 625 Resource::kReloadAlways);
600 626
601 EXPECT_EQ(3, observer->ImageChangedCount()); 627 EXPECT_EQ(3, observer->ImageChangedCount());
602 TestThatReloadIsStartedThenServeReload( 628 TestThatReloadIsStartedThenServeReload(
603 test_url, image_resource, image_resource->GetContent(), observer.get(), 629 test_url, image_resource, image_resource->GetContent(), observer.get(),
604 WebCachePolicy::kBypassingCache, false); 630 WebCachePolicy::kBypassingCache, false);
605 } 631 }
606 632
607 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) { 633 TEST_P(ImageResourceReloadTest,
634 ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) {
608 KURL test_url(kParsedURLString, kTestURL); 635 KURL test_url(kParsedURLString, kTestURL);
609 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 636 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
610 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 637 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
611 image_resource->SetStatus(ResourceStatus::kPending); 638 image_resource->SetStatus(ResourceStatus::kPending);
612 image_resource->NotifyStartLoad(); 639 image_resource->NotifyStartLoad();
613 640
614 std::unique_ptr<MockImageResourceObserver> observer = 641 std::unique_ptr<MockImageResourceObserver> observer =
615 MockImageResourceObserver::Create(image_resource->GetContent()); 642 MockImageResourceObserver::Create(image_resource->GetContent());
616 ResourceFetcher* fetcher = CreateFetcher(); 643 ResourceFetcher* fetcher = CreateFetcher();
617 644
618 // Send the image response. 645 // Send the image response.
619 ResourceResponse resource_response(NullURL(), "image/jpeg", 646 ResourceResponse resource_response(NullURL(), "image/jpeg",
620 sizeof(kJpegImage), g_null_atom); 647 sizeof(kJpegImage), g_null_atom);
621 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low"); 648 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low");
622 649
623 image_resource->ResponseReceived(resource_response, nullptr); 650 image_resource->ResponseReceived(resource_response, nullptr);
624 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), 651 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage),
625 sizeof(kJpegImage)); 652 sizeof(kJpegImage));
626 image_resource->Finish(); 653 image_resource->Finish();
627 EXPECT_FALSE(image_resource->ErrorOccurred()); 654 EXPECT_FALSE(image_resource->ErrorOccurred());
628 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 655 ASSERT_TRUE(image_resource->GetContent()->HasImage());
629 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 656 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
630 EXPECT_EQ(2, observer->ImageChangedCount()); 657 EXPECT_EQ(2, observer->ImageChangedCount());
631 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); 658 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
632 // The observer should have been notified that the image load completed. 659 // The observer should have been notified that the image load completed.
633 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 660 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
634 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); 661 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished());
635 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 662 EXPECT_NE(IsClientPlaceholderForServerLoFiEnabled(),
663 image_resource->GetContent()->GetImage()->IsBitmapImage());
664 EXPECT_EQ(IsClientPlaceholderForServerLoFiEnabled(),
665 image_resource->ShouldShowPlaceholder());
636 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); 666 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
637 EXPECT_EQ(kJpegImageHeight, 667 EXPECT_EQ(kJpegImageHeight,
638 image_resource->GetContent()->GetImage()->height()); 668 image_resource->GetContent()->GetImage()->height());
639 669
640 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. 670 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading.
641 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 671 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
642 Resource::kReloadAlways); 672 Resource::kReloadAlways);
643 673
644 EXPECT_EQ(3, observer->ImageChangedCount()); 674 EXPECT_EQ(3, observer->ImageChangedCount());
645 TestThatReloadIsStartedThenServeReload( 675 TestThatReloadIsStartedThenServeReload(
646 test_url, image_resource, image_resource->GetContent(), observer.get(), 676 test_url, image_resource, image_resource->GetContent(), observer.get(),
647 WebCachePolicy::kBypassingCache, false); 677 WebCachePolicy::kBypassingCache, false);
648 } 678 }
649 679
650 TEST(ImageResourceTest, 680 TEST_P(ImageResourceReloadTest,
651 ReloadIfLoFiOrPlaceholderAfterFinishedWithoutLoFiHeaders) { 681 ReloadIfLoFiOrPlaceholderAfterFinishedWithoutLoFiHeaders) {
652 KURL test_url(kParsedURLString, kTestURL); 682 KURL test_url(kParsedURLString, kTestURL);
653 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 683 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
654 ResourceRequest request(test_url); 684 ResourceRequest request(test_url);
655 request.SetPreviewsState(WebURLRequest::kServerLoFiOn); 685 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
656 request.SetFetchCredentialsMode(WebURLRequest::kFetchCredentialsModeOmit); 686 request.SetFetchCredentialsMode(WebURLRequest::kFetchCredentialsModeOmit);
657 ImageResource* image_resource = ImageResource::Create(request); 687 ImageResource* image_resource = ImageResource::Create(request);
658 image_resource->SetStatus(ResourceStatus::kPending); 688 image_resource->SetStatus(ResourceStatus::kPending);
659 image_resource->NotifyStartLoad(); 689 image_resource->NotifyStartLoad();
660 690
661 std::unique_ptr<MockImageResourceObserver> observer = 691 std::unique_ptr<MockImageResourceObserver> observer =
(...skipping 24 matching lines...) Expand all
686 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. 716 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading.
687 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 717 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
688 Resource::kReloadAlways); 718 Resource::kReloadAlways);
689 719
690 // The image should not have been reloaded, since it didn't have the LoFi 720 // The image should not have been reloaded, since it didn't have the LoFi
691 // image response headers. 721 // image response headers.
692 EXPECT_EQ(2, observer->ImageChangedCount()); 722 EXPECT_EQ(2, observer->ImageChangedCount());
693 EXPECT_TRUE(image_resource->IsLoaded()); 723 EXPECT_TRUE(image_resource->IsLoaded());
694 } 724 }
695 725
696 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderViaResourceFetcher) { 726 TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderViaResourceFetcher) {
697 ResourceFetcher* fetcher = CreateFetcher(); 727 ResourceFetcher* fetcher = CreateFetcher();
698 728
699 KURL test_url(kParsedURLString, kTestURL); 729 KURL test_url(kParsedURLString, kTestURL);
700 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 730 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
701 731
702 ResourceRequest request = ResourceRequest(test_url); 732 ResourceRequest request = ResourceRequest(test_url);
703 request.SetPreviewsState(WebURLRequest::kServerLoFiOn); 733 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
704 FetchParameters fetch_params(request); 734 FetchParameters fetch_params(request);
705 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); 735 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher);
706 ImageResourceContent* content = image_resource->GetContent(); 736 ImageResourceContent* content = image_resource->GetContent();
(...skipping 21 matching lines...) Expand all
728 758
729 EXPECT_EQ(3, observer->ImageChangedCount()); 759 EXPECT_EQ(3, observer->ImageChangedCount());
730 760
731 TestThatReloadIsStartedThenServeReload( 761 TestThatReloadIsStartedThenServeReload(
732 test_url, image_resource, content, observer.get(), 762 test_url, image_resource, content, observer.get(),
733 WebCachePolicy::kBypassingCache, false); 763 WebCachePolicy::kBypassingCache, false);
734 764
735 GetMemoryCache()->Remove(image_resource); 765 GetMemoryCache()->Remove(image_resource);
736 } 766 }
737 767
738 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) { 768 TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderBeforeResponse) {
739 KURL test_url(kParsedURLString, kTestURL); 769 KURL test_url(kParsedURLString, kTestURL);
740 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 770 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
741 771
772 ResourceRequest request(test_url);
773 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
774 FetchParameters fetch_params(request);
775 ResourceFetcher* fetcher = CreateFetcher();
776
777 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher);
778 std::unique_ptr<MockImageResourceObserver> observer =
779 MockImageResourceObserver::Create(image_resource->GetContent());
780
781 EXPECT_FALSE(image_resource->ErrorOccurred());
782 EXPECT_EQ(IsClientPlaceholderForServerLoFiEnabled(),
783 image_resource->ShouldShowPlaceholder());
784
785 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading.
786 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
787 Resource::kReloadAlways);
788
789 EXPECT_EQ(1, observer->ImageChangedCount());
790 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged());
791 // The observer should not have been notified of completion yet, since the
792 // image is still loading.
793 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
794
795 TestThatReloadIsStartedThenServeReload(
796 test_url, image_resource, image_resource->GetContent(), observer.get(),
797 WebCachePolicy::kBypassingCache, false);
798 }
799
800 TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderDuringResponse) {
801 KURL test_url(kParsedURLString, kTestURL);
802 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
803
742 ResourceRequest request(test_url); 804 ResourceRequest request(test_url);
743 request.SetPreviewsState(WebURLRequest::kServerLoFiOn); 805 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
744 FetchParameters fetch_params(request); 806 FetchParameters fetch_params(request);
745 ResourceFetcher* fetcher = CreateFetcher(); 807 ResourceFetcher* fetcher = CreateFetcher();
746 808
747 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); 809 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher);
748 std::unique_ptr<MockImageResourceObserver> observer = 810 std::unique_ptr<MockImageResourceObserver> observer =
749 MockImageResourceObserver::Create(image_resource->GetContent()); 811 MockImageResourceObserver::Create(image_resource->GetContent());
750 812
751 // Send the image response. 813 // Send the image response.
814 ResourceResponse resource_response(test_url, "image/jpeg", sizeof(kJpegImage),
815 g_null_atom);
816 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform",
817 "empty-image");
818
752 image_resource->Loader()->DidReceiveResponse( 819 image_resource->Loader()->DidReceiveResponse(
753 WrappedResourceResponse(ResourceResponse( 820 WrappedResourceResponse(resource_response));
754 test_url, "image/jpeg", sizeof(kJpegImage), g_null_atom)));
755 image_resource->Loader()->DidReceiveData( 821 image_resource->Loader()->DidReceiveData(
756 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); 822 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage));
757 823
758 EXPECT_FALSE(image_resource->ErrorOccurred()); 824 EXPECT_FALSE(image_resource->ErrorOccurred());
759 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 825 ASSERT_TRUE(image_resource->GetContent()->HasImage());
760 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 826 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
761 EXPECT_EQ(1, observer->ImageChangedCount()); 827 EXPECT_EQ(1, observer->ImageChangedCount());
762 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); 828 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
763 EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); 829 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
764 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 830 EXPECT_EQ(IsClientPlaceholderForServerLoFiEnabled(),
831 image_resource->ShouldShowPlaceholder());
765 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); 832 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
766 EXPECT_EQ(kJpegImageHeight, 833 EXPECT_EQ(kJpegImageHeight,
767 image_resource->GetContent()->GetImage()->height()); 834 image_resource->GetContent()->GetImage()->height());
768 835
769 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. 836 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading.
770 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 837 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
771 Resource::kReloadAlways); 838 Resource::kReloadAlways);
772 839
773 EXPECT_EQ(2, observer->ImageChangedCount()); 840 EXPECT_EQ(2, observer->ImageChangedCount());
774 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged()); 841 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged());
775 // The observer should not have been notified of completion yet, since the 842 // The observer should not have been notified of completion yet, since the
776 // image is still loading. 843 // image is still loading.
777 EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); 844 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
778 845
779 TestThatReloadIsStartedThenServeReload( 846 TestThatReloadIsStartedThenServeReload(
780 test_url, image_resource, image_resource->GetContent(), observer.get(), 847 test_url, image_resource, image_resource->GetContent(), observer.get(),
781 WebCachePolicy::kBypassingCache, false); 848 WebCachePolicy::kBypassingCache, false);
782 } 849 }
783 850
784 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { 851 TEST_P(ImageResourceReloadTest, ReloadIfLoFiOrPlaceholderForPlaceholder) {
785 KURL test_url(kParsedURLString, kTestURL); 852 KURL test_url(kParsedURLString, kTestURL);
786 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 853 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
787 854
788 ResourceFetcher* fetcher = CreateFetcher(); 855 ResourceFetcher* fetcher = CreateFetcher();
789 FetchParameters params{ResourceRequest(test_url)}; 856 FetchParameters params{ResourceRequest(test_url)};
790 params.SetAllowImagePlaceholder(); 857 params.SetAllowImagePlaceholder();
791 ImageResource* image_resource = ImageResource::Fetch(params, fetcher); 858 ImageResource* image_resource = ImageResource::Fetch(params, fetcher);
792 EXPECT_EQ(FetchParameters::kAllowPlaceholder, 859 EXPECT_EQ(FetchParameters::kAllowPlaceholder,
793 params.GetPlaceholderImageRequestType()); 860 params.GetPlaceholderImageRequestType());
794 std::unique_ptr<MockImageResourceObserver> observer = 861 std::unique_ptr<MockImageResourceObserver> observer =
795 MockImageResourceObserver::Create(image_resource->GetContent()); 862 MockImageResourceObserver::Create(image_resource->GetContent());
796 863
797 TestThatIsPlaceholderRequestAndServeResponse(test_url, image_resource, 864 TestThatIsPlaceholderRequestAndServeResponse(test_url, image_resource,
798 observer.get()); 865 observer.get());
799 866
800 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 867 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
801 Resource::kReloadAlways); 868 Resource::kReloadAlways);
802 869
803 TestThatReloadIsStartedThenServeReload( 870 TestThatReloadIsStartedThenServeReload(
804 test_url, image_resource, image_resource->GetContent(), observer.get(), 871 test_url, image_resource, image_resource->GetContent(), observer.get(),
805 WebCachePolicy::kBypassingCache, false); 872 WebCachePolicy::kBypassingCache, false);
806 } 873 }
807 874
875 INSTANTIATE_TEST_CASE_P(/* no prefix */,
876 ImageResourceReloadTest,
877 ::testing::Bool());
878
808 TEST(ImageResourceTest, SVGImage) { 879 TEST(ImageResourceTest, SVGImage) {
809 KURL url(kParsedURLString, "http://127.0.0.1:8000/foo"); 880 KURL url(kParsedURLString, "http://127.0.0.1:8000/foo");
810 ImageResource* image_resource = ImageResource::CreateForTest(url); 881 ImageResource* image_resource = ImageResource::CreateForTest(url);
811 std::unique_ptr<MockImageResourceObserver> observer = 882 std::unique_ptr<MockImageResourceObserver> observer =
812 MockImageResourceObserver::Create(image_resource->GetContent()); 883 MockImageResourceObserver::Create(image_resource->GetContent());
813 884
814 ReceiveResponse(image_resource, url, "image/svg+xml", kSvgImage, 885 ReceiveResponse(image_resource, url, "image/svg+xml", kSvgImage,
815 strlen(kSvgImage)); 886 strlen(kSvgImage));
816 887
817 EXPECT_FALSE(image_resource->ErrorOccurred()); 888 EXPECT_FALSE(image_resource->ErrorOccurred());
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after
1689 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 1760 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
1690 image_resource->SetStatus(ResourceStatus::kPending); 1761 image_resource->SetStatus(ResourceStatus::kPending);
1691 image_resource->NotifyStartLoad(); 1762 image_resource->NotifyStartLoad();
1692 1763
1693 std::unique_ptr<MockImageResourceObserver> observer = 1764 std::unique_ptr<MockImageResourceObserver> observer =
1694 MockImageResourceObserver::Create(image_resource->GetContent()); 1765 MockImageResourceObserver::Create(image_resource->GetContent());
1695 1766
1696 // Send the image response. 1767 // Send the image response.
1697 ResourceResponse resource_response(NullURL(), "image/jpeg", 1768 ResourceResponse resource_response(NullURL(), "image/jpeg",
1698 sizeof(kJpegImage2), g_null_atom); 1769 sizeof(kJpegImage2), g_null_atom);
1699 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low");
1700 1770
1701 image_resource->ResponseReceived(resource_response, nullptr); 1771 image_resource->ResponseReceived(resource_response, nullptr);
1702 1772
1703 // This is number is sufficiently large amount of bytes necessary for the 1773 // This is number is sufficiently large amount of bytes necessary for the
1704 // image to be created (since the size is known). This was determined by 1774 // image to be created (since the size is known). This was determined by
1705 // appending one byte at a time (with flushes) until the image was decoded. 1775 // appending one byte at a time (with flushes) until the image was decoded.
1706 size_t meaningful_image_size = 280; 1776 size_t meaningful_image_size = 280;
1707 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage2), 1777 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage2),
1708 meaningful_image_size); 1778 meaningful_image_size);
1709 size_t bytes_sent = meaningful_image_size; 1779 size_t bytes_sent = meaningful_image_size;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1762 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 1832 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
1763 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 1833 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
1764 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width()); 1834 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width());
1765 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height()); 1835 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height());
1766 1836
1767 WTF::SetTimeFunctionsForTesting(nullptr); 1837 WTF::SetTimeFunctionsForTesting(nullptr);
1768 } 1838 }
1769 1839
1770 } // namespace 1840 } // namespace
1771 } // namespace blink 1841 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698