0

[cookies] add a UMA for isPersistent bit

Let's track the distribution here.

Bug: 40285083
Change-Id: I2308419c3394d0271ba7a2c28f90af6299f39519
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6353699
Auto-Submit: Ari Chivukula <arichiv@chromium.org>
Reviewed-by: Steven Bingler <bingler@chromium.org>
Commit-Queue: Ari Chivukula <arichiv@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1432442}
This commit is contained in:
Ari Chivukula
2025-03-13 16:25:33 -07:00
committed by Chromium LUCI CQ
parent 27d1314556
commit dd05153cb3
3 changed files with 42 additions and 11 deletions
net/cookies
tools/metrics/histograms/metadata/cookie

@ -443,11 +443,12 @@ CountCookiesAndGenerateListsForPossibleDeletionPartitionedCookies(
return could_be_deleted;
}
// Records minutes until the expiration date of a cookie to the appropriate
// histogram. Only histograms cookies that have an expiration date (i.e. are
// persistent).
void HistogramExpirationDuration(const CanonicalCookie& cookie,
// Records whether the cookie being set is persistent. If so, this also records
// minutes until the expiration date of a cookie to the appropriate histogram.
void RecordPersistanceHistograms(const CanonicalCookie& cookie,
base::Time creation_time) {
base::UmaHistogramBoolean("Cookie.IsPersistentWhenSet.Subsampled",
cookie.IsPersistent());
if (!cookie.IsPersistent())
return;
@ -1798,7 +1799,7 @@ void CookieMonster::SetCanonicalCookie(
// was to delete the cookie which we've already done.
if (!already_expired) {
if (collect_metrics) {
HistogramExpirationDuration(*cc, creation_date);
RecordPersistanceHistograms(*cc, creation_date);
base::UmaHistogramBoolean("Cookie.DomainSet.Subsampled",
cc->IsDomainCookie());
@ -1874,7 +1875,7 @@ void CookieMonster::SetAllCookies(CookieList list,
continue;
if (metrics_subsampler_.ShouldSample(kHistogramSampleProbability)) {
HistogramExpirationDuration(cookie, creation_time);
RecordPersistanceHistograms(cookie, creation_time);
}
CookieAccessResult access_result;

@ -4704,9 +4704,15 @@ TEST_F(CookieMonsterTest, HistogramCheck) {
base::HistogramBase* expired_histogram = base::Histogram::FactoryGet(
"Cookie.ExpirationDurationMinutesSecure.Subsampled2", 1, 400 * 24 * 60,
100, base::Histogram::kUmaTargetedHistogramFlag);
base::HistogramBase* persistance_histogram =
base::BooleanHistogram::FactoryGet(
"Cookie.IsPersistentWhenSet.Subsampled",
base::HistogramBase::kUmaTargetedHistogramFlag);
std::unique_ptr<base::HistogramSamples> samples1(
std::unique_ptr<base::HistogramSamples> expired_samples1(
expired_histogram->SnapshotSamples());
std::unique_ptr<base::HistogramSamples> persistance_samples1(
persistance_histogram->SnapshotSamples());
auto cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
"a", "b", "a.url", "/", base::Time(),
base::Time::Now() + base::Minutes(59), base::Time(), base::Time(),
@ -4717,16 +4723,26 @@ TEST_F(CookieMonsterTest, HistogramCheck) {
ASSERT_TRUE(SetCanonicalCookie(cm.get(), std::move(cookie), source_url,
/*modify_httponly=*/true));
std::unique_ptr<base::HistogramSamples> samples2(
std::unique_ptr<base::HistogramSamples> expired_samples2(
expired_histogram->SnapshotSamples());
EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount());
std::unique_ptr<base::HistogramSamples> persistance_samples2(
persistance_histogram->SnapshotSamples());
EXPECT_EQ(expired_samples1->TotalCount() + 1, expired_samples2->TotalCount());
EXPECT_EQ(persistance_samples1->TotalCount() + 1,
persistance_samples2->TotalCount());
EXPECT_EQ(1, persistance_samples2->sum());
// kValidCookieLine creates a session cookie.
ASSERT_TRUE(SetCookie(cm.get(), http_www_foo_.url(), kValidCookieLine));
std::unique_ptr<base::HistogramSamples> samples3(
std::unique_ptr<base::HistogramSamples> expired_samples3(
expired_histogram->SnapshotSamples());
EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount());
std::unique_ptr<base::HistogramSamples> persistance_samples3(
persistance_histogram->SnapshotSamples());
EXPECT_EQ(expired_samples2->TotalCount(), expired_samples3->TotalCount());
EXPECT_EQ(persistance_samples2->TotalCount() + 1,
persistance_samples3->TotalCount());
EXPECT_EQ(1, persistance_samples3->sum());
}
TEST_F(CookieMonsterTest, InvalidExpiryTime) {

@ -604,6 +604,20 @@ chromium-metrics-reviews@google.com.
</summary>
</histogram>
<histogram name="Cookie.IsPersistentWhenSet.Subsampled" enum="Boolean"
expires_after="2025-10-31">
<owner>arichiv@chromium.org</owner>
<owner>kaustubhag@chromium.org</owner>
<owner>bingler@chromium.org</owner>
<summary>
Whether a cookie set via CookieMonster::SetCanonicalCookie or
CookieMonster::SetAllCookies is persistent (true) or session (false).
Subsampled to 1/1000. See kHistogramSampleProbability in
net/cookies/cookie_constants.h for details.
</summary>
</histogram>
<histogram name="Cookie.LoadProblem" enum="CookieLoadProblem"
expires_after="2025-08-17">
<owner>morlovich@chromium.org</owner>