OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/browser/extensions/api/declarative_content/declarative_content_
page_url_condition_tracker.h" | 5 #include "chrome/browser/extensions/api/declarative_content/declarative_content_
page_url_condition_tracker.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/ptr_util.h" |
8 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
9 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
10 #include "base/values.h" | 11 #include "base/values.h" |
11 #include "chrome/browser/extensions/api/declarative_content/content_constants.h" | 12 #include "chrome/browser/extensions/api/declarative_content/content_constants.h" |
12 #include "components/url_matcher/url_matcher_factory.h" | 13 #include "components/url_matcher/url_matcher_factory.h" |
13 #include "content/public/browser/web_contents.h" | 14 #include "content/public/browser/web_contents.h" |
14 | 15 |
15 namespace extensions { | 16 namespace extensions { |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 const char kInvalidTypeOfParameter[] = "Attribute '%s' has an invalid type"; | 20 const char kInvalidTypeOfParameter[] = "Attribute '%s' has an invalid type"; |
20 | 21 |
21 static url_matcher::URLMatcherConditionSet::ID g_next_id = 0; | 22 static url_matcher::URLMatcherConditionSet::ID g_next_id = 0; |
22 | 23 |
23 } // namespace | 24 } // namespace |
24 | 25 |
25 // | 26 // |
26 // DeclarativeContentPageUrlPredicate | 27 // DeclarativeContentPageUrlPredicate |
27 // | 28 // |
28 | 29 |
29 DeclarativeContentPageUrlPredicate::~DeclarativeContentPageUrlPredicate() { | 30 DeclarativeContentPageUrlPredicate::~DeclarativeContentPageUrlPredicate() { |
30 } | 31 } |
31 | 32 |
32 // static | 33 // static |
33 scoped_ptr<DeclarativeContentPageUrlPredicate> | 34 std::unique_ptr<DeclarativeContentPageUrlPredicate> |
34 DeclarativeContentPageUrlPredicate::Create( | 35 DeclarativeContentPageUrlPredicate::Create( |
35 ContentPredicateEvaluator* evaluator, | 36 ContentPredicateEvaluator* evaluator, |
36 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, | 37 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, |
37 const base::Value& value, | 38 const base::Value& value, |
38 std::string* error) { | 39 std::string* error) { |
39 scoped_refptr<url_matcher::URLMatcherConditionSet> url_matcher_condition_set; | 40 scoped_refptr<url_matcher::URLMatcherConditionSet> url_matcher_condition_set; |
40 const base::DictionaryValue* dict = nullptr; | 41 const base::DictionaryValue* dict = nullptr; |
41 if (!value.GetAsDictionary(&dict)) { | 42 if (!value.GetAsDictionary(&dict)) { |
42 *error = base::StringPrintf(kInvalidTypeOfParameter, | 43 *error = base::StringPrintf(kInvalidTypeOfParameter, |
43 declarative_content_constants::kPageUrl); | 44 declarative_content_constants::kPageUrl); |
44 return scoped_ptr<DeclarativeContentPageUrlPredicate>(); | 45 return std::unique_ptr<DeclarativeContentPageUrlPredicate>(); |
45 } else { | 46 } else { |
46 url_matcher_condition_set = | 47 url_matcher_condition_set = |
47 url_matcher::URLMatcherFactory::CreateFromURLFilterDictionary( | 48 url_matcher::URLMatcherFactory::CreateFromURLFilterDictionary( |
48 url_matcher_condition_factory, dict, ++g_next_id, error); | 49 url_matcher_condition_factory, dict, ++g_next_id, error); |
49 if (!url_matcher_condition_set) | 50 if (!url_matcher_condition_set) |
50 return scoped_ptr<DeclarativeContentPageUrlPredicate>(); | 51 return std::unique_ptr<DeclarativeContentPageUrlPredicate>(); |
51 return make_scoped_ptr( | 52 return base::WrapUnique(new DeclarativeContentPageUrlPredicate( |
52 new DeclarativeContentPageUrlPredicate(evaluator, | 53 evaluator, url_matcher_condition_set)); |
53 url_matcher_condition_set)); | |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 ContentPredicateEvaluator* | 57 ContentPredicateEvaluator* |
58 DeclarativeContentPageUrlPredicate::GetEvaluator() const { | 58 DeclarativeContentPageUrlPredicate::GetEvaluator() const { |
59 return evaluator_; | 59 return evaluator_; |
60 } | 60 } |
61 | 61 |
62 DeclarativeContentPageUrlPredicate::DeclarativeContentPageUrlPredicate( | 62 DeclarativeContentPageUrlPredicate::DeclarativeContentPageUrlPredicate( |
63 ContentPredicateEvaluator* evaluator, | 63 ContentPredicateEvaluator* evaluator, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 | 113 |
114 DeclarativeContentPageUrlConditionTracker:: | 114 DeclarativeContentPageUrlConditionTracker:: |
115 ~DeclarativeContentPageUrlConditionTracker() { | 115 ~DeclarativeContentPageUrlConditionTracker() { |
116 } | 116 } |
117 | 117 |
118 std::string DeclarativeContentPageUrlConditionTracker:: | 118 std::string DeclarativeContentPageUrlConditionTracker:: |
119 GetPredicateApiAttributeName() const { | 119 GetPredicateApiAttributeName() const { |
120 return declarative_content_constants::kPageUrl; | 120 return declarative_content_constants::kPageUrl; |
121 } | 121 } |
122 | 122 |
123 scoped_ptr<const ContentPredicate> DeclarativeContentPageUrlConditionTracker:: | 123 std::unique_ptr<const ContentPredicate> |
124 CreatePredicate(const Extension* extension, | 124 DeclarativeContentPageUrlConditionTracker::CreatePredicate( |
125 const base::Value& value, | 125 const Extension* extension, |
126 std::string* error) { | 126 const base::Value& value, |
| 127 std::string* error) { |
127 return DeclarativeContentPageUrlPredicate::Create(this, | 128 return DeclarativeContentPageUrlPredicate::Create(this, |
128 url_matcher_.condition_factory(), value, error); | 129 url_matcher_.condition_factory(), value, error); |
129 } | 130 } |
130 | 131 |
131 void DeclarativeContentPageUrlConditionTracker::TrackPredicates( | 132 void DeclarativeContentPageUrlConditionTracker::TrackPredicates( |
132 const std::map<const void*, std::vector<const ContentPredicate*>>& | 133 const std::map<const void*, std::vector<const ContentPredicate*>>& |
133 predicates) { | 134 predicates) { |
134 if (predicates.empty()) { | 135 if (predicates.empty()) { |
135 // Clean up temporary condition sets created during rule creation. | 136 // Clean up temporary condition sets created during rule creation. |
136 url_matcher_.ClearUnusedConditionSets(); | 137 url_matcher_.ClearUnusedConditionSets(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 DCHECK(ContainsKey(per_web_contents_tracker_, contents)); | 221 DCHECK(ContainsKey(per_web_contents_tracker_, contents)); |
221 per_web_contents_tracker_.erase(contents); | 222 per_web_contents_tracker_.erase(contents); |
222 } | 223 } |
223 | 224 |
224 void DeclarativeContentPageUrlConditionTracker::UpdateMatchesForAllTrackers() { | 225 void DeclarativeContentPageUrlConditionTracker::UpdateMatchesForAllTrackers() { |
225 for (const auto& web_contents_tracker_pair : per_web_contents_tracker_) | 226 for (const auto& web_contents_tracker_pair : per_web_contents_tracker_) |
226 web_contents_tracker_pair.second->UpdateMatchesForCurrentUrl(false); | 227 web_contents_tracker_pair.second->UpdateMatchesForCurrentUrl(false); |
227 } | 228 } |
228 | 229 |
229 } // namespace extensions | 230 } // namespace extensions |
OLD | NEW |