Commit 5bd2ea8d authored by Justin Miron's avatar Justin Miron Committed by Commit Bot

Add use counters for third party cookie read and writes.

This adds use counters in both UKM and UMA for 3p cookie reads and
writes. The third party metrics observer records the use counters
with the other third party storage access types.

These two metrics will be used to understand how third party
cookie usage is on sites compared to other third party storage
mechanisms and give a more complete picture of how third party
storage is used across sites.

Bug=1059915

Change-Id: I2c1b645c7db7dcc6a1e44f6eab1d33110c2c5506
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2342578
Commit-Queue: Justin Miron <justinmiron@google.com>
Reviewed-by: default avatarBrian White <bcwhite@chromium.org>
Reviewed-by: default avatarJohn Delaney <johnidel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798658}
parent 0a610db7
...@@ -113,11 +113,19 @@ void ThirdPartyMetricsObserver::OnCookieChange( ...@@ -113,11 +113,19 @@ void ThirdPartyMetricsObserver::OnCookieChange(
AccessType::kCookieWrite); AccessType::kCookieWrite);
} }
void ThirdPartyMetricsObserver::RecordStorageUseCounter( void ThirdPartyMetricsObserver::RecordStorageAccessUseCounter(
AccessType access_type) { AccessType access_type) {
page_load_metrics::mojom::PageLoadFeatures third_party_storage_features; page_load_metrics::mojom::PageLoadFeatures third_party_storage_features;
switch (access_type) { switch (access_type) {
case AccessType::kCookieRead:
third_party_storage_features.features.push_back(
blink::mojom::WebFeature::kThirdPartyCookieRead);
break;
case AccessType::kCookieWrite:
third_party_storage_features.features.push_back(
blink::mojom::WebFeature::kThirdPartyCookieWrite);
break;
case AccessType::kLocalStorage: case AccessType::kLocalStorage:
third_party_storage_features.features.push_back( third_party_storage_features.features.push_back(
blink::mojom::WebFeature::kThirdPartyLocalStorage); blink::mojom::WebFeature::kThirdPartyLocalStorage);
...@@ -249,7 +257,7 @@ void ThirdPartyMetricsObserver::OnCookieOrStorageAccess( ...@@ -249,7 +257,7 @@ void ThirdPartyMetricsObserver::OnCookieOrStorageAccess(
} }
} }
RecordStorageUseCounter(access_type); RecordStorageAccessUseCounter(access_type);
GURL representative_url( GURL representative_url(
base::StrCat({url.scheme(), "://", registrable_domain, "/"})); base::StrCat({url.scheme(), "://", registrable_domain, "/"}));
......
...@@ -74,7 +74,7 @@ class ThirdPartyMetricsObserver ...@@ -74,7 +74,7 @@ class ThirdPartyMetricsObserver
const page_load_metrics::mojom::PageLoadTiming& main_frame_timing); const page_load_metrics::mojom::PageLoadTiming& main_frame_timing);
// Records feature usage for |access_type| with use counters. // Records feature usage for |access_type| with use counters.
void RecordStorageUseCounter(AccessType accesse_type); void RecordStorageAccessUseCounter(AccessType access_type);
AccessType StorageTypeToAccessType( AccessType StorageTypeToAccessType(
page_load_metrics::StorageType storage_type); page_load_metrics::StorageType storage_type);
......
...@@ -221,6 +221,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, NoStorageEvent) { ...@@ -221,6 +221,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, NoStorageEvent) {
histogram_tester.ExpectBucketCount( histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features", "Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCacheStorage, 0); blink::mojom::WebFeature::kThirdPartyCacheStorage, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 0);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -232,6 +238,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -232,6 +238,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 0);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -246,6 +258,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -246,6 +258,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 1);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -265,6 +283,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -265,6 +283,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 1);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -283,6 +307,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -283,6 +307,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 2, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 2, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 2, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 2, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 1);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -302,6 +332,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -302,6 +332,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 0);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -322,6 +358,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -322,6 +358,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 1, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 1);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -339,6 +381,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -339,6 +381,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
// No read is counted since no cookie has previously been set. // No read is counted since no cookie has previously been set.
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 0, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 0);
} }
IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
...@@ -356,6 +404,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest, ...@@ -356,6 +404,12 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyMetricsObserverBrowserTest,
histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kReadCookieHistogram, 0, 1);
histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1); histogram_tester.ExpectUniqueSample(kWriteCookieHistogram, 1, 1);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieRead, 0);
histogram_tester.ExpectBucketCount(
"Blink.UseCounter.Features",
blink::mojom::WebFeature::kThirdPartyCookieWrite, 1);
} }
class ThirdPartyDomStorageAccessMetricsObserverBrowserTest class ThirdPartyDomStorageAccessMetricsObserverBrowserTest
......
...@@ -173,6 +173,8 @@ UseCounterPageLoadMetricsObserver::GetAllowedUkmFeatures() { ...@@ -173,6 +173,8 @@ UseCounterPageLoadMetricsObserver::GetAllowedUkmFeatures() {
WebFeature::kPerformanceObserverEntryTypesAndBuffered, WebFeature::kPerformanceObserverEntryTypesAndBuffered,
WebFeature::kStorageAccessAPI_HasStorageAccess_Method, WebFeature::kStorageAccessAPI_HasStorageAccess_Method,
WebFeature::kStorageAccessAPI_requestStorageAccess_Method, WebFeature::kStorageAccessAPI_requestStorageAccess_Method,
WebFeature::kThirdPartyCookieRead,
WebFeature::kThirdPartyCookieWrite,
})); }));
return *opt_in_features; return *opt_in_features;
} }
...@@ -2735,6 +2735,8 @@ enum WebFeature { ...@@ -2735,6 +2735,8 @@ enum WebFeature {
kGPUAdapter_Name = 3405, kGPUAdapter_Name = 3405,
kWindowScreenInternal = 3406, kWindowScreenInternal = 3406,
kWindowScreenPrimary = 3407, kWindowScreenPrimary = 3407,
kThirdPartyCookieRead = 3408,
kThirdPartyCookieWrite = 3409,
// Add new features immediately above this line. Don't change assigned // Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. // numbers of any item, and don't reuse removed slots.
......
...@@ -28755,6 +28755,8 @@ Called by update_use_counter_feature_enum.py.--> ...@@ -28755,6 +28755,8 @@ Called by update_use_counter_feature_enum.py.-->
<int value="3405" label="GPUAdapter_Name"/> <int value="3405" label="GPUAdapter_Name"/>
<int value="3406" label="WindowScreenInternal"/> <int value="3406" label="WindowScreenInternal"/>
<int value="3407" label="WindowScreenPrimary"/> <int value="3407" label="WindowScreenPrimary"/>
<int value="3408" label="ThirdPartyCookieRead"/>
<int value="3409" label="ThirdPartyCookieWrite"/>
</enum> </enum>
<enum name="FeaturePolicyAllowlistType"> <enum name="FeaturePolicyAllowlistType">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment