OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 // DeclarativeRule<>, DeclarativeConditionSet<>, and DeclarativeActionSet<> | 5 // DeclarativeRule<>, DeclarativeConditionSet<>, and DeclarativeActionSet<> |
6 // templates usable with multiple different declarativeFoo systems. These are | 6 // templates usable with multiple different declarativeFoo systems. These are |
7 // templated on the Condition and Action types that define the behavior of a | 7 // templated on the Condition and Action types that define the behavior of a |
8 // particular declarative event. | 8 // particular declarative event. |
9 | 9 |
10 #ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_DECLARATIVE_RULE_H__ | 10 #ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_DECLARATIVE_RULE_H__ |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 // // If the Condition needs to be filtered by some URLMatcherConditionSets, | 53 // // If the Condition needs to be filtered by some URLMatcherConditionSets, |
54 // // append them to |condition_sets|. | 54 // // append them to |condition_sets|. |
55 // // DeclarativeConditionSet::GetURLMatcherConditionSets forwards here. | 55 // // DeclarativeConditionSet::GetURLMatcherConditionSets forwards here. |
56 // void GetURLMatcherConditionSets( | 56 // void GetURLMatcherConditionSets( |
57 // URLMatcherConditionSet::Vector* condition_sets); | 57 // URLMatcherConditionSet::Vector* condition_sets); |
58 // // |match_data| passed through from DeclarativeConditionSet::IsFulfilled. | 58 // // |match_data| passed through from DeclarativeConditionSet::IsFulfilled. |
59 // bool IsFulfilled(const ConditionT::MatchData& match_data); | 59 // bool IsFulfilled(const ConditionT::MatchData& match_data); |
60 template<typename ConditionT> | 60 template<typename ConditionT> |
61 class DeclarativeConditionSet { | 61 class DeclarativeConditionSet { |
62 public: | 62 public: |
63 typedef std::vector<linked_ptr<base::Value>> Values; | 63 typedef std::vector<scoped_ptr<base::Value>> Values; |
64 typedef std::vector<linked_ptr<const ConditionT> > Conditions; | 64 typedef std::vector<linked_ptr<const ConditionT> > Conditions; |
65 typedef typename Conditions::const_iterator const_iterator; | 65 typedef typename Conditions::const_iterator const_iterator; |
66 | 66 |
67 // Factory method that creates a DeclarativeConditionSet for |extension| | 67 // Factory method that creates a DeclarativeConditionSet for |extension| |
68 // according to the JSON array |conditions| passed by the extension API. Sets | 68 // according to the JSON array |conditions| passed by the extension API. Sets |
69 // |error| and returns NULL in case of an error. | 69 // |error| and returns NULL in case of an error. |
70 static scoped_ptr<DeclarativeConditionSet> Create( | 70 static scoped_ptr<DeclarativeConditionSet> Create( |
71 const Extension* extension, | 71 const Extension* extension, |
72 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, | 72 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, |
73 const Values& condition_values, | 73 const Values& condition_values, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 // // Return the minimum priority of rules that can be evaluated after this | 136 // // Return the minimum priority of rules that can be evaluated after this |
137 // // action runs. A suitable default value is MIN_INT. | 137 // // action runs. A suitable default value is MIN_INT. |
138 // int minimum_priority() const; | 138 // int minimum_priority() const; |
139 // | 139 // |
140 // TODO(battre): As DeclarativeActionSet can become the single owner of all | 140 // TODO(battre): As DeclarativeActionSet can become the single owner of all |
141 // actions, we can optimize here by making some of them singletons (e.g. Cancel | 141 // actions, we can optimize here by making some of them singletons (e.g. Cancel |
142 // actions). | 142 // actions). |
143 template<typename ActionT> | 143 template<typename ActionT> |
144 class DeclarativeActionSet { | 144 class DeclarativeActionSet { |
145 public: | 145 public: |
146 typedef std::vector<linked_ptr<base::Value>> Values; | 146 typedef std::vector<scoped_ptr<base::Value>> Values; |
147 typedef std::vector<scoped_refptr<const ActionT> > Actions; | 147 typedef std::vector<scoped_refptr<const ActionT> > Actions; |
148 | 148 |
149 explicit DeclarativeActionSet(const Actions& actions); | 149 explicit DeclarativeActionSet(const Actions& actions); |
150 | 150 |
151 // Factory method that instantiates a DeclarativeActionSet for |extension| | 151 // Factory method that instantiates a DeclarativeActionSet for |extension| |
152 // according to |actions| which represents the array of actions received from | 152 // according to |actions| which represents the array of actions received from |
153 // the extension API. | 153 // the extension API. |
154 static scoped_ptr<DeclarativeActionSet> Create( | 154 static scoped_ptr<DeclarativeActionSet> Create( |
155 content::BrowserContext* browser_context, | 155 content::BrowserContext* browser_context, |
156 const Extension* extension, | 156 const Extension* extension, |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 // static | 302 // static |
303 template <typename ConditionT> | 303 template <typename ConditionT> |
304 scoped_ptr<DeclarativeConditionSet<ConditionT>> | 304 scoped_ptr<DeclarativeConditionSet<ConditionT>> |
305 DeclarativeConditionSet<ConditionT>::Create( | 305 DeclarativeConditionSet<ConditionT>::Create( |
306 const Extension* extension, | 306 const Extension* extension, |
307 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, | 307 url_matcher::URLMatcherConditionFactory* url_matcher_condition_factory, |
308 const Values& condition_values, | 308 const Values& condition_values, |
309 std::string* error) { | 309 std::string* error) { |
310 Conditions result; | 310 Conditions result; |
311 | 311 |
312 for (const linked_ptr<base::Value>& value : condition_values) { | 312 for (const scoped_ptr<base::Value>& value : condition_values) { |
313 CHECK(value.get()); | 313 CHECK(value.get()); |
314 scoped_ptr<ConditionT> condition = ConditionT::Create( | 314 scoped_ptr<ConditionT> condition = ConditionT::Create( |
315 extension, url_matcher_condition_factory, *value, error); | 315 extension, url_matcher_condition_factory, *value, error); |
316 if (!error->empty()) | 316 if (!error->empty()) |
317 return scoped_ptr<DeclarativeConditionSet>(); | 317 return scoped_ptr<DeclarativeConditionSet>(); |
318 result.push_back(make_linked_ptr(condition.release())); | 318 result.push_back(make_linked_ptr(condition.release())); |
319 } | 319 } |
320 | 320 |
321 URLMatcherIdToCondition match_id_to_condition; | 321 URLMatcherIdToCondition match_id_to_condition; |
322 std::vector<const ConditionT*> conditions_without_urls; | 322 std::vector<const ConditionT*> conditions_without_urls; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 scoped_ptr<DeclarativeActionSet<ActionT>> DeclarativeActionSet<ActionT>::Create( | 360 scoped_ptr<DeclarativeActionSet<ActionT>> DeclarativeActionSet<ActionT>::Create( |
361 content::BrowserContext* browser_context, | 361 content::BrowserContext* browser_context, |
362 const Extension* extension, | 362 const Extension* extension, |
363 const Values& action_values, | 363 const Values& action_values, |
364 std::string* error, | 364 std::string* error, |
365 bool* bad_message) { | 365 bool* bad_message) { |
366 *error = ""; | 366 *error = ""; |
367 *bad_message = false; | 367 *bad_message = false; |
368 Actions result; | 368 Actions result; |
369 | 369 |
370 for (const linked_ptr<base::Value>& value : action_values) { | 370 for (const scoped_ptr<base::Value>& value : action_values) { |
371 CHECK(value.get()); | 371 CHECK(value.get()); |
372 scoped_refptr<const ActionT> action = | 372 scoped_refptr<const ActionT> action = |
373 ActionT::Create(browser_context, extension, *value, error, bad_message); | 373 ActionT::Create(browser_context, extension, *value, error, bad_message); |
374 if (!error->empty() || *bad_message) | 374 if (!error->empty() || *bad_message) |
375 return scoped_ptr<DeclarativeActionSet>(); | 375 return scoped_ptr<DeclarativeActionSet>(); |
376 result.push_back(action); | 376 result.push_back(action); |
377 } | 377 } |
378 | 378 |
379 return scoped_ptr<DeclarativeActionSet>(new DeclarativeActionSet(result)); | 379 return scoped_ptr<DeclarativeActionSet>(new DeclarativeActionSet(result)); |
380 } | 380 } |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 } | 497 } |
498 | 498 |
499 template<typename ConditionT, typename ActionT> | 499 template<typename ConditionT, typename ActionT> |
500 int DeclarativeRule<ConditionT, ActionT>::GetMinimumPriority() const { | 500 int DeclarativeRule<ConditionT, ActionT>::GetMinimumPriority() const { |
501 return actions_->GetMinimumPriority(); | 501 return actions_->GetMinimumPriority(); |
502 } | 502 } |
503 | 503 |
504 } // namespace extensions | 504 } // namespace extensions |
505 | 505 |
506 #endif // EXTENSIONS_BROWSER_API_DECLARATIVE_DECLARATIVE_RULE_H__ | 506 #endif // EXTENSIONS_BROWSER_API_DECLARATIVE_DECLARATIVE_RULE_H__ |
OLD | NEW |