Chromium Code Reviews| Index: third_party/WebKit/Source/core/loader/resource/ImageResource.cpp |
| diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResource.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResource.cpp |
| index 2a19d222e787f6c3f67a161f9452d754c963fe4a..9d974da881afe37192b2d950e4aaf1d137d60235 100644 |
| --- a/third_party/WebKit/Source/core/loader/resource/ImageResource.cpp |
| +++ b/third_party/WebKit/Source/core/loader/resource/ImageResource.cpp |
| @@ -47,11 +47,20 @@ |
| #include "v8/include/v8.h" |
| namespace blink { |
| + |
| namespace { |
| + |
| // The amount of time to wait before informing the clients that the image has |
| // been updated (in seconds). This effectively throttles invalidations that |
| // result from new data arriving for this image. |
| constexpr double kFlushDelaySeconds = 1.; |
| + |
| +bool HasServerLoFiResponseHeaders(const ResourceResponse& response) { |
| + return response.HttpHeaderField("chrome-proxy-content-transform") |
| + .Contains("empty-image") || |
| + response.HttpHeaderField("chrome-proxy").Contains("q=low"); |
|
megjablon
2017/06/13 19:26:14
Can you add a comment that we still check q=low be
sclittle
2017/06/13 20:53:23
Done.
|
| +} |
| + |
| } // namespace |
| class ImageResource::ImageResourceInfoImpl final |
| @@ -449,9 +458,32 @@ void ImageResource::ResponseReceived( |
| placeholder_option_ = PlaceholderOption::kReloadPlaceholderOnDecodeError; |
| } |
| } |
| + |
| + // Ensure that the PreviewsState bit for Server Lo-Fi is set iff we received |
| + // the appropriate Server Lo-Fi response headers for this image. |
| + if (HasServerLoFiResponseHeaders(this->GetResponse())) { |
|
megjablon
2017/06/13 19:26:14
Shouldn't this already be set? We wouldn't have go
sclittle
2017/06/13 20:53:23
Normally the bit should be set if we're getting th
megjablon
2017/06/13 21:27:05
Ah ok. Can you add a comment of this effect?
sclittle
2017/06/13 21:42:31
Done.
|
| + SetPreviewsState(GetResourceRequest().GetPreviewsState() | |
| + WebURLRequest::kServerLoFiOn); |
| + } else if (GetResourceRequest().GetPreviewsState() & |
| + WebURLRequest::kServerLoFiOn) { |
| + WebURLRequest::PreviewsState new_previews_state = |
| + GetResourceRequest().GetPreviewsState(); |
| + |
| + new_previews_state &= ~WebURLRequest::kServerLoFiOn; |
| + if (new_previews_state == WebURLRequest::kPreviewsUnspecified) |
| + new_previews_state = WebURLRequest::kPreviewsOff; |
| + |
| + SetPreviewsState(new_previews_state); |
| + } |
| } |
| bool ImageResource::ShouldShowPlaceholder() const { |
|
megjablon
2017/06/13 19:26:14
Is this method only called if you're in the client
sclittle
2017/06/13 20:53:23
It's called by ImageResourceContent::UpdateImage w
megjablon
2017/06/13 21:27:05
Is this approved to roll out for server lo-fi with
sclittle
2017/06/13 21:42:31
Good point - I'll confirm and clarify with server
|
| + // Show Client Lo-Fi placeholder images in place of Server Lo-Fi |
| + // responses. This is done so that all Lo-Fi images have a consistent |
| + // appearance. |
| + if (GetResourceRequest().GetPreviewsState() & WebURLRequest::kServerLoFiOn) |
| + return true; |
| + |
| switch (placeholder_option_) { |
| case PlaceholderOption::kShowAndReloadPlaceholderAlways: |
| return true; |
| @@ -476,27 +508,19 @@ bool ImageResource::ShouldReloadBrokenPlaceholder() const { |
| return false; |
| } |
| -static bool IsLoFiImage(const ImageResource& resource) { |
| - if (resource.IsLoaded()) { |
| - return resource.GetResponse() |
| - .HttpHeaderField("chrome-proxy-content-transform") |
| - .Contains("empty-image") || |
| - resource.GetResponse() |
| - .HttpHeaderField("chrome-proxy") |
| - .Contains("q=low"); |
| - } |
| - return resource.GetResourceRequest().GetPreviewsState() & |
| - WebURLRequest::kServerLoFiOn; |
| -} |
| - |
| void ImageResource::ReloadIfLoFiOrPlaceholderImage( |
| ResourceFetcher* fetcher, |
| ReloadLoFiOrPlaceholderPolicy policy) { |
| if (policy == kReloadIfNeeded && !ShouldReloadBrokenPlaceholder()) |
| return; |
| + DCHECK(!IsLoaded() || |
| + HasServerLoFiResponseHeaders(GetResponse()) == |
| + static_cast<bool>(GetResourceRequest().GetPreviewsState() & |
| + WebURLRequest::kServerLoFiOn)); |
| + |
| if (placeholder_option_ == PlaceholderOption::kDoNotReloadPlaceholder && |
| - !IsLoFiImage(*this)) |
| + !(GetResourceRequest().GetPreviewsState() & WebURLRequest::kServerLoFiOn)) |
| return; |
| // Prevent clients and observers from being notified of completion while the |