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

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

Issue 10025007: Convert tabs, windows, and extension APIs to feature system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: blah Created 8 years, 8 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
« no previous file with comments | « chrome/common/extensions/feature.h ('k') | chrome/common/extensions/feature_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/common/extensions/feature.h" 5 #include "chrome/common/extensions/feature.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 13
14 namespace extensions {
15
14 namespace { 16 namespace {
15 17
16 struct Mappings { 18 struct Mappings {
17 Mappings() { 19 Mappings() {
18 extension_types["extension"] = Extension::TYPE_EXTENSION; 20 extension_types["extension"] = Extension::TYPE_EXTENSION;
19 extension_types["theme"] = Extension::TYPE_THEME; 21 extension_types["theme"] = Extension::TYPE_THEME;
20 extension_types["packaged_app"] = Extension::TYPE_PACKAGED_APP; 22 extension_types["packaged_app"] = Extension::TYPE_PACKAGED_APP;
21 extension_types["hosted_app"] = Extension::TYPE_HOSTED_APP; 23 extension_types["hosted_app"] = Extension::TYPE_HOSTED_APP;
22 extension_types["platform_app"] = Extension::TYPE_PLATFORM_APP; 24 extension_types["platform_app"] = Extension::TYPE_PLATFORM_APP;
23 25
(...skipping 13 matching lines...) Expand all
37 std::map<std::string, extensions::Feature::Context> contexts; 39 std::map<std::string, extensions::Feature::Context> contexts;
38 std::map<std::string, extensions::Feature::Location> locations; 40 std::map<std::string, extensions::Feature::Location> locations;
39 std::map<std::string, extensions::Feature::Platform> platforms; 41 std::map<std::string, extensions::Feature::Platform> platforms;
40 }; 42 };
41 43
42 static base::LazyInstance<Mappings> g_mappings = 44 static base::LazyInstance<Mappings> g_mappings =
43 LAZY_INSTANCE_INITIALIZER; 45 LAZY_INSTANCE_INITIALIZER;
44 46
45 // TODO(aa): Can we replace all this manual parsing with JSON schema stuff? 47 // TODO(aa): Can we replace all this manual parsing with JSON schema stuff?
46 48
47 void ParseSet(const DictionaryValue* value, 49 void ParseSetImpl(const DictionaryValue* value,
48 const std::string& property, 50 const std::string& property,
49 std::set<std::string>* set) { 51 std::set<std::string>* set) {
50 ListValue* list_value = NULL; 52 ListValue* list_value = NULL;
51 if (!value->GetList(property, &list_value)) 53 if (!value->GetList(property, &list_value))
52 return; 54 return;
53 55
54 set->clear(); 56 set->clear();
55 for (size_t i = 0; i < list_value->GetSize(); ++i) { 57 for (size_t i = 0; i < list_value->GetSize(); ++i) {
56 std::string str_val; 58 std::string str_val;
57 CHECK(list_value->GetString(i, &str_val)) << property << " " << i; 59 CHECK(list_value->GetString(i, &str_val)) << property << " " << i;
58 set->insert(str_val); 60 set->insert(str_val);
59 } 61 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 if (property_string == "all") { 98 if (property_string == "all") {
97 for (typename std::map<std::string, T>::const_iterator j = 99 for (typename std::map<std::string, T>::const_iterator j =
98 mapping.begin(); j != mapping.end(); ++j) { 100 mapping.begin(); j != mapping.end(); ++j) {
99 enum_set->insert(j->second); 101 enum_set->insert(j->second);
100 } 102 }
101 } 103 }
102 return; 104 return;
103 } 105 }
104 106
105 std::set<std::string> string_set; 107 std::set<std::string> string_set;
106 ParseSet(value, property, &string_set); 108 ParseSetImpl(value, property, &string_set);
107 for (std::set<std::string>::iterator iter = string_set.begin(); 109 for (std::set<std::string>::iterator iter = string_set.begin();
108 iter != string_set.end(); ++iter) { 110 iter != string_set.end(); ++iter) {
109 T enum_value = static_cast<T>(0); 111 T enum_value = static_cast<T>(0);
110 ParseEnum(*iter, &enum_value, mapping); 112 ParseEnum(*iter, &enum_value, mapping);
111 enum_set->insert(enum_value); 113 enum_set->insert(enum_value);
112 } 114 }
113 } 115 }
114 116
115 } // namespace 117 } // namespace
116 118
117 namespace extensions {
118
119 Feature::Feature() 119 Feature::Feature()
120 : location_(UNSPECIFIED_LOCATION), 120 : location_(UNSPECIFIED_LOCATION),
121 platform_(UNSPECIFIED_PLATFORM), 121 platform_(UNSPECIFIED_PLATFORM),
122 min_manifest_version_(0), 122 min_manifest_version_(0),
123 max_manifest_version_(0) { 123 max_manifest_version_(0) {
124 } 124 }
125 125
126 Feature::Feature(const Feature& other) 126 Feature::Feature(const Feature& other)
127 : whitelist_(other.whitelist_), 127 : name_(other.name_),
128 whitelist_(other.whitelist_),
128 extension_types_(other.extension_types_), 129 extension_types_(other.extension_types_),
129 contexts_(other.contexts_), 130 contexts_(other.contexts_),
130 location_(other.location_), 131 location_(other.location_),
131 platform_(other.platform_), 132 platform_(other.platform_),
132 min_manifest_version_(other.min_manifest_version_), 133 min_manifest_version_(other.min_manifest_version_),
133 max_manifest_version_(other.max_manifest_version_) { 134 max_manifest_version_(other.max_manifest_version_) {
134 } 135 }
135 136
136 Feature::~Feature() { 137 Feature::~Feature() {
137 } 138 }
138 139
139 bool Feature::Equals(const Feature& other) const { 140 bool Feature::Equals(const Feature& other) const {
140 return whitelist_ == other.whitelist_ && 141 return name_ == other.name_ &&
142 whitelist_ == other.whitelist_ &&
141 extension_types_ == other.extension_types_ && 143 extension_types_ == other.extension_types_ &&
142 contexts_ == other.contexts_ && 144 contexts_ == other.contexts_ &&
143 location_ == other.location_ && 145 location_ == other.location_ &&
144 platform_ == other.platform_ && 146 platform_ == other.platform_ &&
145 min_manifest_version_ == other.min_manifest_version_ && 147 min_manifest_version_ == other.min_manifest_version_ &&
146 max_manifest_version_ == other.max_manifest_version_; 148 max_manifest_version_ == other.max_manifest_version_;
147 } 149 }
148 150
151 bool Feature::IsEmpty() const {
152 Feature test;
153 test.set_name(name());
154 return Equals(test);
155 }
156
149 // static 157 // static
150 Feature::Platform Feature::GetCurrentPlatform() { 158 Feature::Platform Feature::GetCurrentPlatform() {
151 #if defined(OS_CHROMEOS) 159 #if defined(OS_CHROMEOS)
152 return CHROMEOS_PLATFORM; 160 return CHROMEOS_PLATFORM;
153 #else 161 #else
154 return UNSPECIFIED_PLATFORM; 162 return UNSPECIFIED_PLATFORM;
155 #endif 163 #endif
156 } 164 }
157 165
158 // static 166 // static
159 Feature::Location Feature::ConvertLocation(Extension::Location location) { 167 Feature::Location Feature::ConvertLocation(Extension::Location location) {
160 if (location == Extension::COMPONENT) 168 if (location == Extension::COMPONENT)
161 return COMPONENT_LOCATION; 169 return COMPONENT_LOCATION;
162 else 170 else
163 return UNSPECIFIED_LOCATION; 171 return UNSPECIFIED_LOCATION;
164 } 172 }
165 173
174 // static
175 void Feature::ParseSet(const DictionaryValue* value,
176 const std::string& property,
177 std::set<std::string>* set) {
178 ParseSetImpl(value, property, set);
179 }
180
166 void Feature::Parse(const DictionaryValue* value) { 181 void Feature::Parse(const DictionaryValue* value) {
167 ParseSet(value, "whitelist", &whitelist_); 182 ParseSetImpl(value, "whitelist", &whitelist_);
168 ParseEnumSet<Extension::Type>(value, "extension_types", &extension_types_, 183 ParseEnumSet<Extension::Type>(value, "extension_types", &extension_types_,
169 g_mappings.Get().extension_types); 184 g_mappings.Get().extension_types);
170 ParseEnumSet<Context>(value, "contexts", &contexts_, 185 ParseEnumSet<Context>(value, "contexts", &contexts_,
171 g_mappings.Get().contexts); 186 g_mappings.Get().contexts);
172 ParseEnum<Location>(value, "location", &location_, 187 ParseEnum<Location>(value, "location", &location_,
173 g_mappings.Get().locations); 188 g_mappings.Get().locations);
174 ParseEnum<Platform>(value, "platform", &platform_, 189 ParseEnum<Platform>(value, "platform", &platform_,
175 g_mappings.Get().platforms); 190 g_mappings.Get().platforms);
176 value->GetInteger("min_manifest_version", &min_manifest_version_); 191 value->GetInteger("min_manifest_version", &min_manifest_version_);
177 value->GetInteger("max_manifest_version", &max_manifest_version_); 192 value->GetInteger("max_manifest_version", &max_manifest_version_);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 280
266 if (!contexts_.empty() && 281 if (!contexts_.empty() &&
267 contexts_.find(context) == contexts_.end()) { 282 contexts_.find(context) == contexts_.end()) {
268 return INVALID_CONTEXT; 283 return INVALID_CONTEXT;
269 } 284 }
270 285
271 return IS_AVAILABLE; 286 return IS_AVAILABLE;
272 } 287 }
273 288
274 } // namespace 289 } // namespace
OLDNEW
« no previous file with comments | « chrome/common/extensions/feature.h ('k') | chrome/common/extensions/feature_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698