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

Side by Side Diff: components/url_matcher/url_matcher.cc

Issue 2443753003: Remove stl_util's deletion function use from components/url_matcher/. (Closed)
Patch Set: battre Created 4 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « components/url_matcher/url_matcher.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/url_matcher/url_matcher.h" 5 #include "components/url_matcher/url_matcher.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ptr_util.h"
12 #include "base/stl_util.h" 13 #include "base/stl_util.h"
13 #include "url/gurl.h" 14 #include "url/gurl.h"
14 #include "url/url_canon.h" 15 #include "url/url_canon.h"
15 16
16 namespace url_matcher { 17 namespace url_matcher {
17 18
18 // This set of classes implement a mapping of URL Component Patterns, such as 19 // This set of classes implement a mapping of URL Component Patterns, such as
19 // host_prefix, host_suffix, host_equals, ..., etc., to StringPatterns 20 // host_prefix, host_suffix, host_equals, ..., etc., to StringPatterns
20 // for use in substring comparisons. 21 // for use in substring comparisons.
21 // 22 //
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 const char kQueryComponentDelimiter[] = {static_cast<char>(-4), 0}; 256 const char kQueryComponentDelimiter[] = {static_cast<char>(-4), 0};
256 const char kEndOfURL[] = {static_cast<char>(-5), 0}; 257 const char kEndOfURL[] = {static_cast<char>(-5), 0};
257 258
258 // The delimiter for query parameters 259 // The delimiter for query parameters
259 const char kQuerySeparator = '&'; 260 const char kQuerySeparator = '&';
260 } // namespace 261 } // namespace
261 262
262 URLMatcherConditionFactory::URLMatcherConditionFactory() : id_counter_(0) {} 263 URLMatcherConditionFactory::URLMatcherConditionFactory() : id_counter_(0) {}
263 264
264 URLMatcherConditionFactory::~URLMatcherConditionFactory() { 265 URLMatcherConditionFactory::~URLMatcherConditionFactory() {
265 base::STLDeleteElements(&substring_pattern_singletons_);
266 base::STLDeleteElements(&regex_pattern_singletons_);
267 base::STLDeleteElements(&origin_and_path_regex_pattern_singletons_);
268 } 266 }
269 267
270 std::string URLMatcherConditionFactory::CanonicalizeURLForComponentSearches( 268 std::string URLMatcherConditionFactory::CanonicalizeURLForComponentSearches(
271 const GURL& url) const { 269 const GURL& url) const {
272 return kBeginningOfURL + CanonicalizeHostname(url.host()) + kEndOfDomain + 270 return kBeginningOfURL + CanonicalizeHostname(url.host()) + kEndOfDomain +
273 url.path() + kEndOfPath + 271 url.path() + kEndOfPath +
274 (url.has_query() ? CanonicalizeQuery(url.query(), true, true) 272 (url.has_query() ? CanonicalizeQuery(url.query(), true, true)
275 : std::string()) + 273 : std::string()) +
276 kEndOfURL; 274 kEndOfURL;
277 } 275 }
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 } 454 }
457 455
458 URLMatcherCondition 456 URLMatcherCondition
459 URLMatcherConditionFactory::CreateOriginAndPathMatchesCondition( 457 URLMatcherConditionFactory::CreateOriginAndPathMatchesCondition(
460 const std::string& regex) { 458 const std::string& regex) {
461 return CreateCondition(URLMatcherCondition::ORIGIN_AND_PATH_MATCHES, regex); 459 return CreateCondition(URLMatcherCondition::ORIGIN_AND_PATH_MATCHES, regex);
462 } 460 }
463 461
464 void URLMatcherConditionFactory::ForgetUnusedPatterns( 462 void URLMatcherConditionFactory::ForgetUnusedPatterns(
465 const std::set<StringPattern::ID>& used_patterns) { 463 const std::set<StringPattern::ID>& used_patterns) {
466 PatternSingletons::iterator i = substring_pattern_singletons_.begin(); 464 auto i = substring_pattern_singletons_.begin();
467 while (i != substring_pattern_singletons_.end()) { 465 while (i != substring_pattern_singletons_.end()) {
468 if (base::ContainsKey(used_patterns, (*i)->id())) { 466 if (base::ContainsKey(used_patterns, i->first->id()))
469 ++i; 467 ++i;
470 } else { 468 else
471 delete *i;
472 substring_pattern_singletons_.erase(i++); 469 substring_pattern_singletons_.erase(i++);
473 }
474 } 470 }
471
475 i = regex_pattern_singletons_.begin(); 472 i = regex_pattern_singletons_.begin();
476 while (i != regex_pattern_singletons_.end()) { 473 while (i != regex_pattern_singletons_.end()) {
477 if (base::ContainsKey(used_patterns, (*i)->id())) { 474 if (base::ContainsKey(used_patterns, i->first->id()))
478 ++i; 475 ++i;
479 } else { 476 else
480 delete *i;
481 regex_pattern_singletons_.erase(i++); 477 regex_pattern_singletons_.erase(i++);
482 }
483 } 478 }
479
484 i = origin_and_path_regex_pattern_singletons_.begin(); 480 i = origin_and_path_regex_pattern_singletons_.begin();
485 while (i != origin_and_path_regex_pattern_singletons_.end()) { 481 while (i != origin_and_path_regex_pattern_singletons_.end()) {
486 if (base::ContainsKey(used_patterns, (*i)->id())) { 482 if (base::ContainsKey(used_patterns, i->first->id()))
487 ++i; 483 ++i;
488 } else { 484 else
489 delete *i;
490 origin_and_path_regex_pattern_singletons_.erase(i++); 485 origin_and_path_regex_pattern_singletons_.erase(i++);
491 }
492 } 486 }
493 } 487 }
494 488
495 bool URLMatcherConditionFactory::IsEmpty() const { 489 bool URLMatcherConditionFactory::IsEmpty() const {
496 return substring_pattern_singletons_.empty() && 490 return substring_pattern_singletons_.empty() &&
497 regex_pattern_singletons_.empty() && 491 regex_pattern_singletons_.empty() &&
498 origin_and_path_regex_pattern_singletons_.empty(); 492 origin_and_path_regex_pattern_singletons_.empty();
499 } 493 }
500 494
501 URLMatcherCondition URLMatcherConditionFactory::CreateCondition( 495 URLMatcherCondition URLMatcherConditionFactory::CreateCondition(
502 URLMatcherCondition::Criterion criterion, 496 URLMatcherCondition::Criterion criterion,
503 const std::string& pattern) { 497 const std::string& pattern) {
504 StringPattern search_pattern(pattern, 0); 498 StringPattern search_pattern(pattern, 0);
505 PatternSingletons* pattern_singletons = NULL; 499 PatternSingletons* pattern_singletons = NULL;
506 if (IsRegexCriterion(criterion)) 500 if (IsRegexCriterion(criterion))
507 pattern_singletons = &regex_pattern_singletons_; 501 pattern_singletons = &regex_pattern_singletons_;
508 else if (IsOriginAndPathRegexCriterion(criterion)) 502 else if (IsOriginAndPathRegexCriterion(criterion))
509 pattern_singletons = &origin_and_path_regex_pattern_singletons_; 503 pattern_singletons = &origin_and_path_regex_pattern_singletons_;
510 else 504 else
511 pattern_singletons = &substring_pattern_singletons_; 505 pattern_singletons = &substring_pattern_singletons_;
512 506
513 PatternSingletons::const_iterator iter = 507 auto iter = pattern_singletons->find(&search_pattern);
514 pattern_singletons->find(&search_pattern);
515 508
516 if (iter != pattern_singletons->end()) 509 if (iter != pattern_singletons->end())
517 return URLMatcherCondition(criterion, *iter); 510 return URLMatcherCondition(criterion, iter->first);
518 511
519 StringPattern* new_pattern = new StringPattern(pattern, id_counter_++); 512 StringPattern* new_pattern = new StringPattern(pattern, id_counter_++);
520 pattern_singletons->insert(new_pattern); 513 (*pattern_singletons)[new_pattern] = base::WrapUnique(new_pattern);
521 return URLMatcherCondition(criterion, new_pattern); 514 return URLMatcherCondition(criterion, new_pattern);
522 } 515 }
523 516
524 std::string URLMatcherConditionFactory::CanonicalizeHostSuffix( 517 std::string URLMatcherConditionFactory::CanonicalizeHostSuffix(
525 const std::string& suffix) const { 518 const std::string& suffix) const {
526 if (suffix.empty()) 519 if (suffix.empty())
527 return "."; 520 return ".";
528 return suffix.back() == '.' ? suffix : suffix + "."; 521 return suffix.back() == '.' ? suffix : suffix + ".";
529 } 522 }
530 523
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1096 1089
1097 void URLMatcher::UpdateInternalDatastructures() { 1090 void URLMatcher::UpdateInternalDatastructures() {
1098 UpdateSubstringSetMatcher(false); 1091 UpdateSubstringSetMatcher(false);
1099 UpdateSubstringSetMatcher(true); 1092 UpdateSubstringSetMatcher(true);
1100 UpdateRegexSetMatcher(); 1093 UpdateRegexSetMatcher();
1101 UpdateTriggers(); 1094 UpdateTriggers();
1102 UpdateConditionFactory(); 1095 UpdateConditionFactory();
1103 } 1096 }
1104 1097
1105 } // namespace url_matcher 1098 } // namespace url_matcher
OLDNEW
« no previous file with comments | « components/url_matcher/url_matcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698