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

Side by Side Diff: chrome/common/extensions/url_pattern_set.cc

Issue 7432006: Add an experimental permissions API for extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/common/extensions/url_pattern_set.h" 5 #include "chrome/common/extensions/url_pattern_set.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 9
10 #include "chrome/common/extensions/url_pattern.h" 10 #include "chrome/common/extensions/url_pattern.h"
11 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
12 12
13
14 // static
15 void URLPatternSet::CreateDifference(const URLPatternSet& set1,
16 const URLPatternSet& set2,
17 URLPatternSet* out) {
18 out->ClearPatterns();
19 std::set_difference(set1.patterns_.begin(), set1.patterns_.end(),
20 set2.patterns_.begin(), set2.patterns_.end(),
21 std::inserter<std::set<URLPattern> >(
22 out->patterns_, out->patterns_.begin()));
23 }
24
25 // static
26 void URLPatternSet::CreateIntersection(const URLPatternSet& set1,
27 const URLPatternSet& set2,
28 URLPatternSet* out) {
29 out->ClearPatterns();
30 std::set_intersection(set1.patterns_.begin(), set1.patterns_.end(),
31 set2.patterns_.begin(), set2.patterns_.end(),
32 std::inserter<std::set<URLPattern> >(
33 out->patterns_, out->patterns_.begin()));
34 }
35
13 // static 36 // static
14 void URLPatternSet::CreateUnion(const URLPatternSet& set1, 37 void URLPatternSet::CreateUnion(const URLPatternSet& set1,
15 const URLPatternSet& set2, 38 const URLPatternSet& set2,
16 URLPatternSet* out) { 39 URLPatternSet* out) {
17 out->ClearPatterns(); 40 out->ClearPatterns();
18 std::set_union(set1.patterns_.begin(), set1.patterns_.end(), 41 std::set_union(set1.patterns_.begin(), set1.patterns_.end(),
19 set2.patterns_.begin(), set2.patterns_.end(), 42 set2.patterns_.begin(), set2.patterns_.end(),
20 std::inserter<std::set<URLPattern> >( 43 std::inserter<std::set<URLPattern> >(
21 out->patterns_, out->patterns_.begin())); 44 out->patterns_, out->patterns_.begin()));
22 } 45 }
(...skipping 22 matching lines...) Expand all
45 } 68 }
46 69
47 void URLPatternSet::AddPattern(const URLPattern& pattern) { 70 void URLPatternSet::AddPattern(const URLPattern& pattern) {
48 patterns_.insert(pattern); 71 patterns_.insert(pattern);
49 } 72 }
50 73
51 void URLPatternSet::ClearPatterns() { 74 void URLPatternSet::ClearPatterns() {
52 patterns_.clear(); 75 patterns_.clear();
53 } 76 }
54 77
78 bool URLPatternSet::Contains(const URLPatternSet& set) const {
79 return std::includes(patterns_.begin(), patterns_.end(),
80 set.patterns_.begin(), set.patterns_.end());
81 }
82
55 bool URLPatternSet::MatchesURL(const GURL& url) const { 83 bool URLPatternSet::MatchesURL(const GURL& url) const {
56 for (URLPatternSet::const_iterator pattern = patterns_.begin(); 84 for (URLPatternSet::const_iterator pattern = patterns_.begin();
57 pattern != patterns_.end(); ++pattern) { 85 pattern != patterns_.end(); ++pattern) {
58 if (pattern->MatchesURL(url)) 86 if (pattern->MatchesURL(url))
59 return true; 87 return true;
60 } 88 }
61 89
62 return false; 90 return false;
63 } 91 }
64 92
65 bool URLPatternSet::OverlapsWith(const URLPatternSet& other) const { 93 bool URLPatternSet::OverlapsWith(const URLPatternSet& other) const {
66 // Two extension extents overlap if there is any one URL that would match at 94 // Two extension extents overlap if there is any one URL that would match at
67 // least one pattern in each of the extents. 95 // least one pattern in each of the extents.
68 for (URLPatternSet::const_iterator i = patterns_.begin(); 96 for (URLPatternSet::const_iterator i = patterns_.begin();
69 i != patterns_.end(); ++i) { 97 i != patterns_.end(); ++i) {
70 for (URLPatternSet::const_iterator j = other.patterns().begin(); 98 for (URLPatternSet::const_iterator j = other.patterns().begin();
71 j != other.patterns().end(); ++j) { 99 j != other.patterns().end(); ++j) {
72 if (i->OverlapsWith(*j)) 100 if (i->OverlapsWith(*j))
73 return true; 101 return true;
74 } 102 }
75 } 103 }
76 104
77 return false; 105 return false;
78 } 106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698