Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Unified Diff: components/subresource_filter/content/common/document_subresource_filter.cc

Issue 2697363005: Move DocumentSubresourceFilter to core/common. (Closed)
Patch Set: Address comments from engedy@. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698