Index: third_party/WebKit/Source/core/frame/UseCounter.cpp |
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.cpp b/third_party/WebKit/Source/core/frame/UseCounter.cpp |
index 9c7697cf8de2c99eb18ac9028cf657d53860953d..a776b7476ecae707a061b2410297131216d3d9c0 100644 |
--- a/third_party/WebKit/Source/core/frame/UseCounter.cpp |
+++ b/third_party/WebKit/Source/core/frame/UseCounter.cpp |
@@ -1101,7 +1101,6 @@ int UseCounter::MapCSSPropertyIdToCSSSampleIdForHistogram( |
UseCounter::UseCounter(Context context) |
: mute_count_(0), |
- disable_reporting_(false), |
context_(context), |
features_recorded_(kNumberOfFeatures), |
css_recorded_(numCSSPropertyIDs), |
@@ -1119,15 +1118,15 @@ void UseCounter::RecordMeasurement(Feature feature) { |
if (mute_count_) |
return; |
- DCHECK(feature != kOBSOLETE_PageDestruction && |
- feature != |
- kPageVisits); // PageDestruction is reserved as a scaling factor. |
- DCHECK(feature < kNumberOfFeatures); |
+ // PageDestruction is reserved as a scaling factor. |
+ DCHECK_NE(kOBSOLETE_PageDestruction, feature); |
+ DCHECK_NE(kPageVisits, feature); |
+ DCHECK_GE(kNumberOfFeatures, feature); |
if (!features_recorded_.QuickGet(feature)) { |
// Note that HTTPArchive tooling looks specifically for this event - see |
// https://github.com/HTTPArchive/httparchive/issues/59 |
- if (!disable_reporting_) { |
+ if (context_ != kDisabledContext) { |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"), |
"FeatureFirstUsed", "feature", feature); |
FeaturesHistogram().Count(feature); |
@@ -1142,10 +1141,10 @@ bool UseCounter::HasRecordedMeasurement(Feature feature) const { |
if (mute_count_) |
return false; |
- DCHECK(feature != kOBSOLETE_PageDestruction && |
- feature != |
- kPageVisits); // PageDestruction is reserved as a scaling factor. |
- DCHECK(feature < kNumberOfFeatures); |
+ // PageDestruction is reserved as a scaling factor. |
+ DCHECK_NE(kOBSOLETE_PageDestruction, feature); |
+ DCHECK_NE(kPageVisits, feature); |
+ DCHECK_GE(kNumberOfFeatures, feature); |
return features_recorded_.QuickGet(feature); |
} |
@@ -1158,23 +1157,27 @@ void UseCounter::DidCommitLoad(KURL url) { |
legacy_counter_.UpdateMeasurements(); |
// Reset state from previous load. |
- disable_reporting_ = false; |
- |
// Use the protocol of the document being loaded into the main frame to |
// decide whether this page is interesting from a metrics perspective. |
// Note that SVGImage cases always have an about:blank URL |
- if (context_ == kDefaultContext && |
- !SchemeRegistry::ShouldTrackUsageMetricsForScheme(url.Protocol())) { |
- disable_reporting_ = true; |
+ if (context_ != kSVGImageContext) { |
+ if (url.ProtocolIs("chrome-extension")) |
+ context_ = kExtensionContext; |
+ else if (SchemeRegistry::ShouldTrackUsageMetricsForScheme(url.Protocol())) |
+ context_ = kDefaultContext; |
+ else |
+ context_ = kDisabledContext; |
} |
features_recorded_.ClearAll(); |
css_recorded_.ClearAll(); |
animated_css_recorded_.ClearAll(); |
- if (!disable_reporting_ && !mute_count_) { |
+ if (context_ != kDisabledContext && !mute_count_) { |
FeaturesHistogram().Count(kPageVisits); |
- CssHistogram().Count(totalPagesMeasuredCSSSampleId()); |
- AnimatedCSSHistogram().Count(totalPagesMeasuredCSSSampleId()); |
+ if (context_ != kExtensionContext) { |
+ CssHistogram().Count(totalPagesMeasuredCSSSampleId()); |
+ AnimatedCSSHistogram().Count(totalPagesMeasuredCSSSampleId()); |
+ } |
} |
} |
@@ -1247,7 +1250,7 @@ void UseCounter::Count(CSSParserMode css_parser_mode, CSSPropertyID property) { |
// Note that HTTPArchive tooling looks specifically for this event - see |
// https://github.com/HTTPArchive/httparchive/issues/59 |
int sample_id = MapCSSPropertyIdToCSSSampleIdForHistogram(property); |
- if (!disable_reporting_) { |
+ if (context_ != kDisabledContext && context_ != kExtensionContext) { |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"), |
"CSSFirstUsed", "feature", sample_id); |
CssHistogram().Count(sample_id); |
@@ -1294,7 +1297,7 @@ void UseCounter::CountAnimatedCSS(CSSPropertyID property) { |
if (!animated_css_recorded_.QuickGet(property)) { |
int sample_id = MapCSSPropertyIdToCSSSampleIdForHistogram(property); |
- if (!disable_reporting_) { |
+ if (context_ != kDisabledContext && context_ != kExtensionContext) { |
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"), |
"AnimatedCSSFirstUsed", "feature", sample_id); |
AnimatedCSSHistogram().Count(sample_id); |
@@ -1305,7 +1308,7 @@ void UseCounter::CountAnimatedCSS(CSSPropertyID property) { |
void UseCounter::NotifyFeatureCounted(Feature feature) { |
DCHECK(!mute_count_); |
- DCHECK(!disable_reporting_); |
+ DCHECK_NE(kDisabledContext, context_); |
HeapHashSet<Member<Observer>> to_be_removed; |
for (auto observer : observers_) { |
if (observer->OnCountFeature(feature)) |
@@ -1315,23 +1318,37 @@ void UseCounter::NotifyFeatureCounted(Feature feature) { |
} |
EnumerationHistogram& UseCounter::FeaturesHistogram() const { |
+ DCHECK_NE(kDisabledContext, context_); |
// Every SVGImage has it's own Page instance, and multiple web pages can |
// share the usage of a single SVGImage. Ideally perhaps we'd delegate |
// metrics from an SVGImage to one of the Page's it's displayed in, but |
// that's tricky (SVGImage is intentionally isolated, and the Page that |
// created it may not even exist anymore). |
// So instead we just use a dedicated histogram for the SVG case. |
- DEFINE_STATIC_LOCAL( |
- blink::EnumerationHistogram, histogram, |
- ("Blink.UseCounter.Features", blink::UseCounter::kNumberOfFeatures)); |
DEFINE_STATIC_LOCAL(blink::EnumerationHistogram, svg_histogram, |
("Blink.UseCounter.SVGImage.Features", |
blink::UseCounter::kNumberOfFeatures)); |
- |
- return context_ == kSVGImageContext ? svg_histogram : histogram; |
+ DEFINE_STATIC_LOCAL(blink::EnumerationHistogram, extension_histogram, |
+ ("Blink.UseCounter.Extensions.Features", |
+ blink::UseCounter::kNumberOfFeatures)); |
+ DEFINE_STATIC_LOCAL( |
+ blink::EnumerationHistogram, histogram, |
+ ("Blink.UseCounter.Features", blink::UseCounter::kNumberOfFeatures)); |
+ switch (context_) { |
+ case kSVGImageContext: |
+ return svg_histogram; |
+ case kExtensionContext: |
+ return extension_histogram; |
+ case kDefaultContext: |
+ case kDisabledContext: |
+ break; |
+ } |
+ return histogram; |
} |
EnumerationHistogram& UseCounter::CssHistogram() const { |
+ DCHECK_NE(kExtensionContext, context_); |
+ DCHECK_NE(kDisabledContext, context_); |
DEFINE_STATIC_LOCAL(blink::EnumerationHistogram, histogram, |
("Blink.UseCounter.CSSProperties", kMaximumCSSSampleId)); |
DEFINE_STATIC_LOCAL( |