diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/optimization_guide | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-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')
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 { |