summaryrefslogtreecommitdiff
path: root/chromium/components/ukm
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-02-04 17:20:24 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-02-12 08:15:25 +0000
commit8fa0776f1f79e91fc9c0b9c1ba11a0a29c05196b (patch)
tree788d8d7549712682703a0310ca4a0f0860d4802b /chromium/components/ukm
parent606d85f2a5386472314d39923da28c70c60dc8e7 (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/components/ukm/app_source_url_recorder.cc5
-rw-r--r--chromium/components/ukm/app_source_url_recorder.h7
-rw-r--r--chromium/components/ukm/app_source_url_recorder_test.cc20
-rw-r--r--chromium/components/ukm/content/source_url_recorder.cc28
-rw-r--r--chromium/components/ukm/content/source_url_recorder_test.cc26
-rw-r--r--chromium/components/ukm/debug/ukm_debug_data_extractor.cc7
-rw-r--r--chromium/components/ukm/debug/ukm_debug_data_extractor.h1
-rw-r--r--chromium/components/ukm/ios/ukm_url_recorder.mm1
-rw-r--r--chromium/components/ukm/test_ukm_recorder.cc10
-rw-r--r--chromium/components/ukm/test_ukm_recorder.h2
-rw-r--r--chromium/components/ukm/ukm_recorder_impl.cc91
-rw-r--r--chromium/components/ukm/ukm_recorder_impl.h24
-rw-r--r--chromium/components/ukm/ukm_reporting_service.h1
-rw-r--r--chromium/components/ukm/ukm_service.cc13
-rw-r--r--chromium/components/ukm/ukm_service.h16
-rw-r--r--chromium/components/ukm/ukm_service_unittest.cc168
-rw-r--r--chromium/components/ukm/ukm_test_helper.h4
-rw-r--r--chromium/components/ukm/unsent_log_store_metrics_impl.h1
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 {