Commit 6afdb0f6 authored by Luna Lu's avatar Luna Lu Committed by Commit Bot

Opt in features to UKM UseCounter

1. Vibrate features:
Nav / safe browing team  would like to collect URLs where vibrate is used when:
 a. from the top frame or iframe (ads);
 b. vibrate with user gestures.
2. Touch events:
 understanding reasons where scrolling is prevented without using touch-action.

Features listed above all have shown <1% of page views from chromestatus.com and satisfy UKM privacy constraints.

Bug: 706389, 123004
Change-Id: I3d2d48e1e7703d2cc4c05c35b7d4ba6d613d1ca7
Reviewed-on: https://chromium-review.googlesource.com/801754
Commit-Queue: Luna Lu <loonybear@chromium.org>
Reviewed-by: default avatarBryan McQuade <bmcquade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#522094}
parent 449cae27
......@@ -5,11 +5,19 @@
#include "chrome/browser/page_load_metrics/observers/use_counter/ukm_features.h"
#include "base/containers/flat_set.h"
using WebFeature = blink::mojom::WebFeature;
// UKM-based UseCounter features (WebFeature) should be defined in
// opt_in_features list. Currently there have been no features opt-in for
// UKM-based UseCounter, which is why the list is empty.
bool IsAllowedUkmFeature(blink::mojom::WebFeature feature) {
CR_DEFINE_STATIC_LOCAL(const base::flat_set<blink::mojom::WebFeature>,
opt_in_features, {});
CR_DEFINE_STATIC_LOCAL(
const base::flat_set<WebFeature>, opt_in_features,
({
WebFeature::kNavigatorVibrate, WebFeature::kNavigatorVibrateSubFrame,
WebFeature::kVibrateWithoutUserGesture,
WebFeature::kTouchEventPreventedNoTouchAction,
WebFeature::kTouchEventPreventedForcedDocumentPassiveNoTouchAction,
}));
return opt_in_features.count(feature);
}
......@@ -15,6 +15,8 @@ namespace internal {
const char kFeaturesHistogramName[] =
"Blink.UseCounter.Features_TestBrowserProcessLogging";
const char kUkmUseCounterEventName[] = "Blink.UseCounter";
const char kUkmUseCounterFeature[] = "Feature";
} // namespace internal
......
......@@ -92,3 +92,27 @@ TEST_F(UseCounterPageLoadMetricsObserverTest, CountDuplicatedFeatures) {
page_load_features_1.features = features_1;
HistogramBasicTest(page_load_features_0, page_load_features_1);
}
TEST_F(UseCounterPageLoadMetricsObserverTest, RecordUkmUsage) {
std::vector<WebFeature> features_0(
{WebFeature::kFetch, WebFeature::kNavigatorVibrate});
std::vector<WebFeature> features_1(
{WebFeature::kTouchEventPreventedNoTouchAction});
page_load_metrics::mojom::PageLoadFeatures page_load_features_0;
page_load_metrics::mojom::PageLoadFeatures page_load_features_1;
page_load_features_0.features = features_0;
page_load_features_1.features = features_1;
HistogramBasicTest(page_load_features_0, page_load_features_1);
std::vector<const ukm::mojom::UkmEntry*> entries =
test_ukm_recorder().GetEntriesByName(internal::kUkmUseCounterEventName);
EXPECT_EQ(2ul, entries.size());
test_ukm_recorder().ExpectEntrySourceHasUrl(entries[0], GURL(kTestUrl));
test_ukm_recorder().ExpectEntryMetric(
entries[0], internal::kUkmUseCounterFeature,
static_cast<int64_t>(WebFeature::kNavigatorVibrate));
test_ukm_recorder().ExpectEntrySourceHasUrl(entries[1], GURL(kTestUrl));
test_ukm_recorder().ExpectEntryMetric(
entries[1], internal::kUkmUseCounterFeature,
static_cast<int64_t>(WebFeature::kTouchEventPreventedNoTouchAction));
}
......@@ -1187,11 +1187,36 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kNavigatorVibrate), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
}
// Test UseCounter UKM features observed.
IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
UseCounterUkmFeaturesLogged) {
ASSERT_TRUE(embedded_test_server()->Start());
auto waiter = CreatePageLoadMetricsWaiter();
waiter->AddPageExpectation(TimingField::LOAD_EVENT);
GURL url = embedded_test_server()->GetURL(
"/page_load_metrics/use_counter_features.html");
ui_test_utils::NavigateToURL(browser(), url);
waiter->Wait();
NavigateToUntrackedUrl();
const auto& entries =
test_ukm_recorder_->GetEntriesByName(internal::kUkmUseCounterEventName);
EXPECT_EQ(1u, entries.size());
test_ukm_recorder_->ExpectEntrySourceHasUrl(entries[0], url);
test_ukm_recorder_->ExpectEntryMetric(
entries[0], internal::kUkmUseCounterFeature,
static_cast<int64_t>(WebFeature::kNavigatorVibrate));
}
// Test UseCounter Features observed in a child frame are recorded, exactly
// once per feature.
IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, UseCounterFeaturesInIframe) {
......@@ -1211,6 +1236,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, UseCounterFeaturesInIframe) {
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kNavigatorVibrate), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
......@@ -1237,6 +1265,9 @@ IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kV8Element_Animate_Method), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kNavigatorVibrate), 1);
histogram_tester_.ExpectBucketCount(
internal::kFeaturesHistogramName,
static_cast<int32_t>(WebFeature::kPageVisits), 1);
......
......@@ -10,6 +10,7 @@
{ transform: 'translateY(-300px)' }
]);
document.getElementById("para").firstChild.wholeText;
navigator.vibrate(10);
}
</script>
</body>
......
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