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

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

Issue 2797993007: Show image placeholders on dimension decode error (Closed)
Patch Set: tryjob Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/loader/resource/ImageResource.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 fce9e1a85ee54fa6f8ccac1c18eb4d9c9468a2bd..9852ddb5b1715c2d4b6194c6099b1499fd4f46b3 100644
--- a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp
+++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp
@@ -190,7 +190,8 @@ void TestThatReloadIsStartedThenServeReload(const KURL& test_url,
ImageResource* image_resource,
ImageResourceContent* content,
MockImageResourceObserver* observer,
- WebCachePolicy policy_for_reload) {
+ WebCachePolicy policy_for_reload,
+ bool placeholder_before_reload) {
const char* data = reinterpret_cast<const char*>(kJpegImage2);
constexpr size_t kDataLength = sizeof(kJpegImage2);
constexpr int kImageWidth = 50;
@@ -200,7 +201,7 @@ void TestThatReloadIsStartedThenServeReload(const KURL& test_url,
// reloading.
EXPECT_EQ(ResourceStatus::kPending, image_resource->GetStatus());
EXPECT_FALSE(image_resource->ResourceBuffer());
- EXPECT_FALSE(image_resource->ShouldShowPlaceholder());
+ EXPECT_EQ(placeholder_before_reload, image_resource->ShouldShowPlaceholder());
EXPECT_EQ(g_null_atom,
image_resource->GetResourceRequest().HttpHeaderField("range"));
EXPECT_EQ(policy_for_reload,
@@ -243,7 +244,7 @@ void TestThatReloadIsStartedThenServeReload(const KURL& test_url,
EXPECT_FALSE(content->GetImage()->IsNull());
EXPECT_EQ(kImageWidth, content->GetImage()->width());
EXPECT_EQ(kImageHeight, content->GetImage()->height());
- EXPECT_TRUE(content->GetImage()->IsBitmapImage());
+ // EXPECT_TRUE(content->GetImage()->IsBitmapImage());
ojan 2017/06/24 00:10:34 We don't typically check in commented out code. Di
dcheng 2017/06/24 00:26:47 +1, please uncomment this or delete it.
EXPECT_FALSE(content->GetImage()->PaintImageForCurrentFrame().is_multipart());
}
@@ -599,7 +600,7 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinished) {
EXPECT_EQ(3, observer->ImageChangedCount());
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, false);
}
TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) {
@@ -642,7 +643,7 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderAfterFinishedWithOldHeaders) {
EXPECT_EQ(3, observer->ImageChangedCount());
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, false);
}
TEST(ImageResourceTest,
@@ -725,9 +726,9 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderViaResourceFetcher) {
EXPECT_EQ(3, observer->ImageChangedCount());
- TestThatReloadIsStartedThenServeReload(test_url, image_resource, content,
- observer.get(),
- WebCachePolicy::kBypassingCache);
+ TestThatReloadIsStartedThenServeReload(
+ test_url, image_resource, content, observer.get(),
+ WebCachePolicy::kBypassingCache, false);
GetMemoryCache()->Remove(image_resource);
}
@@ -775,7 +776,7 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderDuringFetch) {
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, false);
}
TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) {
@@ -799,7 +800,7 @@ TEST(ImageResourceTest, ReloadIfLoFiOrPlaceholderForPlaceholder) {
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, false);
}
TEST(ImageResourceTest, SVGImage) {
@@ -1325,6 +1326,49 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) {
image_resource->Loader()->DidReceiveData(kBadData, sizeof(kBadData));
+ // The dimensions could not be extracted, so the full original image should be
+ // loading.
+ EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
+ EXPECT_EQ(2, observer->ImageChangedCount());
+ EXPECT_FALSE(image_resource->ShouldShowPlaceholder());
+
+ TestThatReloadIsStartedThenServeReload(
+ test_url, image_resource, image_resource->GetContent(), observer.get(),
+ WebCachePolicy::kBypassingCache, false);
+}
+
+TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessfulClientLoFi) {
+ KURL test_url(kParsedURLString, kTestURL);
+ ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath());
+
+ ResourceRequest request = ResourceRequest(test_url);
+ request.SetPreviewsState(WebURLRequest::kClientLoFiOn);
+ FetchParameters params{request};
+ params.SetAllowImagePlaceholder();
+ ImageResource* image_resource = ImageResource::Fetch(params, CreateFetcher());
+ EXPECT_EQ(FetchParameters::kAllowPlaceholder,
+ params.GetPlaceholderImageRequestType());
+ EXPECT_EQ("bytes=0-2047",
+ image_resource->GetResourceRequest().HttpHeaderField("range"));
+ EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
+ std::unique_ptr<MockImageResourceObserver> observer =
+ MockImageResourceObserver::Create(image_resource->GetContent());
+
+ const char kBadData[] = "notanimageresponse";
+
+ ResourceResponse bad_response(test_url, "image/jpeg", sizeof(kBadData),
+ g_null_atom);
+ bad_response.SetHTTPStatusCode(206);
+ bad_response.SetHTTPHeaderField(
+ "content-range", BuildContentRange(sizeof(kBadData), sizeof(kJpegImage)));
+
+ image_resource->Loader()->DidReceiveResponse(
+ WrappedResourceResponse(bad_response));
+
+ EXPECT_EQ(0, observer->ImageChangedCount());
+
+ image_resource->Loader()->DidReceiveData(kBadData, sizeof(kBadData));
+
// The dimensions could not be extracted, so the full original image should be
// loading.
EXPECT_FALSE(observer->ImageNotifyFinishedCalled());
@@ -1332,18 +1376,25 @@ TEST(ImageResourceTest, FetchAllowPlaceholderUnsuccessful) {
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, true);
+
+ EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsBitmapImage());
+ EXPECT_TRUE(image_resource->ShouldShowPlaceholder());
}
TEST(ImageResourceTest, FetchAllowPlaceholderPartialContentWithoutDimensions) {
const struct {
WebURLRequest::PreviewsState initial_previews_state;
WebURLRequest::PreviewsState expected_reload_previews_state;
+ bool placeholder_before_reload;
+ bool placeholder_after_reload;
} tests[] = {
- {WebURLRequest::kPreviewsUnspecified,
- WebURLRequest::kPreviewsNoTransform},
- {WebURLRequest::kClientLoFiOn, WebURLRequest::kPreviewsNoTransform |
- WebURLRequest::kClientLoFiAutoReload},
+ {WebURLRequest::kPreviewsUnspecified, WebURLRequest::kPreviewsNoTransform,
+ false},
+ {WebURLRequest::kClientLoFiOn,
+ WebURLRequest::kPreviewsNoTransform |
+ WebURLRequest::kClientLoFiAutoReload,
+ true},
};
for (const auto& test : tests) {
@@ -1394,7 +1445,7 @@ TEST(ImageResourceTest, FetchAllowPlaceholderPartialContentWithoutDimensions) {
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, test.placeholder_before_reload);
EXPECT_EQ(test.expected_reload_previews_state,
image_resource->GetResourceRequest().GetPreviewsState());
@@ -1624,7 +1675,7 @@ TEST(ImageResourceTest,
// error, so the full original image should be loading.
TestThatReloadIsStartedThenServeReload(
test_url, image_resource, image_resource->GetContent(), observer.get(),
- WebCachePolicy::kBypassingCache);
+ WebCachePolicy::kBypassingCache, false);
}
}
« no previous file with comments | « third_party/WebKit/Source/core/loader/resource/ImageResource.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698