Commit c2bc5254 authored by Ryan Sturm's avatar Ryan Sturm Committed by Commit Bot

Add an arm to the lightweight no state prefetch experiment

This adds an arm to separate async vs sync script, so we can see if
there is a big effect when NoState prefetching async script.

Bug: 93446
Change-Id: Ic04a30b2af3ee0517dca88d5cbb754d619003f45
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1707054Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Commit-Queue: Ryan Sturm <ryansturm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#680186}
parent e3c31e18
......@@ -320,6 +320,7 @@ IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchAllResourceTypes) {
WaitForRequestCount(src_server()->GetURL(kPrefetchPageMultipleResourceTypes),
1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript2), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchPng), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchCss), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchFont), 1);
......@@ -351,6 +352,7 @@ IN_PROC_BROWSER_TEST_F(HTMLOnlyNoStatePrefetchBrowserTest, PrefetchHTMLOnly) {
WaitForRequestCount(src_server()->GetURL(kPrefetchPageMultipleResourceTypes),
1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript2), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchPng), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchCss), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchFont), 0);
......@@ -384,6 +386,43 @@ IN_PROC_BROWSER_TEST_F(HTMLCSSNoStatePrefetchBrowserTest, PrefetchHTMLCSS) {
WaitForRequestCount(src_server()->GetURL(kPrefetchPageMultipleResourceTypes),
1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript2), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchPng), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchCss), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchFont), 0);
}
// Test and Test Class for lightweight prefetch under the HTML+CSS+SyncScript
// configuration.
class HTMLCSSSyncScriptNoStatePrefetchBrowserTest
: public NoStatePrefetchBrowserTest {
public:
void SetUp() override {
std::map<std::string, std::string> parameters;
parameters["skip_other"] = "true";
parameters["skip_async_script"] = "true";
feature_list_.InitWithFeaturesAndParameters(
{{blink::features::kLightweightNoStatePrefetch, parameters}}, {});
NoStatePrefetchBrowserTest::SetUp();
}
private:
base::test::ScopedFeatureList feature_list_;
};
// Checks that the expected resource types are fetched via NoState Prefetch.
IN_PROC_BROWSER_TEST_F(HTMLCSSSyncScriptNoStatePrefetchBrowserTest,
PrefetchHTMLCSSSyncScript) {
std::unique_ptr<TestPrerender> test_prerender =
PrefetchFromFile(kPrefetchPageMultipleResourceTypes,
FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
// Verify that the page load did not happen.
test_prerender->WaitForLoads(0);
WaitForRequestCount(src_server()->GetURL(kPrefetchPageMultipleResourceTypes),
1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript2), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchPng), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchCss), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchFont), 0);
......@@ -418,6 +457,7 @@ IN_PROC_BROWSER_TEST_F(HTMLCSSScriptNoStatePrefetchBrowserTest,
WaitForRequestCount(src_server()->GetURL(kPrefetchPageMultipleResourceTypes),
1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchScript2), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchPng), 0);
WaitForRequestCount(src_server()->GetURL(kPrefetchCss), 1);
WaitForRequestCount(src_server()->GetURL(kPrefetchFont), 0);
......
<html>
<body>
<script src="prefetch.js"></script>
<script src="prefetch2.js" async></script>
<img src="image.png"/>
<link rel="prefetch" href="prefetch.html">
<link rel="stylesheet" type="text/css" href="style.css"/>
......
......@@ -115,27 +115,25 @@ bool HTMLResourcePreloader::AllowPreloadRequest(PreloadRequest* preload) const {
case ResourceType::kVideo:
case ResourceType::kManifest:
case ResourceType::kMock:
if (GetFieldTrialParamByFeatureAsBool(
features::kLightweightNoStatePrefetch, "skip_other", false)) {
return false;
}
break;
return !GetFieldTrialParamByFeatureAsBool(
features::kLightweightNoStatePrefetch, "skip_other", false);
case ResourceType::kImage:
return false;
case ResourceType::kCSSStyleSheet:
break;
return true;
case ResourceType::kScript:
// We might skip all script.
if (GetFieldTrialParamByFeatureAsBool(
features::kLightweightNoStatePrefetch, "skip_script", false)) {
// TODO(ryansturm): Add an arm to block async script only.
// https://crbug.com/934466
return false;
}
break;
}
// Skip lazy-loaded resources.
return preload->DeferOption() == FetchParameters::DeferOption::kNoDefer;
// Otherwise, we might skip async/deferred script.
return !GetFieldTrialParamByFeatureAsBool(
features::kLightweightNoStatePrefetch, "skip_async_script",
false) ||
preload->DeferOption() == FetchParameters::DeferOption::kNoDefer;
}
}
} // 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