Do not send resource loading hints down if coinflip holdback is true
(cherry picked from commit f0efd272c3f4cbd2dc34c84aebfd04fc7402116f)
Bug: 973599
Change-Id: I6fab755385d27e5203ba216f9185e94a16c123ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1657168
Reviewed-by: Tarun Bansal <tbansal@chromium.org>
Reviewed-by: Robert Ogden <robertogden@chromium.org>
Commit-Queue: Sophie Chang <sophiechang@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#669120}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1664041
Cr-Commit-Position: refs/branch-heads/3809@{#412}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/chrome/browser/previews/resource_loading_hints/resource_loading_hints_browsertest.cc b/chrome/browser/previews/resource_loading_hints/resource_loading_hints_browsertest.cc
index c10f34f..fa75b62 100644
--- a/chrome/browser/previews/resource_loading_hints/resource_loading_hints_browsertest.cc
+++ b/chrome/browser/previews/resource_loading_hints/resource_loading_hints_browsertest.cc
@@ -36,10 +36,12 @@
#include "components/previews/core/previews_constants.h"
#include "components/previews/core/previews_features.h"
#include "components/previews/core/previews_switches.h"
+#include "components/ukm/test_ukm_recorder.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/test/browser_test_utils.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/network/public/cpp/network_quality_tracker.h"
namespace {
@@ -703,3 +705,44 @@
"ResourceLoadingHints.CountBlockedSubresourcePatterns", 0);
EXPECT_FALSE(resource_loading_hint_intervention_header_seen());
}
+
+IN_PROC_BROWSER_TEST_F(
+ ResourceLoadingHintsBrowserTest,
+ DISABLE_ON_WIN_MAC_CHROMESOS(
+ ResourceLoadingHintsHttpsWhitelistedButShouldNotApplyBecauseCoinFlipHoldback)) {
+ // Holdback the page load from previews and also disable offline previews to
+ // ensure that only post-commit previews are enabled.
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitWithFeaturesAndParameters(
+ {{previews::features::kCoinFlipHoldback,
+ {{"force_coin_flip_always_holdback", "true"}}}},
+ {previews::features::kOfflinePreviews});
+
+ ukm::TestAutoSetUkmRecorder test_ukm_recorder;
+
+ GURL url = https_url();
+
+ // Whitelist resource loading hints for https_hint_setup_url()'s' host.
+ SetDefaultOnlyResourceLoadingHints(https_hint_setup_url());
+
+ SetExpectedFooJpgRequest(true);
+ SetExpectedBarJpgRequest(true);
+ ResetResourceLoadingHintInterventionHeaderSeen();
+
+ base::HistogramTester histogram_tester;
+
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ histogram_tester.ExpectBucketCount(
+ "Previews.EligibilityReason.ResourceLoadingHints",
+ static_cast<int>(previews::PreviewsEligibilityReason::COMMITTED), 1);
+ histogram_tester.ExpectTotalCount(
+ "Previews.PreviewShown.ResourceLoadingHints", 0);
+ histogram_tester.ExpectTotalCount(
+ "ResourceLoadingHints.CountBlockedSubresourcePatterns", 0);
+ EXPECT_FALSE(resource_loading_hint_intervention_header_seen());
+ // Make sure we did not record a PreviewsResourceLoadingHints UKM for it.
+ auto rlh_ukm_entries = test_ukm_recorder.GetEntriesByName(
+ ukm::builders::PreviewsResourceLoadingHints::kEntryName);
+ ASSERT_EQ(0u, rlh_ukm_entries.size());
+}
diff --git a/chrome/browser/previews/resource_loading_hints/resource_loading_hints_web_contents_observer.cc b/chrome/browser/previews/resource_loading_hints/resource_loading_hints_web_contents_observer.cc
index a4ef961..af5f1571 100644
--- a/chrome/browser/previews/resource_loading_hints/resource_loading_hints_web_contents_observer.cc
+++ b/chrome/browser/previews/resource_loading_hints/resource_loading_hints_web_contents_observer.cc
@@ -58,6 +58,13 @@
previews::PreviewsType::RESOURCE_LOADING_HINTS) {
return;
}
+ // The committed previews type can sometimes not be cleared out if there were
+ // no pre-commit previews allowed, so make sure we are not in the coin flip
+ // holdback before proceeding with sending resource loading hints.
+ if (previews_user_data->coin_flip_holdback_result() ==
+ previews::CoinFlipHoldbackResult::kHoldback) {
+ return;
+ }
DCHECK(previews::params::IsResourceLoadingHintsEnabled());
SendResourceLoadingHints(navigation_handle,