Commit f735c33c authored by Luna Lu's avatar Luna Lu Committed by Commit Bot

clean up image policy code

1. use ResourceResponse::ExpectedContentLength to get image file size.
2. merge image policy violation check into one place.
    Note: ValidateImagePolicies will later be called through the
    pipeline described in here:
https://docs.google.com/document/d/1B_GnzEItUXsUUQXtB1zMiiov86_U1BCFo1F8g5F_yOY
    to unload unoptimized images as early as possible.


Bug:910195

Change-Id: Iab2fc2fee4f2963c308ca1cc585259021a86b3f2
Reviewed-on: https://chromium-review.googlesource.com/c/1355330
Commit-Queue: Luna Lu <loonybear@chromium.org>
Reviewed-by: default avatarSteve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612362}
parent 6911f6c7
......@@ -53,7 +53,6 @@ namespace {
constexpr float kmax_oversize_ratio = 2.0f;
bool CheckForOptimizedImagePolicy(const Document& document,
LayoutImage* layout_image,
ImageResourceContent* new_image) {
// Render the image as a placeholder image if the document does not have the
// 'legacy-image-formats' feature enabled, and the image is not one of the
......@@ -273,12 +272,8 @@ void LayoutImage::ImageNotifyFinished(ImageResourceContent* new_image) {
InvalidateBackgroundObscurationStatus();
// Check for optimized image policies.
is_legacy_format_or_unoptimized_image_ =
CheckForOptimizedImagePolicy(GetDocument(), this, new_image);
if (auto* image_element = ToHTMLImageElementOrNull(GetNode())) {
is_oversized_image_ =
CheckForOversizedImagesPolicy(GetDocument(), new_image, this);
}
if (IsHTMLImageElement(GetNode()))
ValidateImagePolicies();
if (new_image == image_resource_->CachedImage()) {
// tell any potential compositing layers
......@@ -491,15 +486,22 @@ bool LayoutImage::IsImagePolicyViolated() const {
return is_oversized_image_ || is_legacy_format_or_unoptimized_image_;
}
void LayoutImage::ValidateImagePolicies() {
if (image_resource_ && image_resource_->CachedImage()) {
is_oversized_image_ = CheckForOversizedImagesPolicy(
GetDocument(), image_resource_->CachedImage(), this);
is_legacy_format_or_unoptimized_image_ = CheckForOptimizedImagePolicy(
GetDocument(), image_resource_->CachedImage());
}
}
void LayoutImage::UpdateAfterLayout() {
LayoutBox::UpdateAfterLayout();
Node* node = GetNode();
if (auto* image_element = ToHTMLImageElementOrNull(node)) {
if (image_resource_ && image_resource_->CachedImage()) {
// Check for optimized image policies.
is_oversized_image_ = CheckForOversizedImagesPolicy(
GetDocument(), image_resource_->CachedImage(), this);
}
// Check for optimized image policies.
ValidateImagePolicies();
// Report violation of unsized-media policy.
if (image_element->IsDefaultIntrinsicSize())
......
......@@ -142,6 +142,8 @@ class CORE_EXPORT LayoutImage : public LayoutReplaced {
FloatSize ImageSizeOverriddenByIntrinsicSize(float multiplier) const;
IntSize GetOverriddenIntrinsicSize() const;
void ValidateImagePolicies();
// This member wraps the associated decoded image.
//
// This field is set using setImageResource above which can be called in
......
......@@ -510,7 +510,7 @@ bool ImageResourceContent::IsAcceptableCompressionRatio() {
if (!pixels)
return true;
DCHECK(image_);
double resource_length = image_->Data() ? image_->Data()->size() : 0;
double resource_length = GetResponse().ExpectedContentLength();
// Allow no more than 10 bits per compressed pixel
return (resource_length - 1024) / pixels <= 0.5;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment