diff options
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.cc | 74 |
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; |