Commit a1a489b7 authored by rajendrant's avatar rajendrant Committed by Commit Bot

Enable subresource redirect previews for CSS background images

This previews bit should be set only when SaveData is enabled and
irrespective of LazyLoad feature.

Bug: 1047330
Change-Id: I709b96b9518c449a7846634ff44c20b5bf96535d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2039895
Commit-Queue: rajendrant <rajendrant@chromium.org>
Reviewed-by: default avatarRune Lillesveen <futhark@chromium.org>
Reviewed-by: default avatarScott Little <sclittle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#743215}
parent c4e0d655
......@@ -20,6 +20,7 @@
#include "third_party/blink/renderer/core/css/css_image_value.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/web/web_local_frame_client.h"
#include "third_party/blink/renderer/core/css/css_markup.h"
#include "third_party/blink/renderer/core/dom/document.h"
......@@ -32,6 +33,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
#include "third_party/blink/renderer/platform/network/network_state_notifier.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/weborigin/security_policy.h"
......@@ -92,6 +94,14 @@ StyleImage* CSSImageValue::CacheImage(
params.SetLazyImageDeferred();
}
if (base::FeatureList::IsEnabled(blink::features::kSubresourceRedirect) &&
params.Url().ProtocolIsInHTTPFamily() &&
GetNetworkStateNotifier().SaveDataEnabled()) {
auto& resource_request = params.MutableResourceRequest();
resource_request.SetPreviewsState(resource_request.GetPreviewsState() |
WebURLRequest::kSubresourceRedirectOn);
}
if (origin_clean_ != OriginClean::kTrue)
params.SetFromOriginDirtyStyleSheet(true);
......
......@@ -693,6 +693,7 @@ blink_core_tests("unit_tests") {
"parser/text_resource_decoder_test.cc",
"portal/html_portal_element_test.cc",
"shadow/progress_shadow_element_test.cc",
"subresource_redirect_test.cc",
"time_ranges_test.cc",
"track/text_track_list_test.cc",
"track/vtt/buffered_line_reader_test.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <tuple>
#include "base/test/scoped_feature_list.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
#include "third_party/blink/renderer/core/style/style_image.h"
#include "third_party/blink/renderer/core/testing/sim/sim_compositor.h"
#include "third_party/blink/renderer/core/testing/sim/sim_request.h"
#include "third_party/blink/renderer/core/testing/sim/sim_test.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
#include "third_party/blink/renderer/platform/network/network_state_notifier.h"
#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
namespace blink {
namespace {
Vector<char> ReadTestImage() {
return test::ReadFromFile(test::CoreTestDataPath("notifications/500x500.png"))
->CopyAs<Vector<char>>();
}
class SubresourceRedirectSimTest
: public ::testing::WithParamInterface<std::tuple<bool, bool, bool>>,
public SimTest {
protected:
SubresourceRedirectSimTest()
: scoped_lazy_image_loading_for_test_(is_lazyload_image_enabled()),
scoped_automatic_lazy_image_loading_for_test_(
is_lazyload_image_enabled()) {
if (is_subresource_redirect_enabled())
scoped_feature_list_.InitAndEnableFeature(features::kSubresourceRedirect);
GetNetworkStateNotifier().SetSaveDataEnabled(is_save_data_enabled());
}
bool is_subresource_redirect_enabled() { return std::get<0>(GetParam()); }
bool is_lazyload_image_enabled() { return std::get<1>(GetParam()); }
bool is_save_data_enabled() { return std::get<2>(GetParam()); }
void LoadMainResource(const String& html_body) {
SimRequest main_resource("https://example.com/", "text/html");
LoadURL("https://example.com/");
main_resource.Complete(html_body);
GetDocument().UpdateStyleAndLayoutTree();
}
ScopedLazyImageLoadingForTest scoped_lazy_image_loading_for_test_;
ScopedAutomaticLazyImageLoadingForTest
scoped_automatic_lazy_image_loading_for_test_;
base::test::ScopedFeatureList scoped_feature_list_;
};
// This test verifies subresource redirect previews state based on different
// states of SaveData, LazyLoad, SubresourceRedirect features.
TEST_P(SubresourceRedirectSimTest, CSSBackgroundImage) {
WebView().GetPage()->GetSettings().SetLazyLoadEnabled(
is_lazyload_image_enabled());
SimRequest image_resource("https://example.com/img.png", "image/png");
LoadMainResource(String::Format(R"HTML(
<style>
#deferred_image {
height:200px;
background-image: url('img.png');
}
</style>
<div style='height:10000px;'></div>
<div id="deferred_image"></div>
)HTML"));
if (!is_lazyload_image_enabled())
image_resource.Complete(ReadTestImage());
Compositor().BeginFrame();
test::RunPendingTasks();
if (is_lazyload_image_enabled()) {
// Scroll down until the background image is visible.
GetDocument().View()->LayoutViewport()->SetScrollOffset(
ScrollOffset(0, 10000), mojom::blink::ScrollType::kProgrammatic);
Compositor().BeginFrame();
test::RunPendingTasks();
image_resource.Complete(ReadTestImage());
}
WebURLRequest::PreviewsState previews_state =
GetDocument()
.Fetcher()
->CachedResource(KURL("https://example.com/img.png"))
->GetResourceRequest()
.GetPreviewsState();
// Subresource redirect previews bit should be set only if SaveData and
// SubresourceRedirect feature are enabled.
EXPECT_EQ(is_save_data_enabled() && is_subresource_redirect_enabled(),
(previews_state & WebURLRequest::kSubresourceRedirectOn) != 0);
}
INSTANTIATE_TEST_SUITE_P(
All,
SubresourceRedirectSimTest,
::testing::Combine(::testing::Bool(), /* is_subresource_redirect_enabled */
::testing::Bool(), /* is_lazyload_image_enabled */
::testing::Bool()) /* is_save_data_enabled_*/);
} // namespace
} // namespace blink
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