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); |