Index: components/subresource_filter/content/common/document_subresource_filter.cc |
diff --git a/components/subresource_filter/content/common/document_subresource_filter.cc b/components/subresource_filter/content/common/document_subresource_filter.cc |
deleted file mode 100644 |
index af7bbba38742024c69ca64fe1f4e3b5af22696f7..0000000000000000000000000000000000000000 |
--- a/components/subresource_filter/content/common/document_subresource_filter.cc |
+++ /dev/null |
@@ -1,228 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/subresource_filter/content/common/document_subresource_filter.h" |
- |
-#include <climits> |
- |
-#include "base/logging.h" |
-#include "base/strings/string_piece.h" |
-#include "base/strings/string_util.h" |
-#include "base/trace_event/trace_event.h" |
-#include "components/subresource_filter/core/common/first_party_origin.h" |
-#include "components/subresource_filter/core/common/memory_mapped_ruleset.h" |
-#include "components/subresource_filter/core/common/scoped_timers.h" |
-#include "components/subresource_filter/core/common/time_measurements.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
- |
-namespace subresource_filter { |
- |
-namespace { |
- |
-proto::ElementType ToElementType( |
- blink::WebURLRequest::RequestContext request_context) { |
- switch (request_context) { |
- case blink::WebURLRequest::RequestContextAudio: |
- case blink::WebURLRequest::RequestContextVideo: |
- case blink::WebURLRequest::RequestContextTrack: |
- return proto::ELEMENT_TYPE_MEDIA; |
- case blink::WebURLRequest::RequestContextBeacon: |
- case blink::WebURLRequest::RequestContextPing: |
- return proto::ELEMENT_TYPE_PING; |
- case blink::WebURLRequest::RequestContextEmbed: |
- case blink::WebURLRequest::RequestContextObject: |
- case blink::WebURLRequest::RequestContextPlugin: |
- return proto::ELEMENT_TYPE_OBJECT; |
- case blink::WebURLRequest::RequestContextEventSource: |
- case blink::WebURLRequest::RequestContextFetch: |
- case blink::WebURLRequest::RequestContextXMLHttpRequest: |
- return proto::ELEMENT_TYPE_XMLHTTPREQUEST; |
- case blink::WebURLRequest::RequestContextFavicon: |
- case blink::WebURLRequest::RequestContextImage: |
- case blink::WebURLRequest::RequestContextImageSet: |
- return proto::ELEMENT_TYPE_IMAGE; |
- case blink::WebURLRequest::RequestContextFont: |
- return proto::ELEMENT_TYPE_FONT; |
- case blink::WebURLRequest::RequestContextFrame: |
- case blink::WebURLRequest::RequestContextForm: |
- case blink::WebURLRequest::RequestContextHyperlink: |
- case blink::WebURLRequest::RequestContextIframe: |
- case blink::WebURLRequest::RequestContextInternal: |
- case blink::WebURLRequest::RequestContextLocation: |
- return proto::ELEMENT_TYPE_SUBDOCUMENT; |
- case blink::WebURLRequest::RequestContextScript: |
- case blink::WebURLRequest::RequestContextServiceWorker: |
- case blink::WebURLRequest::RequestContextSharedWorker: |
- return proto::ELEMENT_TYPE_SCRIPT; |
- case blink::WebURLRequest::RequestContextStyle: |
- case blink::WebURLRequest::RequestContextXSLT: |
- return proto::ELEMENT_TYPE_STYLESHEET; |
- |
- case blink::WebURLRequest::RequestContextPrefetch: |
- case blink::WebURLRequest::RequestContextSubresource: |
- return proto::ELEMENT_TYPE_OTHER; |
- |
- case blink::WebURLRequest::RequestContextCSPReport: |
- case blink::WebURLRequest::RequestContextDownload: |
- case blink::WebURLRequest::RequestContextImport: |
- case blink::WebURLRequest::RequestContextManifest: |
- case blink::WebURLRequest::RequestContextUnspecified: |
- default: |
- return proto::ELEMENT_TYPE_UNSPECIFIED; |
- } |
-} |
- |
-ActivationState ComputeActivationStateImpl( |
- const GURL& document_url, |
- const url::Origin& parent_document_origin, |
- const ActivationState& parent_activation_state, |
- const IndexedRulesetMatcher& matcher) { |
- ActivationState activation_state = parent_activation_state; |
- if (activation_state.filtering_disabled_for_document) |
- return activation_state; |
- |
- // TODO(pkalinnikov): Match several activation types in a batch. |
- if (matcher.ShouldDisableFilteringForDocument( |
- document_url, parent_document_origin, |
- proto::ACTIVATION_TYPE_DOCUMENT)) { |
- activation_state.filtering_disabled_for_document = true; |
- } else if (!activation_state.generic_blocking_rules_disabled && |
- matcher.ShouldDisableFilteringForDocument( |
- document_url, parent_document_origin, |
- proto::ACTIVATION_TYPE_GENERICBLOCK)) { |
- activation_state.generic_blocking_rules_disabled = true; |
- } |
- return activation_state; |
-} |
- |
-} // namespace |
- |
-ActivationState ComputeActivationState( |
- const GURL& document_url, |
- const url::Origin& parent_document_origin, |
- const ActivationState& parent_activation_state, |
- const MemoryMappedRuleset* ruleset) { |
- DCHECK(ruleset); |
- IndexedRulesetMatcher matcher(ruleset->data(), ruleset->length()); |
- return ComputeActivationStateImpl(document_url, parent_document_origin, |
- parent_activation_state, matcher); |
-} |
- |
-ActivationState ComputeActivationState( |
- ActivationLevel activation_level, |
- bool measure_performance, |
- const std::vector<GURL>& ancestor_document_urls, |
- const MemoryMappedRuleset* ruleset) { |
- SCOPED_UMA_HISTOGRAM_MICRO_TIMER( |
- "SubresourceFilter.DocumentLoad.Activation.WallDuration"); |
- SCOPED_UMA_HISTOGRAM_MICRO_THREAD_TIMER( |
- "SubresourceFilter.DocumentLoad.Activation.CPUDuration"); |
- |
- ActivationState activation_state(activation_level); |
- activation_state.measure_performance = measure_performance; |
- DCHECK(ruleset); |
- |
- IndexedRulesetMatcher matcher(ruleset->data(), ruleset->length()); |
- |
- url::Origin parent_document_origin; |
- for (auto iter = ancestor_document_urls.rbegin(), |
- rend = ancestor_document_urls.rend(); |
- iter != rend; ++iter) { |
- const GURL& document_url(*iter); |
- activation_state = ComputeActivationStateImpl( |
- document_url, parent_document_origin, activation_state, matcher); |
- parent_document_origin = url::Origin(document_url); |
- } |
- |
- return activation_state; |
-} |
- |
-DocumentSubresourceFilter::DocumentSubresourceFilter( |
- url::Origin document_origin, |
- ActivationState activation_state, |
- scoped_refptr<const MemoryMappedRuleset> ruleset, |
- base::OnceClosure first_disallowed_load_callback) |
- : activation_state_(activation_state), |
- ruleset_(std::move(ruleset)), |
- ruleset_matcher_(ruleset_->data(), ruleset_->length()), |
- first_disallowed_load_callback_( |
- std::move(first_disallowed_load_callback)) { |
- DCHECK_NE(activation_state_.activation_level, ActivationLevel::DISABLED); |
- if (!activation_state_.filtering_disabled_for_document) |
- document_origin_.reset(new FirstPartyOrigin(std::move(document_origin))); |
-} |
- |
-DocumentSubresourceFilter::~DocumentSubresourceFilter() = default; |
- |
-blink::WebDocumentSubresourceFilter::LoadPolicy |
-DocumentSubresourceFilter::getLoadPolicy( |
- const blink::WebURL& resourceUrl, |
- blink::WebURLRequest::RequestContext request_context) { |
- ++statistics_.num_loads_total; |
- |
- if (activation_state_.filtering_disabled_for_document) |
- return Allow; |
- if (resourceUrl.protocolIs(url::kDataScheme)) |
- return Allow; |
- |
- // TODO(pkalinnikov): Would be good to avoid converting to GURL. |
- return EvaluateLoadPolicy(GURL(resourceUrl), ToElementType(request_context)); |
-} |
- |
-blink::WebDocumentSubresourceFilter::LoadPolicy |
-DocumentSubresourceFilter::GetLoadPolicyForSubdocument( |
- const GURL& subdocument_url) { |
- ++statistics_.num_loads_total; |
- |
- if (activation_state_.filtering_disabled_for_document) |
- return Allow; |
- if (subdocument_url.SchemeIs(url::kDataScheme)) |
- return Allow; |
- return EvaluateLoadPolicy(subdocument_url, proto::ELEMENT_TYPE_SUBDOCUMENT); |
-} |
- |
-void DocumentSubresourceFilter::reportDisallowedLoad() { |
- if (first_disallowed_load_callback_.is_null()) |
- return; |
- std::move(first_disallowed_load_callback_).Run(); |
-} |
- |
-blink::WebDocumentSubresourceFilter::LoadPolicy |
-DocumentSubresourceFilter::EvaluateLoadPolicy(const GURL& resource_url, |
- proto::ElementType element_type) { |
- TRACE_EVENT1("loader", "DocumentSubresourceFilter::EvaluateLoadPolicy", "url", |
- resource_url.spec()); |
- |
- auto wall_duration_timer = ScopedTimers::StartIf( |
- activation_state_.measure_performance && |
- ScopedThreadTimers::IsSupported(), |
- [this](base::TimeDelta delta) { |
- statistics_.evaluation_total_wall_duration += delta; |
- UMA_HISTOGRAM_MICRO_TIMES( |
- "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration", delta); |
- }); |
- auto cpu_duration_timer = ScopedThreadTimers::StartIf( |
- activation_state_.measure_performance, [this](base::TimeDelta delta) { |
- statistics_.evaluation_total_cpu_duration += delta; |
- UMA_HISTOGRAM_MICRO_TIMES( |
- "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration", delta); |
- }); |
- |
- ++statistics_.num_loads_evaluated; |
- DCHECK(document_origin_); |
- if (ruleset_matcher_.ShouldDisallowResourceLoad( |
- resource_url, *document_origin_, element_type, |
- activation_state_.generic_blocking_rules_disabled)) { |
- ++statistics_.num_loads_matching_rules; |
- if (activation_state_.activation_level == ActivationLevel::ENABLED) { |
- ++statistics_.num_loads_disallowed; |
- return Disallow; |
- } else if (activation_state_.activation_level == ActivationLevel::DRYRUN) { |
- return WouldDisallow; |
- } |
- } |
- return Allow; |
-} |
- |
-} // namespace subresource_filter |