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

Unified Diff: components/subresource_filter/core/common/url_pattern_index.cc

Issue 2881453002: DNR Prototype: With flatbuffers
Patch Set: -- Created 3 years, 6 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
« no previous file with comments | « components/subresource_filter/core/common/flat/url_pattern_index.fbs ('k') | extensions/browser/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/subresource_filter/core/common/url_pattern_index.cc
diff --git a/components/subresource_filter/core/common/url_pattern_index.cc b/components/subresource_filter/core/common/url_pattern_index.cc
index 574f577a32533c1d0811f55d579d152c22f0a3d7..0116049a5b82cd2e670a74581c636a4a3359f5ef 100644
--- a/components/subresource_filter/core/common/url_pattern_index.cc
+++ b/components/subresource_filter/core/common/url_pattern_index.cc
@@ -24,6 +24,39 @@ namespace {
using FlatStringOffset = flatbuffers::Offset<flatbuffers::String>;
using FlatDomains = flatbuffers::Vector<FlatStringOffset>;
using FlatDomainsOffset = flatbuffers::Offset<FlatDomains>;
+using ActivationMaskPair =
+ std::pair<proto::ActivationType, flat::ActivationType>;
+using ElementTypeMaskPair = std::pair<proto::ElementType, flat::ElementType>;
+
+const ActivationMaskPair kActivationMaskPairs[] = {
+ {proto::ACTIVATION_TYPE_DOCUMENT, flat::ActivationType_DOCUMENT},
+ {proto::ACTIVATION_TYPE_ELEMHIDE,
+ flat::ActivationType_NONE}, // ELEMHIDE is not supported.
+ {proto::ACTIVATION_TYPE_GENERICHIDE,
+ flat::ActivationType_NONE}, // Generic block is not supported.
+ {proto::ACTIVATION_TYPE_GENERICBLOCK, flat::ActivationType_GENERIC_BLOCK},
+};
+
+const ElementTypeMaskPair kElementTypeMaskPairs[] = {
+ {proto::ELEMENT_TYPE_OTHER, flat::ElementType_OTHER},
+ {proto::ELEMENT_TYPE_SCRIPT, flat::ElementType_SCRIPT},
+ {proto::ELEMENT_TYPE_IMAGE, flat::ElementType_IMAGE},
+ {proto::ELEMENT_TYPE_STYLESHEET, flat::ElementType_STYLESHEET},
+ {proto::ELEMENT_TYPE_OBJECT, flat::ElementType_OBJECT},
+ {proto::ELEMENT_TYPE_XMLHTTPREQUEST, flat::ElementType_XMLHTTPREQUEST},
+ {proto::ELEMENT_TYPE_OBJECT_SUBREQUEST,
+ flat::ElementType_OBJECT}, // Normally we can not distinguish between the
+ // main plugin resource and any other loads it
+ // makes. We treat them both as OBJECT
+ // requests.
+ {proto::ELEMENT_TYPE_SUBDOCUMENT, flat::ElementType_SUBDOCUMENT},
+ {proto::ELEMENT_TYPE_PING, flat::ElementType_PING},
+ {proto::ELEMENT_TYPE_MEDIA, flat::ElementType_MEDIA},
+ {proto::ELEMENT_TYPE_FONT, flat::ElementType_FONT},
+ {proto::ELEMENT_TYPE_POPUP,
+ flat::ElementType_NONE}, // Filterning popups is not supported.
+ {proto::ELEMENT_TYPE_WEBSOCKET, flat::ElementType_WEBSOCKET},
+};
base::StringPiece ToStringPiece(const flatbuffers::String* string) {
DCHECK(string);
@@ -142,6 +175,9 @@ class UrlRuleFlatBufferConverter {
}
bool InitializeOptions() {
+ static_assert(flat::OptionFlag_ANY <= std::numeric_limits<uint8_t>::max(),
+ "Option flags can not be stored in uint8_t.");
+
if (rule_.semantics() == proto::RULE_SEMANTICS_WHITELIST) {
options_ |= flat::OptionFlag_IS_WHITELIST;
} else if (rule_.semantics() != proto::RULE_SEMANTICS_BLACKLIST) {
@@ -170,33 +206,27 @@ class UrlRuleFlatBufferConverter {
}
bool InitializeElementTypes() {
- static_assert(
- proto::ELEMENT_TYPE_ALL <= std::numeric_limits<uint16_t>::max(),
- "Element types can not be stored in uint16_t.");
- element_types_ = static_cast<uint16_t>(rule_.element_types());
+ static_assert(flat::ElementType_ANY <= std::numeric_limits<uint16_t>::max(),
+ "Element types can not be stored in uint16_t.");
- // Note: Normally we can not distinguish between the main plugin resource
- // and any other loads it makes. We treat them both as OBJECT requests.
- if (element_types_ & proto::ELEMENT_TYPE_OBJECT_SUBREQUEST)
- element_types_ |= proto::ELEMENT_TYPE_OBJECT;
+ element_types_ = flat::ElementType_NONE;
- // Ignore unknown element types.
- element_types_ &= proto::ELEMENT_TYPE_ALL;
- // Filtering popups is not supported.
- element_types_ &= ~proto::ELEMENT_TYPE_POPUP;
+ for (const auto& pair : kElementTypeMaskPairs)
+ if (rule_.element_types() & pair.first)
+ element_types_ |= pair.second;
return true;
}
bool InitializeActivationTypes() {
static_assert(
- proto::ACTIVATION_TYPE_ALL <= std::numeric_limits<uint8_t>::max(),
+ flat::ActivationType_ANY <= std::numeric_limits<uint8_t>::max(),
"Activation types can not be stored in uint8_t.");
- activation_types_ = static_cast<uint8_t>(rule_.activation_types());
+ activation_types_ = flat::ActivationType_NONE;
- // Only the following activation types are supported, ignore the others.
- activation_types_ &=
- proto::ACTIVATION_TYPE_DOCUMENT | proto::ACTIVATION_TYPE_GENERICBLOCK;
+ for (const auto& pair : kActivationMaskPairs)
+ if (rule_.activation_types() & pair.first)
+ activation_types_ |= pair.second;
return true;
}
@@ -407,8 +437,9 @@ size_t GetLongestMatchingSubdomain(const url::Origin& origin,
bool DoesOriginMatchDomainList(const url::Origin& origin,
const flat::UrlRule& rule,
bool disable_generic_rules) {
- const bool is_generic = !rule.domains_included();
- DCHECK(is_generic || rule.domains_included()->size());
+ const bool is_generic =
+ !rule.domains_included() || !rule.domains_included()->size();
+ // DCHECK(is_generic || rule.domains_included()->size());
if (disable_generic_rules && is_generic)
return false;
« no previous file with comments | « components/subresource_filter/core/common/flat/url_pattern_index.fbs ('k') | extensions/browser/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698