OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/content_condition.h" | 5 #include "chrome/browser/extensions/api/declarative_content/content_condition.h" |
6 | 6 |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "chrome/browser/extensions/api/declarative_content/content_constants.h" | 9 #include "chrome/browser/extensions/api/declarative_content/content_constants.h" |
10 #include "extensions/common/matcher/url_matcher_factory.h" | 10 #include "extensions/common/matcher/url_matcher_factory.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 } | 62 } |
63 | 63 |
64 // static | 64 // static |
65 scoped_ptr<ContentCondition> ContentCondition::Create( | 65 scoped_ptr<ContentCondition> ContentCondition::Create( |
66 URLMatcherConditionFactory* url_matcher_condition_factory, | 66 URLMatcherConditionFactory* url_matcher_condition_factory, |
67 const base::Value& condition, | 67 const base::Value& condition, |
68 std::string* error) { | 68 std::string* error) { |
69 const base::DictionaryValue* condition_dict = NULL; | 69 const base::DictionaryValue* condition_dict = NULL; |
70 if (!condition.GetAsDictionary(&condition_dict)) { | 70 if (!condition.GetAsDictionary(&condition_dict)) { |
71 *error = kExpectedDictionary; | 71 *error = kExpectedDictionary; |
72 return scoped_ptr<ContentCondition>(NULL); | 72 return scoped_ptr<ContentCondition>(); |
73 } | 73 } |
74 | 74 |
75 // Verify that we are dealing with a Condition whose type we understand. | 75 // Verify that we are dealing with a Condition whose type we understand. |
76 std::string instance_type; | 76 std::string instance_type; |
77 if (!condition_dict->GetString(keys::kInstanceType, &instance_type)) { | 77 if (!condition_dict->GetString(keys::kInstanceType, &instance_type)) { |
78 *error = kConditionWithoutInstanceType; | 78 *error = kConditionWithoutInstanceType; |
79 return scoped_ptr<ContentCondition>(NULL); | 79 return scoped_ptr<ContentCondition>(); |
80 } | 80 } |
81 if (instance_type != keys::kPageStateMatcherType) { | 81 if (instance_type != keys::kPageStateMatcherType) { |
82 *error = kExpectedOtherConditionType; | 82 *error = kExpectedOtherConditionType; |
83 return scoped_ptr<ContentCondition>(NULL); | 83 return scoped_ptr<ContentCondition>(); |
84 } | 84 } |
85 | 85 |
86 scoped_refptr<URLMatcherConditionSet> url_matcher_condition_set; | 86 scoped_refptr<URLMatcherConditionSet> url_matcher_condition_set; |
87 std::vector<std::string> css_rules; | 87 std::vector<std::string> css_rules; |
88 | 88 |
89 for (base::DictionaryValue::Iterator iter(*condition_dict); | 89 for (base::DictionaryValue::Iterator iter(*condition_dict); |
90 !iter.IsAtEnd(); iter.Advance()) { | 90 !iter.IsAtEnd(); iter.Advance()) { |
91 const std::string& condition_attribute_name = iter.key(); | 91 const std::string& condition_attribute_name = iter.key(); |
92 const Value& condition_attribute_value = iter.value(); | 92 const Value& condition_attribute_value = iter.value(); |
93 if (condition_attribute_name == keys::kInstanceType) { | 93 if (condition_attribute_name == keys::kInstanceType) { |
(...skipping 22 matching lines...) Expand all Loading... |
116 } | 116 } |
117 } else { | 117 } else { |
118 *error = base::StringPrintf(kInvalidTypeOfParamter, | 118 *error = base::StringPrintf(kInvalidTypeOfParamter, |
119 condition_attribute_name.c_str()); | 119 condition_attribute_name.c_str()); |
120 } | 120 } |
121 } else { | 121 } else { |
122 *error = base::StringPrintf(kUnknownConditionAttribute, | 122 *error = base::StringPrintf(kUnknownConditionAttribute, |
123 condition_attribute_name.c_str()); | 123 condition_attribute_name.c_str()); |
124 } | 124 } |
125 if (!error->empty()) | 125 if (!error->empty()) |
126 return scoped_ptr<ContentCondition>(NULL); | 126 return scoped_ptr<ContentCondition>(); |
127 } | 127 } |
128 | 128 |
129 if (!url_matcher_condition_set.get()) { | 129 if (!url_matcher_condition_set.get()) { |
130 URLMatcherConditionSet::Conditions url_matcher_conditions; | 130 URLMatcherConditionSet::Conditions url_matcher_conditions; |
131 url_matcher_conditions.insert( | 131 url_matcher_conditions.insert( |
132 url_matcher_condition_factory->CreateHostPrefixCondition( | 132 url_matcher_condition_factory->CreateHostPrefixCondition( |
133 std::string())); | 133 std::string())); |
134 url_matcher_condition_set = | 134 url_matcher_condition_set = |
135 new URLMatcherConditionSet(++g_next_id, url_matcher_conditions); | 135 new URLMatcherConditionSet(++g_next_id, url_matcher_conditions); |
136 } | 136 } |
137 return scoped_ptr<ContentCondition>( | 137 return scoped_ptr<ContentCondition>( |
138 new ContentCondition(url_matcher_condition_set, css_rules)); | 138 new ContentCondition(url_matcher_condition_set, css_rules)); |
139 } | 139 } |
140 | 140 |
141 } // namespace extensions | 141 } // namespace extensions |
OLD | NEW |