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

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

Issue 2175763002: Integrate IndexedRuleset into DocumentSubresourceFilter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests. Created 4 years, 5 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/renderer/document_subresource_filter.cc
diff --git a/components/subresource_filter/content/renderer/document_subresource_filter.cc b/components/subresource_filter/content/renderer/document_subresource_filter.cc
index f1e4fcebce86070a5773899b2e311ad1a8191a18..7f48ef5f6604400684a84ed58e598239060161ea 100644
--- a/components/subresource_filter/content/renderer/document_subresource_filter.cc
+++ b/components/subresource_filter/content/renderer/document_subresource_filter.cc
@@ -12,15 +12,74 @@
#include "base/trace_event/trace_event.h"
#include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
#include "third_party/WebKit/public/platform/WebURL.h"
-#include "url/gurl.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;
+ }
+}
+
+} // namespace
+
DocumentSubresourceFilter::DocumentSubresourceFilter(
ActivationState activation_state,
const scoped_refptr<const MemoryMappedRuleset>& ruleset,
- std::vector<GURL> /* ignored_ancestor_document_urls */)
- : activation_state_(activation_state), ruleset_(ruleset) {
+ std::vector<GURL> ancestor_document_urls)
+ : activation_state_(activation_state),
+ ruleset_(ruleset),
+ matcher_(ruleset_->data(), ruleset_->length()),
+ ancestor_document_urls_(std::move(ancestor_document_urls)) {
DCHECK_NE(activation_state_, ActivationState::DISABLED);
DCHECK(ruleset);
}
@@ -29,11 +88,20 @@ DocumentSubresourceFilter::~DocumentSubresourceFilter() = default;
bool DocumentSubresourceFilter::allowLoad(
const blink::WebURL& resourceUrl,
- blink::WebURLRequest::RequestContext /* ignored */) {
+ blink::WebURLRequest::RequestContext request_context) {
TRACE_EVENT1("loader", "DocumentSubresourceFilter::allowLoad", "url",
resourceUrl.string().utf8());
+
+ // TODO(pkalinnikov): Check all |ancestor_document_urls| for activation bit
+ // here or once in the constructor.
++num_loads_evaluated_;
- if (DoesLoadMatchFilteringRules(GURL(resourceUrl))) {
+
+ url::Origin initiator;
+ if (!ancestor_document_urls_.empty())
+ initiator = url::Origin(ancestor_document_urls_.front());
+
+ if (!matcher_.IsAllowed(GURL(resourceUrl), initiator,
+ ToElementType(request_context))) {
++num_loads_matching_rules_;
if (activation_state_ == ActivationState::ENABLED) {
++num_loads_disallowed_;
@@ -43,14 +111,4 @@ bool DocumentSubresourceFilter::allowLoad(
return true;
}
-bool DocumentSubresourceFilter::DoesLoadMatchFilteringRules(
- const GURL& resource_url) {
- static_assert(CHAR_BIT == 8, "Assumed char was 8 bits.");
- base::StringPiece disallowed_suffix = base::StringPiece(
- reinterpret_cast<const char*>(ruleset_->data()), ruleset_->length());
- return !disallowed_suffix.empty() &&
- base::EndsWith(resource_url.path_piece(), disallowed_suffix,
- base::CompareCase::SENSITIVE);
-}
-
} // namespace subresource_filter

Powered by Google App Engine
This is Rietveld 408576698