summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc74
1 files changed, 46 insertions, 28 deletions
diff --git a/chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc b/chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc
index 3dacfcce543..eaea9c36b07 100644
--- a/chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc
+++ b/chromium/third_party/blink/renderer/core/frame/use_counter_impl.cc
@@ -26,6 +26,7 @@
#include "third_party/blink/renderer/core/frame/use_counter_impl.h"
#include "base/metrics/histogram_macros.h"
+#include "third_party/blink/public/common/scheme_registry.h"
#include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom-blink.h"
#include "third_party/blink/public/mojom/use_counter/use_counter_feature.mojom-blink.h"
#include "third_party/blink/renderer/core/css/css_style_sheet.h"
@@ -54,6 +55,20 @@ mojom::blink::UseCounterFeatureType ToFeatureType(
return mojom::blink::UseCounterFeatureType::kAnimatedCssProperty;
}
}
+
+mojom::blink::UseCounterFeatureType ToFeatureType(
+ UseCounterImpl::PermissionsPolicyUsageType type) {
+ switch (type) {
+ case UseCounterImpl::PermissionsPolicyUsageType::kViolation:
+ return mojom::blink::UseCounterFeatureType::
+ kPermissionsPolicyViolationEnforce;
+ case UseCounterImpl::PermissionsPolicyUsageType::kHeader:
+ return mojom::blink::UseCounterFeatureType::kPermissionsPolicyHeader;
+ case UseCounterImpl::PermissionsPolicyUsageType::kIframeAttribute:
+ return mojom::blink::UseCounterFeatureType::
+ kPermissionsPolicyIframeAttribute;
+ }
+}
} // namespace
UseCounterMuteScope::UseCounterMuteScope(const Element& element)
@@ -104,10 +119,16 @@ void UseCounterImpl::Trace(Visitor* visitor) const {
void UseCounterImpl::DidCommitLoad(const LocalFrame* frame) {
const KURL url = frame->GetDocument()->Url();
- if (url.ProtocolIs("chrome-extension"))
+ if (CommonSchemeRegistry::IsExtensionScheme(url.Protocol().Ascii())) {
context_ = kExtensionContext;
- if (url.ProtocolIs("file"))
+ } else if (url.ProtocolIs("file")) {
context_ = kFileContext;
+ } else if (url.ProtocolIsInHTTPFamily()) {
+ context_ = kDefaultContext;
+ } else {
+ // UseCounter is disabled for all other URL schemes.
+ context_ = kDisabledContext;
+ }
DCHECK_EQ(kPreCommit, commit_state_);
commit_state_ = kCommited;
@@ -123,7 +144,6 @@ void UseCounterImpl::DidCommitLoad(const LocalFrame* frame) {
TraceMeasurement(feature);
}
- // TODO(crbug.com/1196402): move extension histogram to the browser side.
if (context_ == kExtensionContext || context_ == kFileContext) {
CountFeature(WebFeature::kPageVisits);
}
@@ -192,14 +212,14 @@ void UseCounterImpl::Count(WebFeature web_feature,
source_frame);
}
-void UseCounterImpl::CountPermissionsPolicyViolation(
+void UseCounterImpl::CountPermissionsPolicyUsage(
mojom::blink::PermissionsPolicyFeature feature,
+ PermissionsPolicyUsageType usage_type,
const LocalFrame& source_frame) {
DCHECK_NE(mojom::blink::PermissionsPolicyFeature::kNotFound, feature);
- Count(
- {mojom::blink::UseCounterFeatureType::kPermissionsPolicyViolationEnforce,
- static_cast<uint32_t>(feature)},
- &source_frame);
+
+ Count({ToFeatureType(usage_type), static_cast<uint32_t>(feature)},
+ &source_frame);
}
void UseCounterImpl::NotifyFeatureCounted(WebFeature feature) {
@@ -213,8 +233,6 @@ void UseCounterImpl::NotifyFeatureCounted(WebFeature feature) {
observers_.RemoveAll(to_be_removed);
}
-// TODO(crbug.com/1196402): Remove this method after all histograms are
-// counted on browser side.
void UseCounterImpl::CountFeature(WebFeature feature) const {
switch (context_) {
case kDefaultContext:
@@ -246,26 +264,24 @@ bool UseCounterImpl::ReportMeasurement(const UseCounterFeature& feature,
return false;
auto* client = frame->Client();
- switch (feature.type()) {
- case mojom::blink::UseCounterFeatureType::kWebFeature: {
- WebFeature web_feature = static_cast<WebFeature>(feature.value());
- if (context_ != kDefaultContext)
- CountFeature(web_feature);
- NotifyFeatureCounted(web_feature);
- break;
- }
- case mojom::blink::UseCounterFeatureType::kAnimatedCssProperty:
- case mojom::blink::UseCounterFeatureType::kCssProperty:
- if (context_ == kExtensionContext)
- return false;
- break;
- case mojom::blink::UseCounterFeatureType::
- kPermissionsPolicyViolationEnforce:
- break;
+ if (feature.type() == mojom::blink::UseCounterFeatureType::kWebFeature)
+ NotifyFeatureCounted(static_cast<WebFeature>(feature.value()));
+
+ // Report to browser about observed event only when URL is HTTP/HTTPS,
+ // as other URL schemes are filtered out in
+ // |MetricsWebContentsObserver::DoesTimingUpdateHaveError| anyway.
+ if (context_ == kDefaultContext) {
+ client->DidObserveNewFeatureUsage(feature);
+ return true;
+ }
+
+ // WebFeatures in non-default contexts are counted on renderer side.
+ if (feature.type() == mojom::blink::UseCounterFeatureType::kWebFeature) {
+ CountFeature(static_cast<WebFeature>(feature.value()));
+ return true;
}
- client->DidObserveNewFeatureUsage(feature);
- return true;
+ return false;
}
// Note that HTTPArchive tooling looks specifically for this event - see
@@ -284,6 +300,8 @@ void UseCounterImpl::TraceMeasurement(const UseCounterFeature& feature) {
break;
case mojom::blink::UseCounterFeatureType::
kPermissionsPolicyViolationEnforce:
+ case mojom::blink::UseCounterFeatureType::kPermissionsPolicyHeader:
+ case mojom::blink::UseCounterFeatureType::kPermissionsPolicyIframeAttribute:
// TODO(crbug.com/1206004): Add trace event for permissions policy metrics
// gathering.
return;