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

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

Issue 2153743002: Save failure function to FlatBuffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add newline. 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/core/common/indexed_ruleset.cc
diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/components/subresource_filter/core/common/indexed_ruleset.cc
index 47c03af7a3c4fec6a847015f1b182c5736e36ded..f6d7cc3dc6a7fa6115ed3aef55e0d4e67b17f409 100644
--- a/components/subresource_filter/core/common/indexed_ruleset.cc
+++ b/components/subresource_filter/core/common/indexed_ruleset.cc
@@ -27,6 +27,13 @@ RulesetIndexer::RulesetIndexer() = default;
RulesetIndexer::~RulesetIndexer() = default;
bool RulesetIndexer::AddUrlRule(const proto::UrlRule& rule) {
+ if (rule.url_pattern().size() >
+ static_cast<size_t>(std::numeric_limits<uint8_t>::max())) {
+ // Failure function can not always be stored as an array of uint8_t in case
+ // the pattern's length exceeds 255.
+ return false;
+ }
+
flatbuffers::Offset<
flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>>
domains_offset;
@@ -49,10 +56,15 @@ bool RulesetIndexer::AddUrlRule(const proto::UrlRule& rule) {
auto url_pattern_offset = builder_.CreateString(rule.url_pattern());
+ std::vector<uint8_t> failure;
+ BuildFailureFunction(UrlPattern(rule), &failure);
+ auto failure_function_offset =
+ builder_.CreateVector(failure.data(), failure.size());
+
flat::UrlRuleBuilder rule_builder(builder_);
rule_builder.add_url_pattern(url_pattern_offset);
rule_builder.add_domains(domains_offset);
- // TODO(pkalinnikov): Build failure function for URL pattern of the |rule|.
+ rule_builder.add_failure_function(failure_function_offset);
uint8_t options = 0;
@@ -335,12 +347,9 @@ bool MatchesAny(const FlatUrlRuleList* rules,
DCHECK_NE(rule, nullptr);
if (rule->url_pattern_type() != flat::UrlPatternType_REGEXP) {
- // TODO(pkalinnikov): Build failure function once on the index building
- // phase and store it to the FlatBuffer. Retrieve it here for matching.
- std::vector<size_t> failure_function;
- const UrlPattern url_pattern(*rule);
- BuildFailureFunction(url_pattern, &failure_function);
- if (!IsMatch(url, url_pattern, failure_function))
+ const uint8_t* begin = rule->failure_function()->data();
+ const uint8_t* end = begin + rule->failure_function()->size();
+ if (!IsMatch(url, UrlPattern(*rule), begin, end))
continue;
} else {
// TODO(pkalinnikov): Implement REGEXP rules matching.

Powered by Google App Engine
This is Rietveld 408576698