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

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: 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..a8e0c78645e32878ce15c947d4a46cf0ffd78659 100644
--- a/components/subresource_filter/content/renderer/document_subresource_filter.cc
+++ b/components/subresource_filter/content/renderer/document_subresource_filter.cc
@@ -12,15 +12,53 @@
#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(
pkalinnikov 2016/07/22 13:20:03 Please review this conversion carefully.
+ blink::WebURLRequest::RequestContext request_context) {
+ switch (request_context) {
+ case blink::WebURLRequest::RequestContextAudio:
+ case blink::WebURLRequest::RequestContextVideo:
engedy 2016/07/22 14:19:58 Also Track
pkalinnikov 2016/07/25 11:41:11 Done.
+ return proto::ELEMENT_TYPE_MEDIA;
+ case blink::WebURLRequest::RequestContextFont:
+ return proto::ELEMENT_TYPE_FONT;
+ case blink::WebURLRequest::RequestContextFrame:
+ case blink::WebURLRequest::RequestContextIframe:
+ return proto::ELEMENT_TYPE_SUBDOCUMENT;
+ case blink::WebURLRequest::RequestContextImage:
engedy 2016/07/22 14:19:58 Also ImageSet
pkalinnikov 2016/07/25 11:41:11 Done.
+ return proto::ELEMENT_TYPE_IMAGE;
+ case blink::WebURLRequest::RequestContextObject:
+ case blink::WebURLRequest::RequestContextPlugin:
engedy 2016/07/22 14:19:58 According to web_url_request_util.cc:68, Embed and
pkalinnikov 2016/07/25 11:41:11 Done.
+ return proto::ELEMENT_TYPE_OBJECT;
+ case blink::WebURLRequest::RequestContextPing:
engedy 2016/07/22 14:19:58 Also Beacon.
pkalinnikov 2016/07/25 11:41:11 Done.
+ return proto::ELEMENT_TYPE_PING;
+ case blink::WebURLRequest::RequestContextScript:
+ return proto::ELEMENT_TYPE_SCRIPT;
+ case blink::WebURLRequest::RequestContextStyle:
+ return proto::ELEMENT_TYPE_STYLESHEET;
engedy 2016/07/22 14:19:58 Let's classify XSLT as a stylesheet too.
pkalinnikov 2016/07/25 11:41:11 Done.
+ case blink::WebURLRequest::RequestContextXMLHttpRequest:
engedy 2016/07/22 14:19:58 EventSource and Fetch should probably be considere
pkalinnikov 2016/07/25 11:41:11 Done.
+ return proto::ELEMENT_TYPE_XMLHTTPREQUEST;
+
+ case blink::WebURLRequest::RequestContextUnspecified:
+ return proto::ELEMENT_TYPE_UNSPECIFIED;
+ default:
+ return proto::ELEMENT_TYPE_OTHER;
+ }
engedy 2016/07/22 14:19:58 We'll have to carefully look into CSPReport, Favic
+}
+
+} // 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 +67,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.
pkalinnikov 2016/07/22 13:20:03 Or check |ancestor_document_rules| once during con
pkalinnikov 2016/07/25 11:47:31 Added comment.
++num_loads_evaluated_;
- if (DoesLoadMatchFilteringRules(GURL(resourceUrl))) {
+
+ url::Origin initiator;
+ if (!ancestor_document_urls_.empty())
+ initiator = url::Origin(ancestor_document_urls_.front());
+ const bool load_is_allowed = matcher_.IsAllowed(
engedy 2016/07/22 14:19:58 nit: How about just inlining this?
pkalinnikov 2016/07/25 11:41:11 Done.
+ GURL(resourceUrl), initiator, ToElementType(request_context));
engedy 2016/07/22 14:19:58 Either need to handle invalid URLs here, or verify
pkalinnikov 2016/07/25 11:47:31 The |matcher_| already takes care of invalid GURLs
engedy 2016/07/25 14:06:38 Yes, it has a DCHECK, but then we still need to ve
pkalinnikov 2016/07/25 17:34:54 Wait, I'm talking about IndexedRulesetMatcher::IsA
engedy 2016/07/25 19:47:00 Oh, right, I didn't noticed that. Ack.
+
+ if (!load_is_allowed) {
++num_loads_matching_rules_;
if (activation_state_ == ActivationState::ENABLED) {
++num_loads_disallowed_;
@@ -43,14 +90,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