Chromium Code Reviews| Index: third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp |
| diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp |
| index b59dcbb4221f9800d75b27cd12491003d6d1edf8..865ca7ce831c0e992c560e7e25feab9e300161c5 100644 |
| --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp |
| +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp |
| @@ -32,6 +32,7 @@ |
| #include <memory> |
| #include "core/loader/resource/MockImageResourceObserver.h" |
| +#include "platform/RuntimeEnabledFeatures.h" |
| #include "platform/SharedBuffer.h" |
| #include "platform/exported/WrappedResourceResponse.h" |
| #include "platform/graphics/BitmapImage.h" |
| @@ -45,6 +46,7 @@ |
| #include "platform/loader/testing/MockFetchContext.h" |
| #include "platform/loader/testing/MockResourceClient.h" |
| #include "platform/scheduler/test/fake_web_task_runner.h" |
| +#include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" |
| #include "platform/testing/ScopedMockedURL.h" |
| #include "platform/testing/TestingPlatformSupport.h" |
| #include "platform/testing/UnitTestHelpers.h" |
| @@ -343,6 +345,11 @@ ResourceFetcher* CreateFetcher() { |
| return ResourceFetcher::Create(context, context->GetTaskRunner()); |
| } |
| +using ScopedClientPlaceholderForServerLoFiForTest = |
| + ScopedRuntimeEnabledFeatureForTest< |
| + RuntimeEnabledFeatures::ClientPlaceholdersForServerLoFiEnabled, |
| + RuntimeEnabledFeatures::SetClientPlaceholdersForServerLoFiEnabled>; |
| + |
| TEST(ImageResourceTest, MultipartImage) { |
| ResourceFetcher* fetcher = CreateFetcher(); |
| KURL test_url(kParsedURLString, kTestURL); |
| @@ -559,90 +566,110 @@ TEST(ImageResourceTest, UpdateBitmapImages) { |
| } |
| TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) { |
| - KURL test_url(kParsedURLString, kTestURL); |
| - ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| - ImageResource* image_resource = ImageResource::CreateForTest(test_url); |
| - image_resource->SetStatus(ResourceStatus::kPending); |
| - image_resource->NotifyStartLoad(); |
| - |
| - std::unique_ptr<MockImageResourceObserver> observer = |
| - MockImageResourceObserver::Create(image_resource->GetContent()); |
| - ResourceFetcher* fetcher = CreateFetcher(); |
| + 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.
|
| + for (bool enable_show_placeholder_for_server_lofi : kBools) { |
| + ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder( |
| + enable_show_placeholder_for_server_lofi); |
| + KURL test_url(kParsedURLString, kTestURL); |
| + ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| + ImageResource* image_resource = ImageResource::CreateForTest(test_url); |
| + image_resource->SetStatus(ResourceStatus::kPending); |
| + image_resource->NotifyStartLoad(); |
| - // Send the image response. |
| - ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), |
| - g_null_atom); |
| - resource_response.AddHTTPHeaderField("chrome-proxy-content-transform", |
| - "empty-image"); |
| + std::unique_ptr<MockImageResourceObserver> observer = |
| + MockImageResourceObserver::Create(image_resource->GetContent()); |
| + ResourceFetcher* fetcher = CreateFetcher(); |
| + |
| + // Send the image response. |
| + ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), |
| + g_null_atom); |
| + resource_response.AddHTTPHeaderField("chrome-proxy-content-transform", |
| + "empty-image"); |
| + |
| + image_resource->ResponseReceived(resource_response, nullptr); |
| + image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), |
| + sizeof(kJpegImage)); |
| + image_resource->Finish(); |
| + EXPECT_FALSE(image_resource->ErrorOccurred()); |
| + ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| + EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| + EXPECT_EQ(2, observer->ImageChangedCount()); |
| + EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| + // The observer should have been notified that the image load completed. |
| + EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
| + EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); |
| + EXPECT_NE(enable_show_placeholder_for_server_lofi, |
| + image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| + EXPECT_EQ(enable_show_placeholder_for_server_lofi, |
| + image_resource->ShouldShowPlaceholder()); |
| + EXPECT_EQ(kJpegImageWidth, |
| + image_resource->GetContent()->GetImage()->width()); |
| + EXPECT_EQ(kJpegImageHeight, |
| + image_resource->GetContent()->GetImage()->height()); |
| - image_resource->ResponseReceived(resource_response, nullptr); |
| - image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), |
| - sizeof(kJpegImage)); |
| - image_resource->Finish(); |
| - EXPECT_FALSE(image_resource->ErrorOccurred()); |
| - ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| - EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| - EXPECT_EQ(2, observer->ImageChangedCount()); |
| - EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| - // The observer should have been notified that the image load completed. |
| - EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
| - EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); |
| - EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| - EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); |
| - EXPECT_EQ(kJpegImageHeight, |
| - image_resource->GetContent()->GetImage()->height()); |
| + // Call reloadIfLoFiOrPlaceholderImage() after the image has finished |
| + // loading. |
| + image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| + Resource::kReloadAlways); |
| - // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. |
| - image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| - Resource::kReloadAlways); |
| - |
| - EXPECT_EQ(3, observer->ImageChangedCount()); |
| - TestThatReloadIsStartedThenServeReload( |
| - test_url, image_resource, image_resource->GetContent(), observer.get(), |
| - WebCachePolicy::kBypassingCache, false); |
| + EXPECT_EQ(3, observer->ImageChangedCount()); |
| + TestThatReloadIsStartedThenServeReload( |
| + test_url, image_resource, image_resource->GetContent(), observer.get(), |
| + WebCachePolicy::kBypassingCache, false); |
| + } |
| } |
| TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) { |
| - KURL test_url(kParsedURLString, kTestURL); |
| - ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| - ImageResource* image_resource = ImageResource::CreateForTest(test_url); |
| - image_resource->SetStatus(ResourceStatus::kPending); |
| - image_resource->NotifyStartLoad(); |
| - |
| - std::unique_ptr<MockImageResourceObserver> observer = |
| - MockImageResourceObserver::Create(image_resource->GetContent()); |
| - ResourceFetcher* fetcher = CreateFetcher(); |
| - |
| - // Send the image response. |
| - ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), |
| - g_null_atom); |
| - resource_response.AddHTTPHeaderField("chrome-proxy", "q=low"); |
| + const bool kBools[] = {false, true}; |
| + for (bool enable_show_placeholder_for_server_lofi : kBools) { |
| + ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder( |
| + enable_show_placeholder_for_server_lofi); |
| + KURL test_url(kParsedURLString, kTestURL); |
| + ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| + ImageResource* image_resource = ImageResource::CreateForTest(test_url); |
| + image_resource->SetStatus(ResourceStatus::kPending); |
| + image_resource->NotifyStartLoad(); |
| - image_resource->ResponseReceived(resource_response, nullptr); |
| - image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), |
| - sizeof(kJpegImage)); |
| - image_resource->Finish(); |
| - EXPECT_FALSE(image_resource->ErrorOccurred()); |
| - ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| - EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| - EXPECT_EQ(2, observer->ImageChangedCount()); |
| - EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| - // The observer should have been notified that the image load completed. |
| - EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
| - EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); |
| - EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| - EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); |
| - EXPECT_EQ(kJpegImageHeight, |
| - image_resource->GetContent()->GetImage()->height()); |
| + std::unique_ptr<MockImageResourceObserver> observer = |
| + MockImageResourceObserver::Create(image_resource->GetContent()); |
| + ResourceFetcher* fetcher = CreateFetcher(); |
| + |
| + // Send the image response. |
| + ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage), |
| + g_null_atom); |
| + resource_response.AddHTTPHeaderField("chrome-proxy", "q=low"); |
| + |
| + image_resource->ResponseReceived(resource_response, nullptr); |
| + image_resource->AppendData(reinterpret_cast<const char*>(kJpegImage), |
| + sizeof(kJpegImage)); |
| + image_resource->Finish(); |
| + EXPECT_FALSE(image_resource->ErrorOccurred()); |
| + ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| + EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| + EXPECT_EQ(2, observer->ImageChangedCount()); |
| + EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| + // The observer should have been notified that the image load completed. |
| + EXPECT_TRUE(observer->ImageNotifyFinishedCalled()); |
| + EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnImageNotifyFinished()); |
| + EXPECT_NE(enable_show_placeholder_for_server_lofi, |
| + image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| + EXPECT_EQ(enable_show_placeholder_for_server_lofi, |
| + image_resource->ShouldShowPlaceholder()); |
| + EXPECT_EQ(kJpegImageWidth, |
| + image_resource->GetContent()->GetImage()->width()); |
| + EXPECT_EQ(kJpegImageHeight, |
| + image_resource->GetContent()->GetImage()->height()); |
| - // Call reloadIfLoFiOrPlaceholderImage() after the image has finished loading. |
| - image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| - Resource::kReloadAlways); |
| + // Call reloadIfLoFiOrPlaceholderImage() after the image has finished |
| + // loading. |
| + image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| + Resource::kReloadAlways); |
| - EXPECT_EQ(3, observer->ImageChangedCount()); |
| - TestThatReloadIsStartedThenServeReload( |
| - test_url, image_resource, image_resource->GetContent(), observer.get(), |
| - WebCachePolicy::kBypassingCache, false); |
| + EXPECT_EQ(3, observer->ImageChangedCount()); |
| + TestThatReloadIsStartedThenServeReload( |
| + test_url, image_resource, image_resource->GetContent(), observer.get(), |
| + WebCachePolicy::kBypassingCache, false); |
| + } |
| } |
| TEST(ImageResourceTest, |
| @@ -732,50 +759,98 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderViaResourceFetcher) { |
| GetMemoryCache()->Remove(image_resource); |
| } |
| -TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) { |
| - KURL test_url(kParsedURLString, kTestURL); |
| - ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| +TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderBeforeResponse) { |
| + const bool kBools[] = {false, true}; |
| + for (bool enable_show_placeholder_for_server_lofi : kBools) { |
| + ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder( |
| + enable_show_placeholder_for_server_lofi); |
| + KURL test_url(kParsedURLString, kTestURL); |
| + ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| - ResourceRequest request(test_url); |
| - request.SetPreviewsState(WebURLRequest::kServerLoFiOn); |
| - FetchParameters fetch_params(request); |
| - ResourceFetcher* fetcher = CreateFetcher(); |
| + ResourceRequest request(test_url); |
| + request.SetPreviewsState(WebURLRequest::kServerLoFiOn); |
| + FetchParameters fetch_params(request); |
| + ResourceFetcher* fetcher = CreateFetcher(); |
| - ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); |
| - std::unique_ptr<MockImageResourceObserver> observer = |
| - MockImageResourceObserver::Create(image_resource->GetContent()); |
| + ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); |
| + std::unique_ptr<MockImageResourceObserver> observer = |
| + MockImageResourceObserver::Create(image_resource->GetContent()); |
| - // Send the image response. |
| - image_resource->Loader()->DidReceiveResponse( |
| - WrappedResourceResponse(ResourceResponse( |
| - test_url, "image/jpeg", sizeof(kJpegImage), g_null_atom))); |
| - image_resource->Loader()->DidReceiveData( |
| - reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); |
| + EXPECT_FALSE(image_resource->ErrorOccurred()); |
| + EXPECT_EQ(enable_show_placeholder_for_server_lofi, |
| + image_resource->ShouldShowPlaceholder()); |
| - EXPECT_FALSE(image_resource->ErrorOccurred()); |
| - ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| - EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| - EXPECT_EQ(1, observer->ImageChangedCount()); |
| - EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| - EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| - EXPECT_TRUE(image_resource->GetContent()->GetImage()->IsBitmapImage()); |
| - EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); |
| - EXPECT_EQ(kJpegImageHeight, |
| - image_resource->GetContent()->GetImage()->height()); |
| + // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. |
| + image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| + Resource::kReloadAlways); |
| - // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. |
| - image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| - Resource::kReloadAlways); |
| + EXPECT_EQ(1, observer->ImageChangedCount()); |
| + EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged()); |
| + // The observer should not have been notified of completion yet, since the |
| + // image is still loading. |
| + EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| - EXPECT_EQ(2, observer->ImageChangedCount()); |
| - EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged()); |
| - // The observer should not have been notified of completion yet, since the |
| - // image is still loading. |
| - EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| + TestThatReloadIsStartedThenServeReload( |
| + test_url, image_resource, image_resource->GetContent(), observer.get(), |
| + WebCachePolicy::kBypassingCache, false); |
| + } |
| +} |
| - TestThatReloadIsStartedThenServeReload( |
| - test_url, image_resource, image_resource->GetContent(), observer.get(), |
| - WebCachePolicy::kBypassingCache, false); |
| +TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringResponse) { |
| + const bool kBools[] = {false, true}; |
| + for (bool enable_show_placeholder_for_server_lofi : kBools) { |
| + ScopedClientPlaceholderForServerLoFiForTest scoped_show_placeholder( |
| + enable_show_placeholder_for_server_lofi); |
| + KURL test_url(kParsedURLString, kTestURL); |
| + ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); |
| + |
| + ResourceRequest request(test_url); |
| + request.SetPreviewsState(WebURLRequest::kServerLoFiOn); |
| + FetchParameters fetch_params(request); |
| + ResourceFetcher* fetcher = CreateFetcher(); |
| + |
| + ImageResource* image_resource = ImageResource::Fetch(fetch_params, fetcher); |
| + std::unique_ptr<MockImageResourceObserver> observer = |
| + MockImageResourceObserver::Create(image_resource->GetContent()); |
| + |
| + // Send the image response. |
| + ResourceResponse resource_response(test_url, "image/jpeg", |
| + sizeof(kJpegImage), g_null_atom); |
| + resource_response.AddHTTPHeaderField("chrome-proxy-content-transform", |
| + "empty-image"); |
| + |
| + image_resource->Loader()->DidReceiveResponse( |
| + WrappedResourceResponse(resource_response)); |
| + image_resource->Loader()->DidReceiveData( |
| + reinterpret_cast<const char*>(kJpegImage), sizeof(kJpegImage)); |
| + |
| + EXPECT_FALSE(image_resource->ErrorOccurred()); |
| + ASSERT_TRUE(image_resource->GetContent()->HasImage()); |
| + EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); |
| + EXPECT_EQ(1, observer->ImageChangedCount()); |
| + EXPECT_EQ(kJpegImageWidth, observer->ImageWidthOnLastImageChanged()); |
| + EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| + EXPECT_EQ(enable_show_placeholder_for_server_lofi, |
| + image_resource->ShouldShowPlaceholder()); |
| + EXPECT_EQ(kJpegImageWidth, |
| + image_resource->GetContent()->GetImage()->width()); |
| + EXPECT_EQ(kJpegImageHeight, |
| + image_resource->GetContent()->GetImage()->height()); |
| + |
| + // Call reloadIfLoFiOrPlaceholderImage() while the image is still loading. |
| + image_resource->ReloadIfLoFiOrPlaceholderImage(fetcher, |
| + Resource::kReloadAlways); |
| + |
| + EXPECT_EQ(2, observer->ImageChangedCount()); |
| + EXPECT_EQ(0, observer->ImageWidthOnLastImageChanged()); |
| + // The observer should not have been notified of completion yet, since the |
| + // image is still loading. |
| + EXPECT_FALSE(observer->ImageNotifyFinishedCalled()); |
| + |
| + TestThatReloadIsStartedThenServeReload( |
| + test_url, image_resource, image_resource->GetContent(), observer.get(), |
| + WebCachePolicy::kBypassingCache, false); |
| + } |
| } |
| TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) { |
| @@ -1693,7 +1768,6 @@ TEST(ImageResourceTest, PeriodicFlushTest) { |
| // Send the image response. |
| ResourceResponse resource_response(KURL(), "image/jpeg", sizeof(kJpegImage2), |
| g_null_atom); |
| - resource_response.AddHTTPHeaderField("chrome-proxy", "q=low"); |
| image_resource->ResponseReceived(resource_response, nullptr); |