summaryrefslogtreecommitdiff
path: root/chromium/components/optimization_guide
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/optimization_guide
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/optimization_guide')
-rw-r--r--chromium/components/optimization_guide/hint_cache.cc16
-rw-r--r--chromium/components/optimization_guide/hint_cache.h9
-rw-r--r--chromium/components/optimization_guide/hints_component_util.cc13
-rw-r--r--chromium/components/optimization_guide/hints_component_util.h15
-rw-r--r--chromium/components/optimization_guide/hints_component_util_unittest.cc74
-rw-r--r--chromium/components/optimization_guide/hints_processing_util.cc2
-rw-r--r--chromium/components/optimization_guide/optimization_filter.cc11
-rw-r--r--chromium/components/optimization_guide/optimization_filter.h5
-rw-r--r--chromium/components/optimization_guide/optimization_filter_unittest.cc32
-rw-r--r--chromium/components/optimization_guide/optimization_guide_decider.h15
-rw-r--r--chromium/components/optimization_guide/optimization_guide_features.cc10
-rw-r--r--chromium/components/optimization_guide/optimization_guide_store.h6
-rw-r--r--chromium/components/optimization_guide/proto/hints.proto20
-rw-r--r--chromium/components/optimization_guide/proto/performance_hints_metadata.proto7
-rw-r--r--chromium/components/optimization_guide/test_optimization_guide_decider.cc14
-rw-r--r--chromium/components/optimization_guide/test_optimization_guide_decider.h8
-rw-r--r--chromium/components/optimization_guide/url_pattern_with_wildcards.h1
17 files changed, 177 insertions, 81 deletions
diff --git a/chromium/components/optimization_guide/hint_cache.cc b/chromium/components/optimization_guide/hint_cache.cc
index 5800e5fb893..4ca8c8e3264 100644
--- a/chromium/components/optimization_guide/hint_cache.cc
+++ b/chromium/components/optimization_guide/hint_cache.cc
@@ -106,10 +106,14 @@ void HintCache::PurgeExpiredFetchedHints() {
void HintCache::ClearFetchedHints() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(optimization_guide_store_);
- // TODO(mcrouse): Update to remove only fetched hints from
- // |host_keyed_cache_|.
- host_keyed_cache_.Clear();
url_keyed_hint_cache_.Clear();
+ ClearHostKeyedHints();
+}
+
+void HintCache::ClearHostKeyedHints() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(optimization_guide_store_);
+ host_keyed_cache_.Clear();
optimization_guide_store_->ClearFetchedHintsFromDatabase();
}
@@ -312,4 +316,10 @@ void HintCache::AddHintForTesting(const GURL& url,
}
}
+bool HintCache::IsHintStoreAvailable() const {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(optimization_guide_store_);
+ return optimization_guide_store_->IsAvailable();
+}
+
} // namespace optimization_guide
diff --git a/chromium/components/optimization_guide/hint_cache.h b/chromium/components/optimization_guide/hint_cache.h
index 5d2469d4a87..64076571f0d 100644
--- a/chromium/components/optimization_guide/hint_cache.h
+++ b/chromium/components/optimization_guide/hint_cache.h
@@ -89,9 +89,13 @@ class HintCache {
void PurgeExpiredFetchedHints();
// Purges fetched hints from the owned |optimization_guide_store_| and resets
- // the host-keyed cache.
+ // both in-memory hint caches.
void ClearFetchedHints();
+ // Purges fetched hints from the owned |optimization_guide_store_| and resets
+ // the host-keyed cache.
+ void ClearHostKeyedHints();
+
// Returns whether the cache has a hint data for |host| locally (whether
// in the host-keyed cache or persisted on disk).
bool HasHint(const std::string& host) const;
@@ -130,6 +134,9 @@ class HintCache {
google::protobuf::RepeatedPtrField<proto::Hint>* hints,
StoreUpdateData* update_data);
+ // Returns whether the persistent hint store owned by this is available.
+ bool IsHintStoreAvailable() const;
+
// Override |clock_| for testing.
void SetClockForTesting(const base::Clock* clock);
diff --git a/chromium/components/optimization_guide/hints_component_util.cc b/chromium/components/optimization_guide/hints_component_util.cc
index 10cad8aa9a9..f0c79ee95c4 100644
--- a/chromium/components/optimization_guide/hints_component_util.cc
+++ b/chromium/components/optimization_guide/hints_component_util.cc
@@ -58,7 +58,7 @@ std::unique_ptr<BloomFilter> ProcessBloomFilter(
bloom_filter_proto.num_bits() > bloom_filter_proto.data().size() * 8) {
DLOG(ERROR) << "Bloom filter config issue";
PopulateOptimizationFilterStatusIfSet(
- OptimizationFilterStatus::kFailedServerBlacklistBadConfig, out_status);
+ OptimizationFilterStatus::kFailedServerFilterBadConfig, out_status);
return nullptr;
}
@@ -68,7 +68,7 @@ std::unique_ptr<BloomFilter> ProcessBloomFilter(
<< optimization_guide::features::MaxServerBloomFilterByteSize()
<< " bytes";
PopulateOptimizationFilterStatusIfSet(
- OptimizationFilterStatus::kFailedServerBlacklistTooBig, out_status);
+ OptimizationFilterStatus::kFailedServerFilterTooBig, out_status);
return nullptr;
}
@@ -76,7 +76,7 @@ std::unique_ptr<BloomFilter> ProcessBloomFilter(
bloom_filter_proto.num_hash_functions(), bloom_filter_proto.num_bits(),
bloom_filter_proto.data());
PopulateOptimizationFilterStatusIfSet(
- OptimizationFilterStatus::kCreatedServerBlacklist, out_status);
+ OptimizationFilterStatus::kCreatedServerFilter, out_status);
return bloom_filter;
}
@@ -99,7 +99,7 @@ std::unique_ptr<RegexpList> ProcessRegexps(
}
PopulateOptimizationFilterStatusIfSet(
- OptimizationFilterStatus::kCreatedServerBlacklist, out_status);
+ OptimizationFilterStatus::kCreatedServerFilter, out_status);
return regexps;
}
@@ -169,8 +169,9 @@ std::unique_ptr<OptimizationFilter> ProcessOptimizationFilter(
return nullptr;
}
- return std::make_unique<OptimizationFilter>(std::move(bloom_filter),
- std::move(regexps));
+ return std::make_unique<OptimizationFilter>(
+ std::move(bloom_filter), std::move(regexps),
+ optimization_filter.skip_host_suffix_checking());
}
} // namespace optimization_guide
diff --git a/chromium/components/optimization_guide/hints_component_util.h b/chromium/components/optimization_guide/hints_component_util.h
index 680d6902bd5..19806d941d7 100644
--- a/chromium/components/optimization_guide/hints_component_util.h
+++ b/chromium/components/optimization_guide/hints_component_util.h
@@ -50,18 +50,17 @@ std::unique_ptr<proto::Configuration> ProcessHintsComponent(
const HintsComponentInfo& info,
ProcessHintsComponentResult* out_result);
-// Enumerates status event of processing optimization filters (such as the
-// lite page redirect blacklist). Used in UMA histograms, so the order of
-// enumerators should not be changed.
+// Enumerates status event of processing optimization filters. Used in UMA
+// histograms, so the order of enumerators should not be changed.
//
// Keep in sync with OptimizationGuideOptimizationFilterStatus in
// tools/metrics/histograms/enums.xml.
enum class OptimizationFilterStatus {
- kFoundServerBlacklistConfig,
- kCreatedServerBlacklist,
- kFailedServerBlacklistBadConfig,
- kFailedServerBlacklistTooBig,
- kFailedServerBlacklistDuplicateConfig,
+ kFoundServerFilterConfig,
+ kCreatedServerFilter,
+ kFailedServerFilterBadConfig,
+ kFailedServerFilterTooBig,
+ kFailedServerFilterDuplicateConfig,
kInvalidRegexp,
// Insert new values before this line.
diff --git a/chromium/components/optimization_guide/hints_component_util_unittest.cc b/chromium/components/optimization_guide/hints_component_util_unittest.cc
index 9cece8d191d..4c354c7f176 100644
--- a/chromium/components/optimization_guide/hints_component_util_unittest.cc
+++ b/chromium/components/optimization_guide/hints_component_util_unittest.cc
@@ -135,18 +135,18 @@ TEST_F(HintsComponentUtilTest, RecordOptimizationFilterStatus) {
base::HistogramTester histogram_tester;
RecordOptimizationFilterStatus(
proto::OptimizationType::NOSCRIPT,
- OptimizationFilterStatus::kFoundServerBlacklistConfig);
+ OptimizationFilterStatus::kFoundServerFilterConfig);
histogram_tester.ExpectUniqueSample(
"OptimizationGuide.OptimizationFilterStatus.NoScript",
- OptimizationFilterStatus::kFoundServerBlacklistConfig, 1);
+ OptimizationFilterStatus::kFoundServerFilterConfig, 1);
// Record again with a different suffix to make sure it doesn't choke.
RecordOptimizationFilterStatus(
proto::OptimizationType::DEFER_ALL_SCRIPT,
- OptimizationFilterStatus::kFoundServerBlacklistConfig);
+ OptimizationFilterStatus::kFoundServerFilterConfig);
histogram_tester.ExpectUniqueSample(
"OptimizationGuide.OptimizationFilterStatus.DeferAllScript",
- OptimizationFilterStatus::kFoundServerBlacklistConfig, 1);
+ OptimizationFilterStatus::kFoundServerFilterConfig, 1);
}
TEST_F(HintsComponentUtilTest, ProcessOptimizationFilter) {
@@ -155,43 +155,43 @@ TEST_F(HintsComponentUtilTest, ProcessOptimizationFilter) {
proto::OptimizationFilter optimization_filter_proto;
BloomFilter bloom_filter(num_hash_functions, num_bits);
- bloom_filter.Add("black.com");
+ bloom_filter.Add("host.com");
proto::BloomFilter* bloom_filter_proto =
optimization_filter_proto.mutable_bloom_filter();
bloom_filter_proto->set_num_hash_functions(num_hash_functions);
bloom_filter_proto->set_num_bits(num_bits);
- std::string blacklist_data(
+ std::string blocklist_data(
reinterpret_cast<const char*>(&bloom_filter.bytes()[0]),
bloom_filter.bytes().size());
- bloom_filter_proto->set_data(blacklist_data);
+ bloom_filter_proto->set_data(blocklist_data);
OptimizationFilterStatus status;
std::unique_ptr<OptimizationFilter> optimization_filter =
ProcessOptimizationFilter(optimization_filter_proto, &status);
- EXPECT_EQ(status, OptimizationFilterStatus::kCreatedServerBlacklist);
+ EXPECT_EQ(status, OptimizationFilterStatus::kCreatedServerFilter);
ASSERT_TRUE(optimization_filter);
- EXPECT_TRUE(optimization_filter->Matches(GURL("https://m.black.com")));
+ EXPECT_TRUE(optimization_filter->Matches(GURL("https://m.host.com")));
}
TEST_F(HintsComponentUtilTest, ProcessOptimizationFilterWithBadNumBits) {
proto::OptimizationFilter optimization_filter_proto;
BloomFilter bloom_filter(7, 1234);
- bloom_filter.Add("black.com");
+ bloom_filter.Add("host.com");
proto::BloomFilter* bloom_filter_proto =
optimization_filter_proto.mutable_bloom_filter();
bloom_filter_proto->set_num_hash_functions(7);
bloom_filter_proto->set_num_bits(bloom_filter.bytes().size() * 8 + 1);
- std::string blacklist_data(
+ std::string blocklist_data(
reinterpret_cast<const char*>(&bloom_filter.bytes()[0]),
bloom_filter.bytes().size());
- bloom_filter_proto->set_data(blacklist_data);
+ bloom_filter_proto->set_data(blocklist_data);
OptimizationFilterStatus status;
std::unique_ptr<OptimizationFilter> optimization_filter =
ProcessOptimizationFilter(optimization_filter_proto, &status);
- EXPECT_EQ(status, OptimizationFilterStatus::kFailedServerBlacklistBadConfig);
+ EXPECT_EQ(status, OptimizationFilterStatus::kFailedServerFilterBadConfig);
EXPECT_EQ(nullptr, optimization_filter);
}
@@ -203,7 +203,7 @@ TEST_F(HintsComponentUtilTest, ProcessOptimizationFilterWithRegexps) {
std::unique_ptr<OptimizationFilter> optimization_filter =
ProcessOptimizationFilter(optimization_filter_proto, &status);
- EXPECT_EQ(status, OptimizationFilterStatus::kCreatedServerBlacklist);
+ EXPECT_EQ(status, OptimizationFilterStatus::kCreatedServerFilter);
ASSERT_TRUE(optimization_filter);
EXPECT_TRUE(optimization_filter->Matches(GURL("https://test.com")));
}
@@ -228,15 +228,15 @@ TEST_F(HintsComponentUtilTest,
proto::OptimizationFilter optimization_filter_proto;
optimization_filter_proto.add_regexps("test[");
BloomFilter bloom_filter(num_hash_functions, num_bits);
- bloom_filter.Add("black.com");
+ bloom_filter.Add("host.com");
proto::BloomFilter* bloom_filter_proto =
optimization_filter_proto.mutable_bloom_filter();
bloom_filter_proto->set_num_hash_functions(num_hash_functions);
bloom_filter_proto->set_num_bits(num_bits);
- std::string blacklist_data(
+ std::string blocklist_data(
reinterpret_cast<const char*>(&bloom_filter.bytes()[0]),
bloom_filter.bytes().size());
- bloom_filter_proto->set_data(blacklist_data);
+ bloom_filter_proto->set_data(blocklist_data);
OptimizationFilterStatus status;
std::unique_ptr<OptimizationFilter> optimization_filter =
@@ -246,26 +246,26 @@ TEST_F(HintsComponentUtilTest,
EXPECT_EQ(nullptr, optimization_filter);
}
-TEST_F(HintsComponentUtilTest, ProcessOptimizationFilterWithTooLargeBlacklist) {
+TEST_F(HintsComponentUtilTest, ProcessOptimizationFilterWithTooLargeFilter) {
int too_many_bits = features::MaxServerBloomFilterByteSize() * 8 + 1;
proto::OptimizationFilter optimization_filter_proto;
BloomFilter bloom_filter(7, too_many_bits);
- bloom_filter.Add("black.com");
+ bloom_filter.Add("host.com");
proto::BloomFilter* bloom_filter_proto =
optimization_filter_proto.mutable_bloom_filter();
bloom_filter_proto->set_num_hash_functions(7);
bloom_filter_proto->set_num_bits(too_many_bits);
- std::string blacklist_data(
+ std::string blocklist_data(
reinterpret_cast<const char*>(&bloom_filter.bytes()[0]),
bloom_filter.bytes().size());
- bloom_filter_proto->set_data(blacklist_data);
+ bloom_filter_proto->set_data(blocklist_data);
OptimizationFilterStatus status;
std::unique_ptr<OptimizationFilter> optimization_filter =
ProcessOptimizationFilter(optimization_filter_proto, &status);
- EXPECT_EQ(status, OptimizationFilterStatus::kFailedServerBlacklistTooBig);
+ EXPECT_EQ(status, OptimizationFilterStatus::kFailedServerFilterTooBig);
EXPECT_EQ(nullptr, optimization_filter);
}
@@ -276,7 +276,33 @@ TEST_F(HintsComponentUtilTest,
proto::OptimizationFilter optimization_filter_proto;
BloomFilter bloom_filter(num_hash_functions, num_bits);
- bloom_filter.Add("black.com");
+ bloom_filter.Add("host.com");
+ proto::BloomFilter* bloom_filter_proto =
+ optimization_filter_proto.mutable_bloom_filter();
+ bloom_filter_proto->set_num_hash_functions(num_hash_functions);
+ bloom_filter_proto->set_num_bits(num_bits);
+ std::string blocklist_data(
+ reinterpret_cast<const char*>(&bloom_filter.bytes()[0]),
+ bloom_filter.bytes().size());
+ bloom_filter_proto->set_data(blocklist_data);
+
+ std::unique_ptr<OptimizationFilter> optimization_filter =
+ ProcessOptimizationFilter(optimization_filter_proto,
+ /*out_status=*/nullptr);
+
+ ASSERT_TRUE(optimization_filter);
+ EXPECT_TRUE(optimization_filter->Matches(GURL("https://m.host.com")));
+}
+
+TEST_F(HintsComponentUtilTest,
+ ProcessOptimizationFilterSkipHostSuffixCheckingIsPropagated) {
+ int num_hash_functions = 7;
+ int num_bits = 1234;
+
+ proto::OptimizationFilter optimization_filter_proto;
+ optimization_filter_proto.set_skip_host_suffix_checking(true);
+ BloomFilter bloom_filter(num_hash_functions, num_bits);
+ bloom_filter.Add("host.com");
proto::BloomFilter* bloom_filter_proto =
optimization_filter_proto.mutable_bloom_filter();
bloom_filter_proto->set_num_hash_functions(num_hash_functions);
@@ -291,7 +317,7 @@ TEST_F(HintsComponentUtilTest,
/*out_status=*/nullptr);
ASSERT_TRUE(optimization_filter);
- EXPECT_TRUE(optimization_filter->Matches(GURL("https://m.black.com")));
+ EXPECT_FALSE(optimization_filter->Matches(GURL("https://m.host.com")));
}
} // namespace optimization_guide
diff --git a/chromium/components/optimization_guide/hints_processing_util.cc b/chromium/components/optimization_guide/hints_processing_util.cc
index bb19c11c937..2191cca0f52 100644
--- a/chromium/components/optimization_guide/hints_processing_util.cc
+++ b/chromium/components/optimization_guide/hints_processing_util.cc
@@ -43,6 +43,8 @@ std::string GetStringNameForOptimizationType(
return "CompressPublicImages";
case proto::OptimizationType::LOADING_PREDICTOR:
return "LoadingPredictor";
+ case proto::OptimizationType::FAST_HOST_HINTS:
+ return "FastHostHints";
}
NOTREACHED();
return std::string();
diff --git a/chromium/components/optimization_guide/optimization_filter.cc b/chromium/components/optimization_guide/optimization_filter.cc
index 801e1e2494e..f977fc1d732 100644
--- a/chromium/components/optimization_guide/optimization_filter.cc
+++ b/chromium/components/optimization_guide/optimization_filter.cc
@@ -18,8 +18,11 @@ const int kMinHostSuffix = 6; // eg., abc.tv
OptimizationFilter::OptimizationFilter(
std::unique_ptr<BloomFilter> bloom_filter,
- std::unique_ptr<RegexpList> regexps)
- : bloom_filter_(std::move(bloom_filter)), regexps_(std::move(regexps)) {
+ std::unique_ptr<RegexpList> regexps,
+ bool skip_host_suffix_checking)
+ : bloom_filter_(std::move(bloom_filter)),
+ regexps_(std::move(regexps)),
+ skip_host_suffix_checking_(skip_host_suffix_checking) {
// May be created on one thread but used on another. The first call to
// CalledOnValidSequence() will re-bind it.
DETACH_FROM_SEQUENCE(sequence_checker_);
@@ -43,6 +46,10 @@ bool OptimizationFilter::ContainsHostSuffix(const GURL& url) const {
if (bloom_filter_->Contains(url.host()))
return true;
+ // Do not check host suffixes if we are told to skip host suffix checking.
+ if (skip_host_suffix_checking_)
+ return false;
+
// Now check host suffixes from shortest to longest but skipping the
// root domain (eg, skipping "com", "org", "in", "uk").
std::string full_host(url.host());
diff --git a/chromium/components/optimization_guide/optimization_filter.h b/chromium/components/optimization_guide/optimization_filter.h
index 9b93aacbf56..3e57d27fc07 100644
--- a/chromium/components/optimization_guide/optimization_filter.h
+++ b/chromium/components/optimization_guide/optimization_filter.h
@@ -28,7 +28,8 @@ typedef std::vector<std::unique_ptr<re2::RE2>> RegexpList;
class OptimizationFilter {
public:
explicit OptimizationFilter(std::unique_ptr<BloomFilter> bloom_filter,
- std::unique_ptr<RegexpList> regexps);
+ std::unique_ptr<RegexpList> regexps,
+ bool skip_host_suffix_checking);
~OptimizationFilter();
@@ -56,6 +57,8 @@ class OptimizationFilter {
std::unique_ptr<RegexpList> regexps_;
+ bool skip_host_suffix_checking_ = false;
+
SEQUENCE_CHECKER(sequence_checker_);
DISALLOW_COPY_AND_ASSIGN(OptimizationFilter);
diff --git a/chromium/components/optimization_guide/optimization_filter_unittest.cc b/chromium/components/optimization_guide/optimization_filter_unittest.cc
index c1e29d95cb0..455555ee6f9 100644
--- a/chromium/components/optimization_guide/optimization_filter_unittest.cc
+++ b/chromium/components/optimization_guide/optimization_filter_unittest.cc
@@ -31,7 +31,8 @@ std::unique_ptr<RegexpList> CreateRegexps(
TEST(OptimizationFilterTest, TestMatchesBloomFilter) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("fooco.co.uk");
- OptimizationFilter opt_filter(std::move(bloom_filter), nullptr);
+ OptimizationFilter opt_filter(std::move(bloom_filter), nullptr,
+ /*skip_host_suffix_checking=*/false);
EXPECT_TRUE(opt_filter.Matches(GURL("http://shopping.fooco.co.uk")));
EXPECT_TRUE(
opt_filter.Matches(GURL("https://shopping.fooco.co.uk/somepath")));
@@ -39,9 +40,21 @@ TEST(OptimizationFilterTest, TestMatchesBloomFilter) {
EXPECT_FALSE(opt_filter.Matches(GURL("https://nonfooco.co.uk")));
}
+TEST(OptimizationFilterTest, TestMatchesBloomFilterSkipHostSuffixChecking) {
+ std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
+ bloom_filter->Add("fooco.co.uk");
+ OptimizationFilter opt_filter(std::move(bloom_filter), nullptr,
+ /*skip_host_suffix_checking=*/true);
+ EXPECT_TRUE(opt_filter.Matches(GURL("https://fooco.co.uk/somepath")));
+ EXPECT_TRUE(opt_filter.Matches(GURL("https://fooco.co.uk")));
+ EXPECT_FALSE(opt_filter.Matches(GURL("http://shopping.fooco.co.uk")));
+ EXPECT_FALSE(opt_filter.Matches(GURL("https://nonfooco.co.uk")));
+}
+
TEST(OptimizationFilterTest, TestMatchesRegexp) {
std::unique_ptr<RegexpList> regexps(CreateRegexps({"test"}));
- OptimizationFilter opt_filter(nullptr, std::move(regexps));
+ OptimizationFilter opt_filter(nullptr, std::move(regexps),
+ /*skip_host_suffix_checking=*/false);
EXPECT_TRUE(opt_filter.Matches(GURL("http://test.com")));
EXPECT_TRUE(opt_filter.Matches(GURL("https://shopping.com/test")));
EXPECT_TRUE(opt_filter.Matches(GURL("https://shopping.com/?query=test")));
@@ -50,14 +63,16 @@ TEST(OptimizationFilterTest, TestMatchesRegexp) {
TEST(OptimizationFilterTest, TestMatchesRegexpFragment) {
std::unique_ptr<RegexpList> regexps(CreateRegexps({"test"}));
- OptimizationFilter opt_filter(nullptr, std::move(regexps));
+ OptimizationFilter opt_filter(nullptr, std::move(regexps),
+ /*skip_host_suffix_checking=*/false);
// Fragments are not matched.
EXPECT_FALSE(opt_filter.Matches(GURL("https://shopping.com/#test")));
}
TEST(OptimizationFilterTest, TestMatchesRegexpInvalid) {
std::unique_ptr<RegexpList> regexps(CreateRegexps({"test[", "shop"}));
- OptimizationFilter opt_filter(nullptr, std::move(regexps));
+ OptimizationFilter opt_filter(nullptr, std::move(regexps),
+ /*skip_host_suffix_checking=*/false);
// Invalid regexps are not used
EXPECT_FALSE(opt_filter.Matches(GURL("https://test.com/")));
EXPECT_TRUE(opt_filter.Matches(GURL("https://shopping.com/")));
@@ -65,7 +80,8 @@ TEST(OptimizationFilterTest, TestMatchesRegexpInvalid) {
TEST(OptimizationFilterTest, TestMatchesRegexpInvalidGURL) {
std::unique_ptr<RegexpList> regexps(CreateRegexps({"test"}));
- OptimizationFilter opt_filter(nullptr, std::move(regexps));
+ OptimizationFilter opt_filter(nullptr, std::move(regexps),
+ /*skip_host_suffix_checking=*/false);
// Invalid urls are not matched.
EXPECT_FALSE(opt_filter.Matches(GURL("test")));
}
@@ -74,7 +90,8 @@ TEST(OptimizationFilterTest, TestMatchesMaxSuffix) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("one.two.three.four.co.uk");
bloom_filter->Add("one.two.three.four.five.co.uk");
- OptimizationFilter opt_filter(std::move(bloom_filter), nullptr);
+ OptimizationFilter opt_filter(std::move(bloom_filter), nullptr,
+ /*skip_host_suffix_checking=*/false);
EXPECT_TRUE(opt_filter.Matches(GURL("http://host.one.two.three.four.co.uk")));
EXPECT_FALSE(
opt_filter.Matches(GURL("http://host.one.two.three.four.five.co.uk")));
@@ -87,7 +104,8 @@ TEST(OptimizationFilterTest, TestMatchesMinSuffix) {
std::unique_ptr<BloomFilter> bloom_filter(CreateBloomFilter());
bloom_filter->Add("abc.tv");
bloom_filter->Add("xy.tv");
- OptimizationFilter opt_filter(std::move(bloom_filter), nullptr);
+ OptimizationFilter opt_filter(std::move(bloom_filter), nullptr,
+ /*skip_host_suffix_checking=*/false);
EXPECT_TRUE(opt_filter.Matches(GURL("https://abc.tv")));
EXPECT_TRUE(opt_filter.Matches(GURL("https://host.abc.tv")));
EXPECT_FALSE(opt_filter.Matches(GURL("https://host.xy.tv")));
diff --git a/chromium/components/optimization_guide/optimization_guide_decider.h b/chromium/components/optimization_guide/optimization_guide_decider.h
index 703d18fd173..b132a863793 100644
--- a/chromium/components/optimization_guide/optimization_guide_decider.h
+++ b/chromium/components/optimization_guide/optimization_guide_decider.h
@@ -57,14 +57,6 @@ class OptimizationGuideDecider {
content::NavigationHandle* navigation_handle,
proto::OptimizationTarget optimization_target) = 0;
- // Returns whether |optimization_type| can be applied for the URL associated
- // with |navigation_handle|. This should only be called for main frame
- // navigations.
- virtual OptimizationGuideDecision CanApplyOptimization(
- content::NavigationHandle* navigation_handle,
- proto::OptimizationType optimization_type,
- OptimizationMetadata* optimization_metadata) = 0;
-
// Invokes |callback| with the decision for the URL contained in
// |navigation_handle| and |optimization_type|, when sufficient information
// has been collected to make the decision. This should only be called for
@@ -74,6 +66,13 @@ class OptimizationGuideDecider {
proto::OptimizationType optimization_type,
OptimizationGuideDecisionCallback callback) = 0;
+ // Returns whether |optimization_type| can be applied for |url|. This should
+ // only be called for main frame navigations or future main frame navigations.
+ virtual OptimizationGuideDecision CanApplyOptimization(
+ const GURL& url,
+ proto::OptimizationType optimization_type,
+ OptimizationMetadata* optimization_metadata) = 0;
+
protected:
OptimizationGuideDecider() {}
virtual ~OptimizationGuideDecider() {}
diff --git a/chromium/components/optimization_guide/optimization_guide_features.cc b/chromium/components/optimization_guide/optimization_guide_features.cc
index 14203f23ba8..1cec9403404 100644
--- a/chromium/components/optimization_guide/optimization_guide_features.cc
+++ b/chromium/components/optimization_guide/optimization_guide_features.cc
@@ -58,7 +58,13 @@ const base::Feature kRemoteOptimizationGuideFetchingAnonymousDataConsent{
// Enables the prediction of optimization targets.
const base::Feature kOptimizationTargetPrediction{
- "OptimizationTargetPrediction", base::FEATURE_DISABLED_BY_DEFAULT};
+ "OptimizationTargetPrediction",
+#if defined(OS_ANDROID)
+ base::FEATURE_ENABLED_BY_DEFAULT
+#else // !defined(OS_ANDROID)
+ base::FEATURE_DISABLED_BY_DEFAULT
+#endif // defined(OS_ANDROID)
+};
size_t MaxHintsFetcherTopHostBlacklistSize() {
// The blacklist will be limited to the most engaged hosts and will hold twice
@@ -265,7 +271,7 @@ int PredictionModelFetchRandomMinDelaySecs() {
int PredictionModelFetchRandomMaxDelaySecs() {
return GetFieldTrialParamByFeatureAsInt(kOptimizationTargetPrediction,
- "fetch_random_max_delay_secs", 180);
+ "fetch_random_max_delay_secs", 60);
}
base::flat_set<std::string> ExternalAppPackageNamesApprovedForFetch() {
diff --git a/chromium/components/optimization_guide/optimization_guide_store.h b/chromium/components/optimization_guide/optimization_guide_store.h
index cef65519d05..56f1b1ef116 100644
--- a/chromium/components/optimization_guide/optimization_guide_store.h
+++ b/chromium/components/optimization_guide/optimization_guide_store.h
@@ -253,6 +253,9 @@ class OptimizationGuideStore {
// Clears all host model features from the database and resets the entry keys.
void ClearHostModelFeaturesFromDatabase();
+ // Returns true if the current status is Status::kAvailable.
+ bool IsAvailable() const;
+
private:
friend class OptimizationGuideStoreTest;
friend class StoreUpdateData;
@@ -312,9 +315,6 @@ class OptimizationGuideStore {
// transitions to Status::kFailed.
void UpdateStatus(Status new_status);
- // Returns true if the current status is Status::kAvailable.
- bool IsAvailable() const;
-
// Asynchronously purges all existing entries from the database and runs the
// callback after it completes. This should only be run during initialization.
void PurgeDatabase(base::OnceClosure callback);
diff --git a/chromium/components/optimization_guide/proto/hints.proto b/chromium/components/optimization_guide/proto/hints.proto
index a17704598e9..b0c73b844dc 100644
--- a/chromium/components/optimization_guide/proto/hints.proto
+++ b/chromium/components/optimization_guide/proto/hints.proto
@@ -136,6 +136,9 @@ enum OptimizationType {
// This optimization provides the Loading Predictor with resources predicted
// to be on the page.
LOADING_PREDICTOR = 9;
+ // This optimization provides information about hosts that historically
+ // provide a fast and responsive user experience.
+ FAST_HOST_HINTS = 10;
}
// Presents semantics for how page load URLs should be matched.
@@ -247,9 +250,7 @@ message BloomFilter {
optional bytes data = 3;
}
-// A scalable filter for an optimization type. Initially, this is used to
-// provide a large scale blacklist but might be used for whitelists in
-// the future.
+// A scalable filter for an optimization type.
message OptimizationFilter {
// The type of optimization this filter applies to.
optional OptimizationType optimization_type = 1;
@@ -258,6 +259,9 @@ message OptimizationFilter {
// Additional filters represented as regexps matched against the main page
// URL.
repeated string regexps = 3;
+ // Whether additional host suffixes (other than the host) should be checked
+ // against the filter.
+ optional bool skip_host_suffix_checking = 4;
}
message Configuration {
@@ -277,8 +281,16 @@ message Configuration {
// details for that key that it wants to provide as the client will only
// look at that one record to decide which optimization to apply.
repeated Hint hints = 1;
- // A list of per-optimization blacklists.
+ // A set of per-optimization blacklists.
+ //
+ // It is guaranteed that an optimization type will not have filters in both
+ // |optimization_blacklists| and |optimization_allowlists|.
repeated OptimizationFilter optimization_blacklists = 2;
+ // A set of per-optimization allowlists.
+ //
+ // It is guaranteed that an optimization type will not have filters in both
+ // |optimization_blacklists| and |optimization_allowlists|.
+ repeated OptimizationFilter optimization_allowlists = 3;
}
message Timestamp {
diff --git a/chromium/components/optimization_guide/proto/performance_hints_metadata.proto b/chromium/components/optimization_guide/proto/performance_hints_metadata.proto
index 9232d88f1a3..871fb138a1d 100644
--- a/chromium/components/optimization_guide/proto/performance_hints_metadata.proto
+++ b/chromium/components/optimization_guide/proto/performance_hints_metadata.proto
@@ -43,4 +43,11 @@ message PerformanceHintsMetadata {
//
// Only the first matching hint should be applied to a given URL.
repeated PerformanceHint performance_hints = 1;
+
+ // The PerformanceHint for the page pattern that matched the parent
+ // OptimizationGuide hint.
+ //
+ // This is (generally) the current page. The "key" field is not populated as
+ // the pattern matching is done by OptimizationGuide.
+ optional PerformanceHint page_hint = 2;
}
diff --git a/chromium/components/optimization_guide/test_optimization_guide_decider.cc b/chromium/components/optimization_guide/test_optimization_guide_decider.cc
index dd3544ef5b3..d32ea314c80 100644
--- a/chromium/components/optimization_guide/test_optimization_guide_decider.cc
+++ b/chromium/components/optimization_guide/test_optimization_guide_decider.cc
@@ -21,13 +21,6 @@ OptimizationGuideDecision TestOptimizationGuideDecider::ShouldTargetNavigation(
return OptimizationGuideDecision::kFalse;
}
-OptimizationGuideDecision TestOptimizationGuideDecider::CanApplyOptimization(
- content::NavigationHandle* navigation_handle,
- proto::OptimizationType optimization_type,
- OptimizationMetadata* optimization_metadata) {
- return OptimizationGuideDecision::kFalse;
-}
-
void TestOptimizationGuideDecider::CanApplyOptimizationAsync(
content::NavigationHandle* navigation_handle,
proto::OptimizationType optimization_type,
@@ -36,4 +29,11 @@ void TestOptimizationGuideDecider::CanApplyOptimizationAsync(
/*optimization_metadata=*/{});
}
+OptimizationGuideDecision TestOptimizationGuideDecider::CanApplyOptimization(
+ const GURL& url,
+ proto::OptimizationType optimization_type,
+ OptimizationMetadata* optimization_metadata) {
+ return OptimizationGuideDecision::kFalse;
+}
+
} // namespace optimization_guide
diff --git a/chromium/components/optimization_guide/test_optimization_guide_decider.h b/chromium/components/optimization_guide/test_optimization_guide_decider.h
index 4f4643b896d..e8a2ccd949e 100644
--- a/chromium/components/optimization_guide/test_optimization_guide_decider.h
+++ b/chromium/components/optimization_guide/test_optimization_guide_decider.h
@@ -28,14 +28,14 @@ class TestOptimizationGuideDecider : public OptimizationGuideDecider {
OptimizationGuideDecision ShouldTargetNavigation(
content::NavigationHandle* navigation_handle,
proto::OptimizationTarget optimization_target) override;
- OptimizationGuideDecision CanApplyOptimization(
- content::NavigationHandle* navigation_handle,
- proto::OptimizationType optimization_type,
- OptimizationMetadata* optimization_metadata) override;
void CanApplyOptimizationAsync(
content::NavigationHandle* navigation_handle,
proto::OptimizationType optimization_type,
OptimizationGuideDecisionCallback callback) override;
+ OptimizationGuideDecision CanApplyOptimization(
+ const GURL& url,
+ proto::OptimizationType optimization_type,
+ OptimizationMetadata* optimization_metadata) override;
};
} // namespace optimization_guide
diff --git a/chromium/components/optimization_guide/url_pattern_with_wildcards.h b/chromium/components/optimization_guide/url_pattern_with_wildcards.h
index 4412d6a990b..a66bb8e3708 100644
--- a/chromium/components/optimization_guide/url_pattern_with_wildcards.h
+++ b/chromium/components/optimization_guide/url_pattern_with_wildcards.h
@@ -10,7 +10,6 @@
#include <string>
#include <vector>
-#include "base/logging.h"
#include "base/macros.h"
namespace optimization_guide {