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

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: Addressed megjablon's comments 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 image_resource->Finish(); 559 image_resource->Finish();
553 EXPECT_FALSE(image_resource->ErrorOccurred()); 560 EXPECT_FALSE(image_resource->ErrorOccurred());
554 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 561 ASSERT_TRUE(image_resource->GetContent()->HasImage());
555 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 562 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
556 EXPECT_EQ(2, observer->ImageChangedCount()); 563 EXPECT_EQ(2, observer->ImageChangedCount());
557 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 564 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
558 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 565 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
559 } 566 }
560 567
561 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) { 568 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) {
562 KURL test_url(kParsedURLString, kTestURL); 569 const bool kBools[] = {false, true};
kouhei (in TOK) 2017/07/07 01:38:03 Use TEST_P and INSTANTIATE_TEST_CASE_P(..., ::test
sclittle 2017/07/07 02:46:41 Done.
563 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 570 for (bool enable_show_placeholder_for_server_lofi : kBools) {
564 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 571 ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder(
565 image_resource->SetStatus(ResourceStatus::kPending); 572 enable_show_placeholder_for_server_lofi);
566 image_resource->NotifyStartLoad(); 573 KURL test_url(kParsedURLString, kTestURL);
574 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
575 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
576 image_resource->SetStatus(ResourceStatus::kPending);
577 image_resource->NotifyStartLoad();
567 578
568 std::unique_ptr<MockImageResourceObserver> observer = 579 std::unique_ptr<MockImageResourceObserver> observer =
569 MockImageResourceObserver::Create(image_resource->GetContent()); 580 MockImageResourceObserver::Create(image_resource->GetContent());
570 ResourceFetcher* fetcher = CreateFetcher(); 581 ResourceFetcher* fetcher = CreateFetcher();
571 582
572 // Send the image response. 583 // Send the image response.
573 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), 584 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage),
574 g_null_atom); 585 g_null_atom);
575 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform", 586 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform",
576 "empty-image"); 587 "empty-image");
577 588
578 image_resource->ResponseReceived(resource_response, nullptr); 589 image_resource->ResponseReceived(resource_response, nullptr);
579 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), 590 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage),
580 sizeof(kJpegImage)); 591 sizeof(kJpegImage));
581 image_resource->Finish(); 592 image_resource->Finish();
582 EXPECT_FALSE(image_resource->ErrorOccurred()); 593 EXPECT_FALSE(image_resource->ErrorOccurred());
583 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 594 ASSERT_TRUE(image_resource->GetContent()->HasImage());
584 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 595 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
585 EXPECT_EQ(2, observer->ImageChangedCount()); 596 EXPECT_EQ(2, observer->ImageChangedCount());
586 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); 597 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
587 // The observer should have been notified that the image load completed. 598 // The observer should have been notified that the image load completed.
588 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 599 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
589 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); 600 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished());
590 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 601 EXPECT_NE(enable_show_placeholder_for_server_lofi,
591 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); 602 image_resource->GetContent()->GetImage()->IsBitmapImage());
592 EXPECT_EQ(kJpegImageHeight, 603 EXPECT_EQ(enable_show_placeholder_for_server_lofi,
593 image_resource->GetContent()->GetImage()->height()); 604 image_resource->ShouldShowPlaceholder());
605 EXPECT_EQ(kJpegImageWidth,
606 image_resource->GetContent()->GetImage()->width());
607 EXPECT_EQ(kJpegImageHeight,
608 image_resource->GetContent()->GetImage()->height());
594 609
595 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. 610 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished
596 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 611 // loading.
597 Resource::kReloadAlways); 612 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
613 Resource::kReloadAlways);
598 614
599 EXPECT_EQ(3, observer->ImageChangedCount()); 615 EXPECT_EQ(3, observer->ImageChangedCount());
600 TestThatReloadIsStartedThenServeReload( 616 TestThatReloadIsStartedThenServeReload(
601 test_url, image_resource, image_resource->GetContent(), observer.get(), 617 test_url, image_resource, image_resource->GetContent(), observer.get(),
602 WebCachePolicy::kBypassingCache, false); 618 WebCachePolicy::kBypassingCache, false);
619 }
603 } 620 }
604 621
605 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) { 622 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) {
606 KURL test_url(kParsedURLString, kTestURL); 623 const bool kBools[] = {false, true};
607 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 624 for (bool enable_show_placeholder_for_server_lofi : kBools) {
608 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 625 ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder(
609 image_resource->SetStatus(ResourceStatus::kPending); 626 enable_show_placeholder_for_server_lofi);
610 image_resource->NotifyStartLoad(); 627 KURL test_url(kParsedURLString, kTestURL);
628 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
629 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
630 image_resource->SetStatus(ResourceStatus::kPending);
631 image_resource->NotifyStartLoad();
611 632
612 std::unique_ptr<MockImageResourceObserver> observer = 633 std::unique_ptr<MockImageResourceObserver> observer =
613 MockImageResourceObserver::Create(image_resource->GetContent()); 634 MockImageResourceObserver::Create(image_resource->GetContent());
614 ResourceFetcher* fetcher = CreateFetcher(); 635 ResourceFetcher* fetcher = CreateFetcher();
615 636
616 // Send the image response. 637 // Send the image response.
617 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), 638 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage),
618 g_null_atom); 639 g_null_atom);
619 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low"); 640 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low");
620 641
621 image_resource->ResponseReceived(resource_response, nullptr); 642 image_resource->ResponseReceived(resource_response, nullptr);
622 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), 643 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage),
623 sizeof(kJpegImage)); 644 sizeof(kJpegImage));
624 image_resource->Finish(); 645 image_resource->Finish();
625 EXPECT_FALSE(image_resource->ErrorOccurred()); 646 EXPECT_FALSE(image_resource->ErrorOccurred());
626 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 647 ASSERT_TRUE(image_resource->GetContent()->HasImage());
627 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 648 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
628 EXPECT_EQ(2, observer->ImageChangedCount()); 649 EXPECT_EQ(2, observer->ImageChangedCount());
629 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); 650 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
630 // The observer should have been notified that the image load completed. 651 // The observer should have been notified that the image load completed.
631 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 652 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
632 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); 653 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished());
633 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 654 EXPECT_NE(enable_show_placeholder_for_server_lofi,
634 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); 655 image_resource->GetContent()->GetImage()->IsBitmapImage());
635 EXPECT_EQ(kJpegImageHeight, 656 EXPECT_EQ(enable_show_placeholder_for_server_lofi,
636 image_resource->GetContent()->GetImage()->height()); 657 image_resource->ShouldShowPlaceholder());
658 EXPECT_EQ(kJpegImageWidth,
659 image_resource->GetContent()->GetImage()->width());
660 EXPECT_EQ(kJpegImageHeight,
661 image_resource->GetContent()->GetImage()->height());
637 662
638 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. 663 // Call reloadIfLoFiOrPlaceholderImage() after the image has finished
639 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 664 // loading.
640 Resource::kReloadAlways); 665 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
666 Resource::kReloadAlways);
641 667
642 EXPECT_EQ(3, observer->ImageChangedCount()); 668 EXPECT_EQ(3, observer->ImageChangedCount());
643 TestThatReloadIsStartedThenServeReload( 669 TestThatReloadIsStartedThenServeReload(
644 test_url, image_resource, image_resource->GetContent(), observer.get(), 670 test_url, image_resource, image_resource->GetContent(), observer.get(),
645 WebCachePolicy::kBypassingCache, false); 671 WebCachePolicy::kBypassingCache, false);
672 }
646 } 673 }
647 674
648 TEST(ImageResourceTest, 675 TEST(ImageResourceTest,
649 ReloadIfLoFiOrPlaceholderAfterFinishedWithoutLoFiHeaders) { 676 ReloadIfLoFiOrPlaceholderAfterFinishedWithoutLoFiHeaders) {
650 KURL test_url(kParsedURLString, kTestURL); 677 KURL test_url(kParsedURLString, kTestURL);
651 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 678 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
652 ResourceRequest request(test_url); 679 ResourceRequest request(test_url);
653 request.SetPreviewsState(WebURLRequest::kServerLoFiOn); 680 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
654 request.SetFetchCredentialsMode(WebURLRequest::kFetchCredentialsModeOmit); 681 request.SetFetchCredentialsMode(WebURLRequest::kFetchCredentialsModeOmit);
655 ImageResource* image_resource = ImageResource::Create(request); 682 ImageResource* image_resource = ImageResource::Create(request);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 752
726 EXPECT_EQ(3, observer->ImageChangedCount()); 753 EXPECT_EQ(3, observer->ImageChangedCount());
727 754
728 TestThatReloadIsStartedThenServeReload( 755 TestThatReloadIsStartedThenServeReload(
729 test_url, image_resource, content, observer.get(), 756 test_url, image_resource, content, observer.get(),
730 WebCachePolicy::kBypassingCache, false); 757 WebCachePolicy::kBypassingCache, false);
731 758
732 GetMemoryCache()->Remove(image_resource); 759 GetMemoryCache()->Remove(image_resource);
733 } 760 }
734 761
735 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) { 762 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderBeforeResponse) {
736 KURL test_url(kParsedURLString, kTestURL); 763 const bool kBools[] = {false, true};
737 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 764 for (bool enable_show_placeholder_for_server_lofi : kBools) {
765 ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder(
766 enable_show_placeholder_for_server_lofi);
767 KURL test_url(kParsedURLString, kTestURL);
768 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
738 769
739 ResourceRequest request(test_url); 770 ResourceRequest request(test_url);
740 request.SetPreviewsState(WebURLRequest::kServerLoFiOn); 771 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
741 FetchParameters fetch_params(request); 772 FetchParameters fetch_params(request);
742 ResourceFetcher* fetcher = CreateFetcher(); 773 ResourceFetcher* fetcher = CreateFetcher();
743 774
744 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); 775 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher);
745 std::unique_ptr<MockImageResourceObserver> observer = 776 std::unique_ptr<MockImageResourceObserver> observer =
746 MockImageResourceObserver::Create(image_resource->GetContent()); 777 MockImageResourceObserver::Create(image_resource->GetContent());
747 778
748 // Send the image response. 779 EXPECT_FALSE(image_resource->ErrorOccurred());
749 image_resource->Loader()->DidReceiveResponse( 780 EXPECT_EQ(enable_show_placeholder_for_server_lofi,
750 WrappedResourceResponse(ResourceResponse( 781 image_resource->ShouldShowPlaceholder());
751 test_url, "image/jpeg", sizeof(kJpegImage), g_null_atom)));
752 image_resource->Loader()->DidReceiveData(
753 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage));
754 782
755 EXPECT_FALSE(image_resource->ErrorOccurred()); 783 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading.
756 ASSERT_TRUE(image_resource->GetContent()->HasImage()); 784 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
757 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); 785 Resource::kReloadAlways);
758 EXPECT_EQ(1, observer->ImageChangedCount());
759 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
760 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
761 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
762 EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
763 EXPECT_EQ(kJpegImageHeight,
764 image_resource->GetContent()->GetImage()->height());
765 786
766 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. 787 EXPECT_EQ(1, observer->ImageChangedCount());
767 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, 788 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged());
768 Resource::kReloadAlways); 789 // The observer should not have been notified of completion yet, since the
790 // image is still loading.
791 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
769 792
770 EXPECT_EQ(2, observer->ImageChangedCount()); 793 TestThatReloadIsStartedThenServeReload(
771 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged()); 794 test_url, image_resource, image_resource->GetContent(), observer.get(),
772 // The observer should not have been notified of completion yet, since the 795 WebCachePolicy::kBypassingCache, false);
773 // image is still loading. 796 }
774 EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); 797 }
775 798
776 TestThatReloadIsStartedThenServeReload( 799 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringResponse) {
777 test_url, image_resource, image_resource->GetContent(), observer.get(), 800 const bool kBools[] = {false, true};
778 WebCachePolicy::kBypassingCache, false); 801 for (bool enable_show_placeholder_for_server_lofi : kBools) {
802 ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder(
803 enable_show_placeholder_for_server_lofi);
804 KURL test_url(kParsedURLString, kTestURL);
805 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
806
807 ResourceRequest request(test_url);
808 request.SetPreviewsState(WebURLRequest::kServerLoFiOn);
809 FetchParameters fetch_params(request);
810 ResourceFetcher* fetcher = CreateFetcher();
811
812 ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher);
813 std::unique_ptr<MockImageResourceObserver> observer =
814 MockImageResourceObserver::Create(image_resource->GetContent());
815
816 // Send the image response.
817 ResourceResponse resource_response(test_url, "image/jpeg",
818 sizeof(kJpegImage), g_null_atom);
819 resource_response.AddHTTPHeaderField("chrome-proxy-content-transform",
820 "empty-image");
821
822 image_resource->Loader()->DidReceiveResponse(
823 WrappedResourceResponse(resource_response));
824 image_resource->Loader()->DidReceiveData(
825 reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage));
826
827 EXPECT_FALSE(image_resource->ErrorOccurred());
828 ASSERT_TRUE(image_resource->GetContent()->HasImage());
829 EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
830 EXPECT_EQ(1, observer->ImageChangedCount());
831 EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged());
832 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
833 EXPECT_EQ(enable_show_placeholder_for_server_lofi,
834 image_resource->ShouldShowPlaceholder());
835 EXPECT_EQ(kJpegImageWidth,
836 image_resource->GetContent()->GetImage()->width());
837 EXPECT_EQ(kJpegImageHeight,
838 image_resource->GetContent()->GetImage()->height());
839
840 // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading.
841 image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher,
842 Resource::kReloadAlways);
843
844 EXPECT_EQ(2, observer->ImageChangedCount());
845 EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged());
846 // The observer should not have been notified of completion yet, since the
847 // image is still loading.
848 EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
849
850 TestThatReloadIsStartedThenServeReload(
851 test_url, image_resource, image_resource->GetContent(), observer.get(),
852 WebCachePolicy::kBypassingCache, false);
853 }
779 } 854 }
780 855
781 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { 856 TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) {
782 KURL test_url(kParsedURLString, kTestURL); 857 KURL test_url(kParsedURLString, kTestURL);
783 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); 858 ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
784 859
785 ResourceFetcher* fetcher = CreateFetcher(); 860 ResourceFetcher* fetcher = CreateFetcher();
786 FetchParameters params{ResourceRequest(test_url)}; 861 FetchParameters params{ResourceRequest(test_url)};
787 params.SetAllowImagePlaceholder(); 862 params.SetAllowImagePlaceholder();
788 ImageResource* image_resource = ImageResource::Fetch(params, fetcher); 863 ImageResource* image_resource = ImageResource::Fetch(params, fetcher);
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
1686 ImageResource* image_resource = ImageResource::CreateForTest(test_url); 1761 ImageResource* image_resource = ImageResource::CreateForTest(test_url);
1687 image_resource->SetStatus(ResourceStatus::kPending); 1762 image_resource->SetStatus(ResourceStatus::kPending);
1688 image_resource->NotifyStartLoad(); 1763 image_resource->NotifyStartLoad();
1689 1764
1690 std::unique_ptr<MockImageResourceObserver> observer = 1765 std::unique_ptr<MockImageResourceObserver> observer =
1691 MockImageResourceObserver::Create(image_resource->GetContent()); 1766 MockImageResourceObserver::Create(image_resource->GetContent());
1692 1767
1693 // Send the image response. 1768 // Send the image response.
1694 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage2), 1769 ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage2),
1695 g_null_atom); 1770 g_null_atom);
1696 resource_response.AddHTTPHeaderField("chrome-proxy", "q=low");
1697 1771
1698 image_resource->ResponseReceived(resource_response, nullptr); 1772 image_resource->ResponseReceived(resource_response, nullptr);
1699 1773
1700 // This is number is sufficiently large amount of bytes necessary for the 1774 // This is number is sufficiently large amount of bytes necessary for the
1701 // image to be created (since the size is known). This was determined by 1775 // image to be created (since the size is known). This was determined by
1702 // appending one byte at a time (with flushes) until the image was decoded. 1776 // appending one byte at a time (with flushes) until the image was decoded.
1703 size_t meaningful_image_size = 280; 1777 size_t meaningful_image_size = 280;
1704 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage2), 1778 image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage2),
1705 meaningful_image_size); 1779 meaningful_image_size);
1706 size_t bytes_sent = meaningful_image_size; 1780 size_t bytes_sent = meaningful_image_size;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1759 EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); 1833 EXPECT_TRUE(observer->ImageNotifyFinishedCalled());
1760 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); 1834 EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage());
1761 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width()); 1835 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->width());
1762 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height()); 1836 EXPECT_EQ(50, image_resource->GetContent()->GetImage()->height());
1763 1837
1764 WTF::SetTimeFunctionsForTesting(nullptr); 1838 WTF::SetTimeFunctionsForTesting(nullptr);
1765 } 1839 }
1766 1840
1767 } // namespace 1841 } // namespace
1768 } // namespace blink 1842 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698