diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-02-04 17:20:24 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-02-12 08:15:25 +0000 |
commit | 8fa0776f1f79e91fc9c0b9c1ba11a0a29c05196b (patch) | |
tree | 788d8d7549712682703a0310ca4a0f0860d4802b /chromium/components/ukm | |
parent | 606d85f2a5386472314d39923da28c70c60dc8e7 (diff) | |
download | qtwebengine-chromium-8fa0776f1f79e91fc9c0b9c1ba11a0a29c05196b.tar.gz |
BASELINE: Update Chromium to 98.0.4758.90
Change-Id: Ib7c41539bf8a8e0376bd639f27d68294de90f3c8
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/ukm')
18 files changed, 152 insertions, 273 deletions
diff --git a/chromium/components/ukm/app_source_url_recorder.cc b/chromium/components/ukm/app_source_url_recorder.cc index d7eed5c17b7..60bf743a6f1 100644 --- a/chromium/components/ukm/app_source_url_recorder.cc +++ b/chromium/components/ukm/app_source_url_recorder.cc @@ -49,6 +49,11 @@ SourceId AppSourceUrlRecorder::GetSourceIdForPWA(const GURL& url) { return GetSourceIdForUrl(url, AppType::kPWA); } +SourceId AppSourceUrlRecorder::GetSourceIdForBorealis(const std::string& app) { + GURL url("app://borealis/" + app); + return GetSourceIdForUrl(url, AppType::kBorealis); +} + SourceId AppSourceUrlRecorder::GetSourceIdForCrostini( const std::string& desktop_id, const std::string& app_name) { diff --git a/chromium/components/ukm/app_source_url_recorder.h b/chromium/components/ukm/app_source_url_recorder.h index 763396cfbbd..fa71a39c1e7 100644 --- a/chromium/components/ukm/app_source_url_recorder.h +++ b/chromium/components/ukm/app_source_url_recorder.h @@ -62,9 +62,14 @@ class AppSourceUrlRecorder { // "app://play/pjhgmeephkiehhlkfcoginnkbphkdang". static SourceId GetSourceIdForArc(const std::string& package_name); - // Get a UKM SourceId for a PWA or bookmark app. + // Get a UKM SourceId for a PWA. static SourceId GetSourceIdForPWA(const GURL& url); + // Get a UKM SourceId with the prefix "app://borealis/" for a Borealis app. + // `app` could be a numeric Borealis App ID, or a string identifying a + // special case such as the main client app or an unregistered app. + static SourceId GetSourceIdForBorealis(const std::string& app); + // Get a UKM SourceId with the prefix "app://" for a Crostini app with an XDG // desktop id of `desktop_id` and app name of `app_name`. static SourceId GetSourceIdForCrostini(const std::string& desktop_id, diff --git a/chromium/components/ukm/app_source_url_recorder_test.cc b/chromium/components/ukm/app_source_url_recorder_test.cc index d94be205b43..7823f38ec5c 100644 --- a/chromium/components/ukm/app_source_url_recorder_test.cc +++ b/chromium/components/ukm/app_source_url_recorder_test.cc @@ -36,6 +36,10 @@ class AppSourceUrlRecorderTest : public testing::Test { return AppSourceUrlRecorder::GetSourceIdForPWA(url); } + SourceId GetSourceIdForBorealis(const std::string& app) { + return AppSourceUrlRecorder::GetSourceIdForBorealis(app); + } + SourceId GetSourceIdForCrostini(const std::string& desktop_id, const std::string& app_name) { return AppSourceUrlRecorder::GetSourceIdForCrostini(desktop_id, app_name); @@ -47,7 +51,7 @@ class AppSourceUrlRecorderTest : public testing::Test { }; TEST_F(AppSourceUrlRecorderTest, CheckChromeApp) { - const std::string app_id = "hhaomjibdihmijegdhdafkllkbggdgoj"; + const std::string app_id = "unique_app_id"; SourceId id = GetSourceIdForChromeApp(app_id); GURL expected_url("app://" + app_id); @@ -106,6 +110,20 @@ TEST_F(AppSourceUrlRecorderTest, CheckPWA) { EXPECT_EQ(1u, it->second->urls().size()); } +TEST_F(AppSourceUrlRecorderTest, CheckBorealis) { + GURL expected_url("app://borealis/123"); + SourceId id = GetSourceIdForBorealis("123"); + + const auto& sources = test_ukm_recorder_.GetSources(); + ASSERT_EQ(1ul, sources.size()); + + ASSERT_NE(kInvalidSourceId, id); + auto it = sources.find(id); + ASSERT_NE(sources.end(), it); + EXPECT_EQ(expected_url, it->second->url()); + EXPECT_EQ(1u, it->second->urls().size()); +} + TEST_F(AppSourceUrlRecorderTest, CheckCrostini) { // Typically a desktop ID won't use much besides [a-zA-Z0-9.-] but it's // untrusted user-supplied data so make sure it's all escaped anyway. diff --git a/chromium/components/ukm/content/source_url_recorder.cc b/chromium/components/ukm/content/source_url_recorder.cc index 1b90fcb7a76..284b34ffe03 100644 --- a/chromium/components/ukm/content/source_url_recorder.cc +++ b/chromium/components/ukm/content/source_url_recorder.cc @@ -7,7 +7,6 @@ #include <utility> #include "base/containers/flat_map.h" -#include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/metrics/field_trial_params.h" #include "content/public/browser/navigation_handle.h" @@ -22,21 +21,6 @@ namespace ukm { -namespace { - -// -1 indicates no max number of same document sources per full source. -int kUnlimitedSameDocumentSourcesPerFullSource = -1; - -// Returns the maximum number of same document sources that are allowed to be -// recorded for a full source. -int GetMaxSameDocumentSourcesPerFullSource() { - return base::GetFieldTrialParamByFeatureAsInt( - kUkmFeature, "MaxSameDocumentSourcesPerFullSource", - kUnlimitedSameDocumentSourcesPerFullSource); -} - -} // namespace - namespace internal { int64_t CreateUniqueTabId() { @@ -122,6 +106,8 @@ WEB_CONTENTS_USER_DATA_KEY_IMPL(SourceUrlRecorderWebContentsObserver); SourceUrlRecorderWebContentsObserver::SourceUrlRecorderWebContentsObserver( content::WebContents* web_contents) : content::WebContentsObserver(web_contents), + content::WebContentsUserData<SourceUrlRecorderWebContentsObserver>( + *web_contents), last_committed_full_navigation_source_id_(ukm::kInvalidSourceId), last_committed_full_navigation_or_same_document_source_id_( ukm::kInvalidSourceId), @@ -203,15 +189,7 @@ void SourceUrlRecorderWebContentsObserver::HandleSameDocumentNavigation( GetLastCommittedFullNavigationOrSameDocumentSourceId()); } - const int max_same_document_sources_per_full_source = - GetMaxSameDocumentSourcesPerFullSource(); - - if (max_same_document_sources_per_full_source == - kUnlimitedSameDocumentSourcesPerFullSource || - num_same_document_sources_for_full_navigation_source_ < - max_same_document_sources_per_full_source) { - MaybeRecordUrl(navigation_handle, GURL::EmptyGURL()); - } + MaybeRecordUrl(navigation_handle, GURL::EmptyGURL()); last_committed_full_navigation_or_same_document_source_id_ = ukm::ConvertToSourceId(navigation_handle->GetNavigationId(), diff --git a/chromium/components/ukm/content/source_url_recorder_test.cc b/chromium/components/ukm/content/source_url_recorder_test.cc index 213069fe5a5..97ffd712528 100644 --- a/chromium/components/ukm/content/source_url_recorder_test.cc +++ b/chromium/components/ukm/content/source_url_recorder_test.cc @@ -198,32 +198,6 @@ TEST_F(SourceUrlRecorderWebContentsObserverTest, SameDocumentNavigation) { same_doc_source2.navigation_time_msec()); } -TEST_F(SourceUrlRecorderWebContentsObserverTest, - SameDocumentNavigationDisabled) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - ukm::kUkmFeature, {{"MaxSameDocumentSourcesPerFullSource", "0"}}); - - GURL url("https://www.example.com/"); - GURL same_document_url("https://www.example.com/#samedocument"); - NavigationSimulator::NavigateAndCommitFromBrowser(web_contents(), url); - NavigationSimulator::CreateRendererInitiated(same_document_url, main_rfh()) - ->CommitSameDocument(); - - EXPECT_EQ(same_document_url, web_contents()->GetLastCommittedURL()); - - const auto& sources = test_ukm_recorder_.GetSources(); - // Expect two sources, one for navigation, one for document. - EXPECT_EQ(2ul, sources.size()); - for (auto& kv : sources) { - EXPECT_EQ(url, kv.second->url()); - EXPECT_EQ(1u, kv.second->urls().size()); - EXPECT_FALSE(kv.second->navigation_data().is_same_document_navigation); - } - - EXPECT_EQ(url, GetAssociatedURLForWebContentsDocument()); -} - TEST_F(SourceUrlRecorderWebContentsObserverTest, NavigationMetadata) { GURL url1("https://www.example.com/1"); GURL same_origin_url1("https://www.example.com/same_origin"); diff --git a/chromium/components/ukm/debug/ukm_debug_data_extractor.cc b/chromium/components/ukm/debug/ukm_debug_data_extractor.cc index 41f6dc25f6b..fc75c40dbb6 100644 --- a/chromium/components/ukm/debug/ukm_debug_data_extractor.cc +++ b/chromium/components/ukm/debug/ukm_debug_data_extractor.cc @@ -11,6 +11,7 @@ #include <vector> #include "base/format_macros.h" +#include "base/memory/raw_ptr.h" #include "base/strings/stringprintf.h" #include "services/metrics/public/cpp/ukm_decode.h" #include "services/metrics/public/cpp/ukm_source.h" @@ -25,7 +26,7 @@ namespace { static const uint64_t BIT_FILTER_LAST32 = 0xffffffffULL; struct SourceData { - UkmSource* source; + raw_ptr<UkmSource> source; std::vector<mojom::UkmEntry*> entries; }; @@ -94,7 +95,7 @@ base::Value UkmDebugDataExtractor::GetStructuredData( ukm_data.SetKey( "is_sampling_enabled", - base::Value(static_cast<bool>(ukm_service->IsSamplingEnabled()))); + base::Value(static_cast<bool>(ukm_service->IsSamplingConfigured()))); std::map<SourceId, SourceData> source_data; for (const auto& kv : ukm_service->recordings_.sources) { @@ -107,7 +108,7 @@ base::Value UkmDebugDataExtractor::GetStructuredData( base::ListValue sources_list; for (const auto& kv : source_data) { - const auto* src = kv.second.source; + const auto* src = kv.second.source.get(); base::DictionaryValue source_value; if (src) { diff --git a/chromium/components/ukm/debug/ukm_debug_data_extractor.h b/chromium/components/ukm/debug/ukm_debug_data_extractor.h index b2b5adac05e..8ba6bbcb821 100644 --- a/chromium/components/ukm/debug/ukm_debug_data_extractor.h +++ b/chromium/components/ukm/debug/ukm_debug_data_extractor.h @@ -5,7 +5,6 @@ #ifndef COMPONENTS_UKM_DEBUG_UKM_DEBUG_DATA_EXTRACTOR_H_ #define COMPONENTS_UKM_DEBUG_UKM_DEBUG_DATA_EXTRACTOR_H_ -#include "base/macros.h" #include "base/values.h" #include "components/ukm/ukm_service.h" diff --git a/chromium/components/ukm/ios/ukm_url_recorder.mm b/chromium/components/ukm/ios/ukm_url_recorder.mm index 8b997abe1f2..a84a0726e7b 100644 --- a/chromium/components/ukm/ios/ukm_url_recorder.mm +++ b/chromium/components/ukm/ios/ukm_url_recorder.mm @@ -7,7 +7,6 @@ #include <utility> #include "base/containers/flat_map.h" -#include "base/macros.h" #import "ios/web/public/navigation/navigation_context.h" #import "ios/web/public/web_state.h" #include "ios/web/public/web_state_observer.h" diff --git a/chromium/components/ukm/test_ukm_recorder.cc b/chromium/components/ukm/test_ukm_recorder.cc index d953d1250a6..6d245988bb9 100644 --- a/chromium/components/ukm/test_ukm_recorder.cc +++ b/chromium/components/ukm/test_ukm_recorder.cc @@ -38,8 +38,8 @@ void MergeEntry(const mojom::UkmEntry* in, mojom::UkmEntry* out) { TestUkmRecorder::TestUkmRecorder() { EnableRecording(/*extensions=*/true); - StoreWhitelistedEntries(); - DisableSamplingForTesting(); + InitDecodeMap(); + SetSamplingForTesting(1); // 1-in-1 == unsampled } TestUkmRecorder::~TestUkmRecorder() {} @@ -50,12 +50,6 @@ bool TestUkmRecorder::ShouldRestrictToWhitelistedSourceIds() const { return false; } -bool TestUkmRecorder::ShouldRestrictToWhitelistedEntries() const { - // In tests, we want to record all entries (not just those that are - // whitelisted). - return false; -} - void TestUkmRecorder::AddEntry(mojom::UkmEntryPtr entry) { const bool should_run_callback = on_add_entry_ && entry && entry_hash_to_wait_for_ == entry->event_hash; diff --git a/chromium/components/ukm/test_ukm_recorder.h b/chromium/components/ukm/test_ukm_recorder.h index f91c8831726..39930e524a1 100644 --- a/chromium/components/ukm/test_ukm_recorder.h +++ b/chromium/components/ukm/test_ukm_recorder.h @@ -14,7 +14,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/macros.h" #include "base/memory/weak_ptr.h" #include "components/ukm/ukm_recorder_impl.h" #include "services/metrics/public/cpp/ukm_recorder.h" @@ -49,7 +48,6 @@ class TestUkmRecorder : public UkmRecorderImpl { ~TestUkmRecorder() override; bool ShouldRestrictToWhitelistedSourceIds() const override; - bool ShouldRestrictToWhitelistedEntries() const override; void AddEntry(mojom::UkmEntryPtr entry) override; diff --git a/chromium/components/ukm/ukm_recorder_impl.cc b/chromium/components/ukm/ukm_recorder_impl.cc index eb10490ea46..c24b930c61b 100644 --- a/chromium/components/ukm/ukm_recorder_impl.cc +++ b/chromium/components/ukm/ukm_recorder_impl.cc @@ -41,13 +41,6 @@ const base::Feature kUkmSamplingRateFeature{"UkmSamplingRate", namespace { -// Gets the list of whitelisted Entries as string. Format is a comma separated -// list of Entry names (as strings). -std::string GetWhitelistEntries() { - return base::GetFieldTrialParamValueByFeature(kUkmFeature, - "WhitelistEntries"); -} - bool IsWhitelistedSourceId(SourceId source_id) { SourceIdType type = GetSourceIdType(source_id); return type == SourceIdType::NAVIGATION_ID || type == SourceIdType::APP_ID || @@ -59,9 +52,9 @@ bool IsWhitelistedSourceId(SourceId source_id) { // Returns whether |url| has one of the schemes supported for logging to UKM. // URLs with other schemes will not be logged. bool HasSupportedScheme(const GURL& url) { - return url.SchemeIsHTTPOrHTTPS() || url.SchemeIs(url::kFtpScheme) || - url.SchemeIs(url::kAboutScheme) || url.SchemeIs(kChromeUIScheme) || - url.SchemeIs(kExtensionScheme) || url.SchemeIs(kAppScheme); + return url.SchemeIsHTTPOrHTTPS() || url.SchemeIs(url::kAboutScheme) || + url.SchemeIs(kChromeUIScheme) || url.SchemeIs(kExtensionScheme) || + url.SchemeIs(kAppScheme); } void LogEventHashAsUmaHistogram(const std::string& histogram_name, @@ -86,6 +79,7 @@ enum class DroppedDataReason { NOT_MATCHED = 8, EMPTY_URL = 9, REJECTED_BY_FILTER = 10, + SAMPLING_UNCONFIGURED = 11, NUM_DROPPED_DATA_REASONS }; @@ -141,7 +135,7 @@ void AppendWhitelistedUrls( urls->insert(kv.second->url().spec()); // Some non-navigation sources only record origin as a URL. // Add the origin from the navigation source to match those too. - urls->insert(kv.second->url().GetOrigin().spec()); + urls->insert(kv.second->url().DeprecatedGetOriginAsURL().spec()); } } } @@ -174,13 +168,9 @@ bool HasUnknownMetrics(const builders::DecodeMap& decode_map, UkmRecorderImpl::UkmRecorderImpl() : sampling_seed_(static_cast<uint32_t>(base::RandUint64())) { - max_sources_ = static_cast<size_t>(base::GetFieldTrialParamByFeatureAsInt( - kUkmFeature, "MaxSources", max_sources_)); max_kept_sources_ = static_cast<size_t>(base::GetFieldTrialParamByFeatureAsInt( kUkmFeature, "MaxKeptSources", max_kept_sources_)); - max_entries_ = static_cast<size_t>(base::GetFieldTrialParamByFeatureAsInt( - kUkmFeature, "MaxEntries", max_entries_)); } UkmRecorderImpl::~UkmRecorderImpl() = default; @@ -251,12 +241,14 @@ void UkmRecorderImpl::DisableRecording() { extensions_enabled_ = false; } -void UkmRecorderImpl::DisableSamplingForTesting() { - sampling_enabled_ = false; +void UkmRecorderImpl::SetSamplingForTesting(int rate) { + sampling_forced_for_testing_ = true; + default_sampling_rate_ = rate; + event_sampling_rates_.clear(); } -bool UkmRecorderImpl::IsSamplingEnabled() const { - return sampling_enabled_ && +bool UkmRecorderImpl::IsSamplingConfigured() const { + return sampling_forced_for_testing_ || base::FeatureList::IsEnabled(kUkmSamplingRateFeature); } @@ -389,6 +381,10 @@ void UkmRecorderImpl::StoreRecordingsInReport(Report* report) { MarkSourceForDeletion(kv.first); } } + // Minimal validations before serializing into a proto message. + // See crbug/1274876. + DCHECK_NE(kv.second->id(), ukm::kInvalidSourceId); + DCHECK_NE(kv.second->urls().size(), 0u); Source* proto_source = report->add_sources(); kv.second->PopulateProto(proto_source); @@ -405,10 +401,10 @@ void UkmRecorderImpl::StoreRecordingsInReport(Report* report) { event_aggregate.dropped_due_to_limits); proto_aggregate->set_dropped_due_to_sampling( event_aggregate.dropped_due_to_sampling); - proto_aggregate->set_dropped_due_to_whitelist( - event_aggregate.dropped_due_to_whitelist); proto_aggregate->set_dropped_due_to_filter( event_aggregate.dropped_due_to_filter); + proto_aggregate->set_dropped_due_to_unconfigured( + event_aggregate.dropped_due_to_unconfigured); for (const auto& metric_and_aggregate : event_aggregate.metrics) { const MetricAggregate& aggregate = metric_and_aggregate.second; Aggregate::Metric* proto_metric = proto_aggregate->add_metrics(); @@ -428,16 +424,16 @@ void UkmRecorderImpl::StoreRecordingsInReport(Report* report) { proto_metric->set_dropped_due_to_sampling( aggregate.dropped_due_to_sampling); } - if (aggregate.dropped_due_to_whitelist != - event_aggregate.dropped_due_to_whitelist) { - proto_metric->set_dropped_due_to_whitelist( - aggregate.dropped_due_to_whitelist); - } if (aggregate.dropped_due_to_filter != event_aggregate.dropped_due_to_filter) { proto_metric->set_dropped_due_to_filter( aggregate.dropped_due_to_filter); } + if (aggregate.dropped_due_to_unconfigured != + event_aggregate.dropped_due_to_unconfigured) { + proto_metric->set_dropped_due_to_unconfigured( + aggregate.dropped_due_to_unconfigured); + } } } int num_serialized_sources = 0; @@ -548,10 +544,6 @@ bool UkmRecorderImpl::ShouldRestrictToWhitelistedSourceIds() const { kUkmFeature, "RestrictToWhitelistedSourceIds", false); } -bool UkmRecorderImpl::ShouldRestrictToWhitelistedEntries() const { - return true; -} - bool UkmRecorderImpl::ApplyEntryFilter(mojom::UkmEntry* entry) { base::flat_set<uint64_t> dropped_metric_hashes; @@ -731,29 +723,27 @@ void UkmRecorderImpl::AddEntry(mojom::UkmEntryPtr entry) { aggregate.value_square_sum += value * value; } - if (ShouldRestrictToWhitelistedEntries() && - !base::Contains(whitelisted_entry_hashes_, entry->event_hash)) { - RecordDroppedEntry(entry->event_hash, DroppedDataReason::NOT_WHITELISTED); - event_aggregate.dropped_due_to_whitelist++; + if (!IsSamplingConfigured()) { + RecordDroppedEntry(entry->event_hash, + DroppedDataReason::SAMPLING_UNCONFIGURED); + event_aggregate.dropped_due_to_unconfigured++; for (auto& metric : entry->metrics) - event_aggregate.metrics[metric.first].dropped_due_to_whitelist++; + event_aggregate.metrics[metric.first].dropped_due_to_unconfigured++; return; } - if (IsSamplingEnabled()) { - if (default_sampling_rate_ < 0) { - LoadExperimentSamplingInfo(); - } + if (default_sampling_rate_ < 0) { + LoadExperimentSamplingInfo(); + } - bool sampled_in = IsSampledIn(entry->source_id, entry->event_hash); + bool sampled_in = IsSampledIn(entry->source_id, entry->event_hash); - if (!sampled_in) { - RecordDroppedEntry(entry->event_hash, DroppedDataReason::SAMPLED_OUT); - event_aggregate.dropped_due_to_sampling++; - for (auto& metric : entry->metrics) - event_aggregate.metrics[metric.first].dropped_due_to_sampling++; - return; - } + if (!sampled_in) { + RecordDroppedEntry(entry->event_hash, DroppedDataReason::SAMPLED_OUT); + event_aggregate.dropped_due_to_sampling++; + for (auto& metric : entry->metrics) + event_aggregate.metrics[metric.first].dropped_due_to_sampling++; + return; } if (recordings_.entries.size() >= max_entries_) { @@ -869,13 +859,8 @@ bool UkmRecorderImpl::IsSampledIn(int64_t source_id, return sampled_num % sampling_rate == 0; } -void UkmRecorderImpl::StoreWhitelistedEntries() { +void UkmRecorderImpl::InitDecodeMap() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - const auto entries = - base::SplitString(GetWhitelistEntries(), ",", base::TRIM_WHITESPACE, - base::SPLIT_WANT_NONEMPTY); - for (const auto& entry_string : entries) - whitelisted_entry_hashes_.insert(base::HashMetricName(entry_string)); decode_map_ = builders::CreateDecodeMap(); } diff --git a/chromium/components/ukm/ukm_recorder_impl.h b/chromium/components/ukm/ukm_recorder_impl.h index b4509fd2065..1772d41a2fe 100644 --- a/chromium/components/ukm/ukm_recorder_impl.h +++ b/chromium/components/ukm/ukm_recorder_impl.h @@ -62,11 +62,11 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { void EnableRecording(bool extensions); void DisableRecording(); - // Disables sampling for testing purposes. - void DisableSamplingForTesting() override; + // Controls sampling for testing purposes. Sampling is 1-in-N (N==rate). + void SetSamplingForTesting(int rate) override; - // True if sampling is enabled. - bool IsSamplingEnabled() const; + // True if sampling has been configured. + bool IsSamplingConfigured() const; // Deletes all stored recordings. void Purge(); @@ -113,8 +113,7 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { // Like above but uses a passed |sampling_rate| instead of internal config. bool IsSampledIn(int64_t source_id, uint64_t event_id, int sampling_rate); - // Cache the list of whitelisted entries from the field trial parameter. - void StoreWhitelistedEntries(); + void InitDecodeMap(); // Writes recordings into a report proto, and clears recordings. void StoreRecordingsInReport(Report* report); @@ -149,8 +148,6 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { virtual bool ShouldRestrictToWhitelistedSourceIds() const; - virtual bool ShouldRestrictToWhitelistedEntries() const; - private: friend ::metrics::UkmBrowserTestBase; friend ::ukm::debug::UkmDebugDataExtractor; @@ -168,8 +165,8 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { double value_square_sum = 0.0; uint64_t dropped_due_to_limits = 0; uint64_t dropped_due_to_sampling = 0; - uint64_t dropped_due_to_whitelist = 0; uint64_t dropped_due_to_filter = 0; + uint64_t dropped_due_to_unconfigured = 0; }; struct EventAggregate { @@ -180,8 +177,8 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { uint64_t total_count = 0; uint64_t dropped_due_to_limits = 0; uint64_t dropped_due_to_sampling = 0; - uint64_t dropped_due_to_whitelist = 0; uint64_t dropped_due_to_filter = 0; + uint64_t dropped_due_to_unconfigured = 0; }; using MetricAggregateMap = std::map<uint64_t, MetricAggregate>; @@ -211,8 +208,8 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { // Indicates whether recording continuity has been broken since last report. bool recording_is_continuous_ = true; - // Indicates if sampling has been enabled. - bool sampling_enabled_ = true; + // Indicates if sampling has been forced for testing. + bool sampling_forced_for_testing_ = false; // A pseudo-random number used as the base for sampling choices. This // allows consistent "is sampled in" results for a given source and event @@ -228,9 +225,6 @@ class COMPONENT_EXPORT(UKM_RECORDER) UkmRecorderImpl : public UkmRecorder { // Map from hashes to entry and metric names. ukm::builders::DecodeMap decode_map_; - // Whitelisted Entry hashes, only the ones in this set will be recorded. - std::set<uint64_t> whitelisted_entry_hashes_; - // Sampling configurations, loaded from a field-trial. int default_sampling_rate_ = -1; // -1 == not yet loaded base::flat_map<uint64_t, int> event_sampling_rates_; diff --git a/chromium/components/ukm/ukm_reporting_service.h b/chromium/components/ukm/ukm_reporting_service.h index 025ad7aad28..711a1dad692 100644 --- a/chromium/components/ukm/ukm_reporting_service.h +++ b/chromium/components/ukm/ukm_reporting_service.h @@ -11,7 +11,6 @@ #include <string> -#include "base/macros.h" #include "components/metrics/reporting_service.h" #include "components/metrics/unsent_log_store.h" #include "third_party/metrics_proto/ukm/report.pb.h" diff --git a/chromium/components/ukm/ukm_service.cc b/chromium/components/ukm/ukm_service.cc index 386d38ff1d4..e1f7360edd3 100644 --- a/chromium/components/ukm/ukm_service.cc +++ b/chromium/components/ukm/ukm_service.cc @@ -197,9 +197,6 @@ UkmService::UkmService(PrefService* pref_service, std::unique_ptr<metrics::UkmDemographicMetricsProvider> demographics_provider) : pref_service_(pref_service), - // We only need to restrict to whitelisted Entries if metrics reporting is - // not forced. - restrict_to_whitelist_entries_(!client->IsMetricsReportingForceEnabled()), client_(client), demographics_provider_(std::move(demographics_provider)), reporting_service_(client, pref_service) { @@ -219,7 +216,7 @@ UkmService::UkmService(PrefService* pref_service, bool fast_startup_for_testing = client_->ShouldStartUpFastForTesting(); scheduler_ = std::make_unique<UkmRotationScheduler>( rotate_callback, fast_startup_for_testing, get_upload_interval_callback); - StoreWhitelistedEntries(); + InitDecodeMap(); DelegatingUkmRecorder::Get()->AddDelegate(self_ptr_factory_.GetWeakPtr()); } @@ -434,6 +431,10 @@ void UkmService::BuildAndStoreLog() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DVLOG(1) << "UkmService::BuildAndStoreLog"; + // This may add new UKMs. This means this needs to be done before the empty + // log suppression checks. + metrics_providers_.ProvideCurrentSessionUKMData(); + // Suppress generating a log if we have no new data to include. bool empty = sources().empty() && entries().empty(); UMA_HISTOGRAM_BOOLEAN("UKM.BuildAndStoreLogIsEmpty", empty); @@ -467,10 +468,6 @@ void UkmService::BuildAndStoreLog() { reporting_service_.ukm_log_store()->StoreLog(serialized_log, log_metadata); } -bool UkmService::ShouldRestrictToWhitelistedEntries() const { - return restrict_to_whitelist_entries_; -} - void UkmService::SetInitializationCompleteCallbackForTesting( base::OnceClosure callback) { if (initialize_complete_) { diff --git a/chromium/components/ukm/ukm_service.h b/chromium/components/ukm/ukm_service.h index e39353a972a..0b6c1904ff8 100644 --- a/chromium/components/ukm/ukm_service.h +++ b/chromium/components/ukm/ukm_service.h @@ -10,7 +10,7 @@ #include "base/feature_list.h" #include "base/gtest_prod_util.h" -#include "base/macros.h" +#include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "build/build_config.h" @@ -115,10 +115,6 @@ class UkmService : public UkmRecorderImpl { int32_t report_count() const { return report_count_; } - void set_restrict_to_whitelist_entries_for_testing(bool value) { - restrict_to_whitelist_entries_ = value; - } - // Enables adding the synced user's noised birth year and gender to the UKM // report. For more details, see doc of metrics::DemographicMetricsProvider in // components/metrics/demographics/demographic_metrics_provider.h. @@ -163,9 +159,6 @@ class UkmService : public UkmRecorderImpl { // Called by log_uploader_ when the an upload is completed. void OnLogUploadComplete(int response_code); - // ukm::UkmRecorderImpl: - bool ShouldRestrictToWhitelistedEntries() const override; - // Adds the user's birth year and gender to the UKM |report| only if (1) the // provider is registered and (2) the feature is enabled. For more details, // see doc of metrics::DemographicMetricsProvider in @@ -175,10 +168,7 @@ class UkmService : public UkmRecorderImpl { void SetInitializationCompleteCallbackForTesting(base::OnceClosure callback); // A weak pointer to the PrefService used to read and write preferences. - PrefService* pref_service_; - - // If true, only whitelisted Entries should be recorded. - bool restrict_to_whitelist_entries_; + raw_ptr<PrefService> pref_service_; // The UKM client id stored in prefs. uint64_t client_id_ = 0; @@ -191,7 +181,7 @@ class UkmService : public UkmRecorderImpl { // Used to interact with the embedder. Weak pointer; must outlive |this| // instance. - metrics::MetricsServiceClient* const client_; + const raw_ptr<metrics::MetricsServiceClient> client_; // Registered metrics providers. metrics::DelegatingProvider metrics_providers_; diff --git a/chromium/components/ukm/ukm_service_unittest.cc b/chromium/components/ukm/ukm_service_unittest.cc index 76fffed8e75..555f6aaa870 100644 --- a/chromium/components/ukm/ukm_service_unittest.cc +++ b/chromium/components/ukm/ukm_service_unittest.cc @@ -15,6 +15,7 @@ #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" #include "base/hash/hash.h" +#include "base/memory/raw_ptr.h" #include "base/metrics/metrics_hashes.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" @@ -57,10 +58,7 @@ using TestEvent2 = builders::Memory_Experimental; const char* kTestEvent2Metric1 = TestEvent2::kArrayBufferName; const char* kTestEvent2Metric2 = TestEvent2::kBlinkGCName; using TestEvent3 = builders::Previews; - -std::string Entry1And2Whitelist() { - return std::string(TestEvent1::kEntryName) + ',' + TestEvent2::kEntryName; -} +using TestProviderEvent = builders::ScreenBrightness; SourceId ConvertSourceIdToWhitelistedType(SourceId id, SourceIdType type) { return ukm::SourceIdObj::FromOtherId(id, type).ToInt64(); @@ -70,7 +68,7 @@ SourceId ConvertSourceIdToWhitelistedType(SourceId id, SourceIdType type) { class TestRecordingHelper { public: explicit TestRecordingHelper(UkmRecorder* recorder) : recorder_(recorder) { - recorder_->DisableSamplingForTesting(); + recorder_->SetSamplingForTesting(1); } TestRecordingHelper(const TestRecordingHelper&) = delete; @@ -90,7 +88,7 @@ class TestRecordingHelper { } private: - UkmRecorder* recorder_; + raw_ptr<UkmRecorder> recorder_; }; namespace { @@ -125,6 +123,24 @@ class MockDemographicMetricsProvider void(Report* report)); }; +// A simple Provider that emits a 'TestProviderEvent' on session close (i.e. a +// Report being emitted). +class UkmTestMetricsProvider : public metrics::TestMetricsProvider { + public: + explicit UkmTestMetricsProvider(UkmRecorder* test_recording_helper) + : test_recording_helper_(test_recording_helper) {} + + void ProvideCurrentSessionUKMData() override { + // An Event emitted during a Provider will frequently not not associated + // with a URL. + SourceId id = ukm::NoURLSourceId(); + TestProviderEvent(id).Record(test_recording_helper_); + } + + private: + raw_ptr<UkmRecorder> test_recording_helper_; +}; + class UkmServiceTest : public testing::Test { public: UkmServiceTest() @@ -225,8 +241,6 @@ TEST_F(UkmServiceTest, EnableDisableSchedule) { } TEST_F(UkmServiceTest, PersistAndPurge) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); TestRecordingHelper recorder(&service); @@ -451,8 +465,6 @@ TEST_F(UkmServiceTest, SourceSerialization) { } TEST_F(UkmServiceTest, AddEntryWithEmptyMetrics) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); TestRecordingHelper recorder(&service); @@ -473,13 +485,14 @@ TEST_F(UkmServiceTest, AddEntryWithEmptyMetrics) { } TEST_F(UkmServiceTest, MetricsProviderTest) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); + ScopedUkmFeatureParams params( + {{"WhitelistEntries", std::string(TestProviderEvent::kEntryName)}}); UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); TestRecordingHelper recorder(&service); - metrics::TestMetricsProvider* provider = new metrics::TestMetricsProvider(); + auto* provider = new UkmTestMetricsProvider(&service); service.RegisterMetricsProvider( std::unique_ptr<metrics::MetricsProvider>(provider)); @@ -492,18 +505,20 @@ TEST_F(UkmServiceTest, MetricsProviderTest) { service.EnableRecording(/*extensions=*/false); service.EnableReporting(); - SourceId id = GetWhitelistedSourceId(0); - recorder.UpdateSourceURL(id, GURL("https://google.com/foobar")); - TestEvent1(id).Record(&service); service.Flush(); EXPECT_EQ(GetPersistedLogCount(), 1); Report proto_report = GetPersistedReport(); - EXPECT_EQ(1, proto_report.sources_size()); - EXPECT_EQ(1, proto_report.entries_size()); + // We should have an Event from a Provider provided metric, however, it is not + // attached to a Source (which should be typical for a Provider metric). + EXPECT_EQ(proto_report.sources_size(), 0); - // Providers have now supplied system profile information. + // Providers have now supplied system profile. EXPECT_TRUE(provider->provide_system_profile_metrics_called()); + // Providers has also supplied a UKM Event. + const Entry& entry = proto_report.entries(0); + EXPECT_EQ(base::HashMetricName(TestProviderEvent::kEntryName), + entry.event_hash()); } // Currently just testing brand is set, would be good to test other core @@ -531,8 +546,6 @@ TEST_F(UkmServiceTest, SystemProfileTest) { } TEST_F(UkmServiceTest, AddUserDemograhicsWhenAvailableAndFeatureEnabled) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - int number_of_invocations = 0; int test_birth_year = 1983; metrics::UserDemographicsProto::Gender test_gender = @@ -584,8 +597,6 @@ TEST_F(UkmServiceTest, AddUserDemograhicsWhenAvailableAndFeatureEnabled) { TEST_F(UkmServiceTest, DontAddUserDemograhicsWhenNotAvailableAndFeatureEnabled) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - auto provider = std::make_unique<MockDemographicMetricsProvider>(); EXPECT_CALL(*provider, ProvideSyncedUserNoisedBirthYearAndGenderToReport(testing::_)) @@ -613,7 +624,6 @@ TEST_F(UkmServiceTest, } TEST_F(UkmServiceTest, DontAddUserDemograhicsWhenFeatureDisabled) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); base::test::ScopedFeatureList local_feature; local_feature.InitAndDisableFeature( UkmService::kReportUserNoisedUserBirthYearAndGender); @@ -687,9 +697,6 @@ TEST_F(UkmServiceTest, LogsRotation) { } TEST_F(UkmServiceTest, LogsUploadedOnlyWhenHavingSourcesOrEntries) { - // Testing two whitelisted Entries. - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); TestRecordingHelper recorder(&service); @@ -774,8 +781,7 @@ TEST_F(UkmServiceTest, RestrictToWhitelistedSourceIds) { for (bool restrict_to_whitelisted_source_ids : {true, false}) { ScopedUkmFeatureParams params( {{"RestrictToWhitelistedSourceIds", - restrict_to_whitelisted_source_ids ? "true" : "false"}, - {"WhitelistEntries", Entry1And2Whitelist()}}); + restrict_to_whitelisted_source_ids ? "true" : "false"}}); ClearPrefs(); UkmService service(&prefs_, &client_, @@ -842,9 +848,6 @@ TEST_F(UkmServiceTest, RecordSessionId) { } TEST_F(UkmServiceTest, SourceSize) { - // Set a threshold of number of Sources via Feature Params. - ScopedUkmFeatureParams params({{"MaxSources", "2"}}); - ClearPrefs(); UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); @@ -855,20 +858,18 @@ TEST_F(UkmServiceTest, SourceSize) { service.EnableRecording(/*extensions=*/false); service.EnableReporting(); - auto id = GetWhitelistedSourceId(0); - recorder.UpdateSourceURL(id, GURL("https://google.com/foobar1")); - id = GetWhitelistedSourceId(1); - recorder.UpdateSourceURL(id, GURL("https://google.com/foobar2")); - id = GetWhitelistedSourceId(2); - recorder.UpdateSourceURL(id, GURL("https://google.com/foobar3")); + // Add a large number of sources, more than the hardcoded max. + for (int i = 0; i < 1000; ++i) { + auto id = GetWhitelistedSourceId(i); + recorder.UpdateSourceURL(id, GURL("https://google.com/foobar")); + } service.Flush(); EXPECT_EQ(1, GetPersistedLogCount()); auto proto_report = GetPersistedReport(); - // Note, 2 instead of 3 sources, since we overrode the max number of sources - // via Feature params. - EXPECT_EQ(2, proto_report.sources_size()); + // Note, 500 instead of 1000 sources, since 500 is the maximum. + EXPECT_EQ(500, proto_report.sources_size()); } TEST_F(UkmServiceTest, PurgeMidUpload) { @@ -894,47 +895,6 @@ TEST_F(UkmServiceTest, PurgeMidUpload) { EXPECT_FALSE(client_.uploader()->is_uploading()); } -TEST_F(UkmServiceTest, WhitelistEntryTest) { - // Testing two whitelisted Entries. - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - - ClearPrefs(); - UkmService service(&prefs_, &client_, - std::make_unique<MockDemographicMetricsProvider>()); - TestRecordingHelper recorder(&service); - EXPECT_EQ(0, GetPersistedLogCount()); - service.Initialize(); - task_runner_->RunUntilIdle(); - service.EnableRecording(/*extensions=*/false); - service.EnableReporting(); - - auto id = GetWhitelistedSourceId(0); - recorder.UpdateSourceURL(id, GURL("https://google.com/foobar1")); - - TestEvent1(id).Record(&service); - TestEvent2(id).Record(&service); - // Note that this third entry is not in the whitelist. - TestEvent3(id).Record(&service); - - service.Flush(); - EXPECT_EQ(1, GetPersistedLogCount()); - Report proto_report = GetPersistedReport(); - - // Verify we've added one source and 2 entries. - EXPECT_EQ(1, proto_report.sources_size()); - ASSERT_EQ(2, proto_report.entries_size()); - - const Entry& proto_entry_a = proto_report.entries(0); - EXPECT_EQ(id, proto_entry_a.source_id()); - EXPECT_EQ(base::HashMetricName(TestEvent1::kEntryName), - proto_entry_a.event_hash()); - - const Entry& proto_entry_b = proto_report.entries(1); - EXPECT_EQ(id, proto_entry_b.source_id()); - EXPECT_EQ(base::HashMetricName(TestEvent2::kEntryName), - proto_entry_b.event_hash()); -} - TEST_F(UkmServiceTest, SourceURLLength) { UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); @@ -961,14 +921,15 @@ TEST_F(UkmServiceTest, SourceURLLength) { EXPECT_EQ("URLTooLong", proto_source.urls(0).url()); } +// TODO(rkaplow): Revamp these tests once whitelisted entries are removed. +// Currently this test is overly complicated, but can be simplified when the +// restrict_to_whitelisted_source_ids is removed. TEST_F(UkmServiceTest, UnreferencedNonWhitelistedSources) { const GURL kURL("https://google.com/foobar"); for (bool restrict_to_whitelisted_source_ids : {true, false}) { // Set a threshold of number of Sources via Feature Params. ScopedUkmFeatureParams params( - {{"MaxKeptSources", "3"}, - {"WhitelistEntries", Entry1And2Whitelist()}, - {"RestrictToWhitelistedSourceIds", + {{"RestrictToWhitelistedSourceIds", restrict_to_whitelisted_source_ids ? "true" : "false"}}); ClearPrefs(); @@ -988,7 +949,7 @@ TEST_F(UkmServiceTest, UnreferencedNonWhitelistedSources) { std::vector<SourceId> ids; base::TimeTicks last_time = base::TimeTicks::Now(); - for (int i = 0; i < 6; ++i) { + for (int i = 1; i < 7; ++i) { // Wait until base::TimeTicks::Now() no longer equals |last_time|. This // ensures each source has a unique timestamp to avoid flakes. Should take // between 1-15ms per documented resolution of base::TimeTicks. @@ -1001,7 +962,6 @@ TEST_F(UkmServiceTest, UnreferencedNonWhitelistedSources) { last_time = base::TimeTicks::Now(); } - // Add whitelisted entries for 0, 2 and non-whitelisted entries for 2, 3. TestEvent1(ids[0]).Record(&service); TestEvent2(ids[2]).Record(&service); TestEvent3(ids[2]).Record(&service); @@ -1031,13 +991,11 @@ TEST_F(UkmServiceTest, UnreferencedNonWhitelistedSources) { // The one whitelisted source is of navigation type. EXPECT_EQ(1, proto_report.source_counts().navigation_sources()); EXPECT_EQ(0, proto_report.source_counts().unmatched_sources()); - // Source 0 of navigation type, and entryless sources 1, 3, 4, 5 of - // non-whitelisted type are eligible to be deferred, but MaxKeptSources - // restricts deferral to the 3 latest created ones. - EXPECT_EQ(3, proto_report.source_counts().deferred_sources()); + + EXPECT_EQ(4, proto_report.source_counts().deferred_sources()); EXPECT_EQ(0, proto_report.source_counts().carryover_sources()); - ASSERT_EQ(3, proto_report.sources_size()); + ASSERT_EQ(4, proto_report.sources_size()); EXPECT_EQ(ids[0], proto_report.sources(0).id()); EXPECT_EQ(kURL.spec(), proto_report.sources(0).urls(0).url()); EXPECT_EQ(ids[2], proto_report.sources(1).id()); @@ -1075,17 +1033,11 @@ TEST_F(UkmServiceTest, UnreferencedNonWhitelistedSources) { EXPECT_EQ(0, proto_report.source_counts().observed()); EXPECT_EQ(0, proto_report.source_counts().navigation_sources()); EXPECT_EQ(0, proto_report.source_counts().unmatched_sources()); - // Only the navigation type source is deferred. - EXPECT_EQ(1, proto_report.source_counts().deferred_sources()); - // Number of sources carried over from the previous report to this report. - EXPECT_EQ(3, proto_report.source_counts().carryover_sources()); - // Out of sources 3, 4, 5 that were retained from the previous cycle, - // sources 3 and 4 got new entries are thus included in this report. - ASSERT_EQ(2, proto_report.sources_size()); - EXPECT_EQ(ids[3], proto_report.sources(0).id()); - EXPECT_EQ(kURL.spec(), proto_report.sources(0).urls(0).url()); - EXPECT_EQ(ids[4], proto_report.sources(1).id()); - EXPECT_EQ(kURL.spec(), proto_report.sources(1).urls(0).url()); + + EXPECT_EQ(2, proto_report.source_counts().deferred_sources()); + + EXPECT_EQ(4, proto_report.source_counts().carryover_sources()); + ASSERT_EQ(3, proto_report.sources_size()); } } } @@ -1104,8 +1056,6 @@ TEST_F(UkmServiceTest, NonWhitelistedUrls) { {GURL("https://other.com"), false}, }; - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - for (const auto& test : test_cases) { ClearPrefs(); UkmService service(&prefs_, &client_, @@ -1180,8 +1130,6 @@ TEST_F(UkmServiceTest, NonWhitelistedUrls) { } TEST_F(UkmServiceTest, WhitelistIdType) { - ScopedUkmFeatureParams params({{"WhitelistEntries", Entry1And2Whitelist()}}); - std::map<SourceIdType, bool> source_id_type_whitelisted = { {SourceIdType::DEFAULT, false}, {SourceIdType::NAVIGATION_ID, true}, {SourceIdType::APP_ID, true}, {SourceIdType::HISTORY_ID, true}, @@ -1237,13 +1185,13 @@ TEST_F(UkmServiceTest, SupportedSchemes) { } test_cases[] = { {"http://google.ca/", true}, {"https://google.ca/", true}, - {"ftp://google.ca/", true}, {"about:blank", true}, {"chrome://version/", true}, {"app://play/abcdefghijklmnopqrstuvwxyzabcdef/", true}, // chrome-extension are controlled by TestIsWebstoreExtension, above. {"chrome-extension://bhcnanendmgjjeghamaccjnochlnhcgj/", true}, {"chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/", false}, + {"ftp://google.ca/", false}, {"file:///tmp/", false}, {"abc://google.ca/", false}, {"www.google.ca/", false}, @@ -1296,12 +1244,12 @@ TEST_F(UkmServiceTest, SupportedSchemesNoExtensions) { } test_cases[] = { {"http://google.ca/", true}, {"https://google.ca/", true}, - {"ftp://google.ca/", true}, {"about:blank", true}, {"chrome://version/", true}, {"app://play/abcdefghijklmnopqrstuvwxyzabcdef/", true}, {"chrome-extension://bhcnanendmgjjeghamaccjnochlnhcgj/", false}, {"chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/", false}, + {"ftp://google.ca/", false}, {"file:///tmp/", false}, {"abc://google.ca/", false}, {"www.google.ca/", false}, @@ -1377,7 +1325,6 @@ TEST_F(UkmServiceTest, SanitizeChromeUrlParams) { {"chrome://histograms/Variations", "chrome://histograms/Variations"}, {"http://google.ca/?foo=bar", "http://google.ca/?foo=bar"}, {"https://google.ca/?foo=bar", "https://google.ca/?foo=bar"}, - {"ftp://google.ca/?foo=bar", "ftp://google.ca/?foo=bar"}, {"chrome-extension://bhcnanendmgjjeghamaccjnochlnhcgj/foo.html?a=b", "chrome-extension://bhcnanendmgjjeghamaccjnochlnhcgj/"}, }; @@ -1515,7 +1462,6 @@ TEST_F(UkmServiceTest, PurgeNonCarriedOverSources) { TEST_F(UkmServiceTest, IdentifiabilityMetricsDontExplode) { UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); - service.set_restrict_to_whitelist_entries_for_testing(false); TestRecordingHelper recorder(&service); ASSERT_EQ(0, GetPersistedLogCount()); service.Initialize(); @@ -1551,7 +1497,6 @@ TEST_F(UkmServiceTest, FilterCanRemoveMetrics) { UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); - service.set_restrict_to_whitelist_entries_for_testing(false); service.RegisterEventFilter(std::make_unique<TestEntryFilter>()); TestRecordingHelper recorder(&service); ASSERT_EQ(0, GetPersistedLogCount()); @@ -1609,7 +1554,6 @@ TEST_F(UkmServiceTest, FilterRejectsEvent) { UkmService service(&prefs_, &client_, std::make_unique<MockDemographicMetricsProvider>()); - service.set_restrict_to_whitelist_entries_for_testing(false); service.RegisterEventFilter(std::make_unique<TestEntryFilter>()); TestRecordingHelper recorder(&service); ASSERT_EQ(0, GetPersistedLogCount()); diff --git a/chromium/components/ukm/ukm_test_helper.h b/chromium/components/ukm/ukm_test_helper.h index 4ad67bca1d1..7b082984bfc 100644 --- a/chromium/components/ukm/ukm_test_helper.h +++ b/chromium/components/ukm/ukm_test_helper.h @@ -7,7 +7,7 @@ #include <memory> -#include "base/macros.h" +#include "base/memory/raw_ptr.h" #include "components/ukm/ukm_service.h" #include "services/metrics/public/cpp/ukm_source.h" #include "services/metrics/public/cpp/ukm_source_id.h" @@ -59,7 +59,7 @@ class UkmTestHelper { bool HasUnsentLogs(); private: - UkmService* const ukm_service_; + const raw_ptr<UkmService> ukm_service_; }; } // namespace ukm diff --git a/chromium/components/ukm/unsent_log_store_metrics_impl.h b/chromium/components/ukm/unsent_log_store_metrics_impl.h index e1dd5378798..5c8e6f03f31 100644 --- a/chromium/components/ukm/unsent_log_store_metrics_impl.h +++ b/chromium/components/ukm/unsent_log_store_metrics_impl.h @@ -5,7 +5,6 @@ #ifndef COMPONENTS_UKM_UNSENT_LOG_STORE_METRICS_IMPL_H_ #define COMPONENTS_UKM_UNSENT_LOG_STORE_METRICS_IMPL_H_ -#include "base/macros.h" #include "components/metrics/unsent_log_store_metrics.h" namespace ukm { |