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

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

Issue 9950046: Implement FeatureProvider for ExtensionAPI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
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 "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 using extensions::Feature; 9 using extensions::Feature;
10 10
11 namespace { 11 namespace {
12 12
13 struct IsAvailableTestData { 13 struct IsAvailableTestData {
14 std::string extension_id; 14 std::string extension_id;
15 Extension::Type extension_type; 15 Extension::Type extension_type;
16 Feature::Context context;
17 Feature::Location location; 16 Feature::Location location;
18 Feature::Platform platform; 17 Feature::Platform platform;
19 int manifest_version; 18 int manifest_version;
20 Feature::Availability expected_result; 19 Feature::Availability expected_result;
21 }; 20 };
22 21
23 } // namespace 22 } // namespace
24 23
25 TEST(ExtensionFeatureTest, IsAvailableNullCase) { 24 TEST(ExtensionFeatureTest, IsAvailableNullCase) {
26 const IsAvailableTestData tests[] = { 25 const IsAvailableTestData tests[] = {
27 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT, 26 { "", Extension::TYPE_UNKNOWN,
28 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 27 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
29 Feature::IS_AVAILABLE }, 28 Feature::IS_AVAILABLE },
30 { "random-extension", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT, 29 { "random-extension", Extension::TYPE_UNKNOWN,
31 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 30 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
32 Feature::IS_AVAILABLE }, 31 Feature::IS_AVAILABLE },
33 { "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_CONTEXT, 32 { "", Extension::TYPE_PACKAGED_APP,
34 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 33 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
35 Feature::IS_AVAILABLE }, 34 Feature::IS_AVAILABLE },
36 { "", Extension::TYPE_UNKNOWN, Feature::BLESSED_EXTENSION_CONTEXT, 35 { "", Extension::TYPE_UNKNOWN,
37 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 36 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
38 Feature::IS_AVAILABLE }, 37 Feature::IS_AVAILABLE },
39 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT, 38 { "", Extension::TYPE_UNKNOWN,
40 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 39 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
41 Feature::IS_AVAILABLE }, 40 Feature::IS_AVAILABLE },
42 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT, 41 { "", Extension::TYPE_UNKNOWN,
43 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, 42 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1,
44 Feature::IS_AVAILABLE }, 43 Feature::IS_AVAILABLE },
45 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT, 44 { "", Extension::TYPE_UNKNOWN,
46 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, 45 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25,
47 Feature::IS_AVAILABLE } 46 Feature::IS_AVAILABLE }
48 }; 47 };
49 48
50 Feature feature; 49 Feature feature;
51 for (size_t i = 0; i < arraysize(tests); ++i) { 50 for (size_t i = 0; i < arraysize(tests); ++i) {
52 const IsAvailableTestData& test = tests[i]; 51 const IsAvailableTestData& test = tests[i];
53 EXPECT_EQ(test.expected_result, 52 EXPECT_EQ(test.expected_result,
54 feature.IsAvailable(test.extension_id, test.extension_type, 53 feature.IsAvailableToManifest(test.extension_id,
55 test.location, test.context, test.platform, 54 test.extension_type,
56 test.manifest_version)); 55 test.location,
56 test.manifest_version,
57 test.platform));
57 } 58 }
58 } 59 }
59 60
60 TEST(ExtensionFeatureTest, Whitelist) { 61 TEST(ExtensionFeatureTest, Whitelist) {
61 Feature feature; 62 Feature feature;
62 feature.whitelist()->insert("foo"); 63 feature.whitelist()->insert("foo");
63 feature.whitelist()->insert("bar"); 64 feature.whitelist()->insert("bar");
64 65
65 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 66 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
66 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 67 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
67 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 68 Feature::UNSPECIFIED_PLATFORM));
68 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 69 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
69 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 70 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
70 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 71 Feature::UNSPECIFIED_PLATFORM));
71 72
72 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable( 73 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
73 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 74 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
74 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 75 Feature::UNSPECIFIED_PLATFORM));
75 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable( 76 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
76 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 77 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
77 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 78 Feature::UNSPECIFIED_PLATFORM));
78 79
79 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP); 80 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
80 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable( 81 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
81 "baz", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, 82 "baz", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, -1,
82 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 83 Feature::UNSPECIFIED_PLATFORM));
83 } 84 }
84 85
85 TEST(ExtensionFeatureTest, PackageType) { 86 TEST(ExtensionFeatureTest, PackageType) {
86 Feature feature; 87 Feature feature;
87 feature.extension_types()->insert(Extension::TYPE_EXTENSION); 88 feature.extension_types()->insert(Extension::TYPE_EXTENSION);
88 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP); 89 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
89 90
90 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 91 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
91 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, 92 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1,
92 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 93 Feature::UNSPECIFIED_PLATFORM));
93 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 94 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
94 "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, 95 "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, -1,
95 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 96 Feature::UNSPECIFIED_PLATFORM));
96 97
97 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailable( 98 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest(
98 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 99 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
99 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 100 Feature::UNSPECIFIED_PLATFORM));
100 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailable( 101 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest(
101 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, 102 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1,
102 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 103 Feature::UNSPECIFIED_PLATFORM));
103 } 104 }
104 105
105 TEST(ExtensionFeatureTest, Context) { 106 TEST(ExtensionFeatureTest, Context) {
106 Feature feature; 107 Feature feature;
107 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 108 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
108 feature.contexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT); 109 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
110 feature.set_platform(Feature::CHROMEOS_PLATFORM);
111 feature.set_min_manifest_version(21);
112 feature.set_max_manifest_version(25);
109 113
110 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 114 DictionaryValue manifest;
111 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 115 manifest.SetString("name", "test");
112 Feature::BLESSED_EXTENSION_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 116 manifest.SetString("version", "1");
113 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 117 manifest.SetInteger("manifest_version", 21);
114 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 118 manifest.SetString("app.launch.local_path", "foo.html");
115 Feature::CONTENT_SCRIPT_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
116 119
117 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailable( 120 std::string error;
118 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 121 scoped_refptr<const Extension> extension(Extension::Create(
119 Feature::UNBLESSED_EXTENSION_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 122 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS, &error));
120 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailable( 123 EXPECT_EQ("", error);
121 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 124 ASSERT_TRUE(extension.get());
122 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 125
126 feature.whitelist()->insert("monkey");
127 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext(
128 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
129 Feature::CHROMEOS_PLATFORM));
130 feature.whitelist()->clear();
131
132 feature.extension_types()->clear();
133 feature.extension_types()->insert(Extension::TYPE_THEME);
134 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToContext(
135 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
136 Feature::CHROMEOS_PLATFORM));
137 feature.extension_types()->clear();
138 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
139
140 feature.contexts()->clear();
141 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
142 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailableToContext(
143 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
144 Feature::CHROMEOS_PLATFORM));
145 feature.contexts()->clear();
146 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
147
148 feature.set_location(Feature::COMPONENT_LOCATION);
149 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext(
150 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
151 Feature::CHROMEOS_PLATFORM));
152 feature.set_location(Feature::UNSPECIFIED_LOCATION);
153
154 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext(
155 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT));
156
157 feature.set_min_manifest_version(22);
158 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext(
159 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
160 Feature::CHROMEOS_PLATFORM));
161 feature.set_min_manifest_version(21);
162
163 feature.set_max_manifest_version(18);
164 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext(
165 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
166 Feature::CHROMEOS_PLATFORM));
167 feature.set_max_manifest_version(25);
123 } 168 }
124 169
125 TEST(ExtensionFeatureTest, Location) { 170 TEST(ExtensionFeatureTest, Location) {
126 Feature feature; 171 Feature feature;
127 172
128 // If the feature specifies "component" as its location, then only component 173 // If the feature specifies "component" as its location, then only component
129 // extensions can access it. 174 // extensions can access it.
130 feature.set_location(Feature::COMPONENT_LOCATION); 175 feature.set_location(Feature::COMPONENT_LOCATION);
131 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 176 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
132 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, 177 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
133 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 178 Feature::UNSPECIFIED_PLATFORM));
134 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailable( 179 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest(
135 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 180 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
136 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 181 Feature::UNSPECIFIED_PLATFORM));
137 182
138 // But component extensions can access anything else, whatever their location. 183 // But component extensions can access anything else, whatever their location.
139 feature.set_location(Feature::UNSPECIFIED_LOCATION); 184 feature.set_location(Feature::UNSPECIFIED_LOCATION);
140 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 185 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
141 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, 186 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
142 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 187 Feature::UNSPECIFIED_PLATFORM));
143 } 188 }
144 189
145 TEST(ExtensionFeatureTest, Platform) { 190 TEST(ExtensionFeatureTest, Platform) {
146 Feature feature; 191 Feature feature;
147 feature.set_platform(Feature::CHROMEOS_PLATFORM); 192 feature.set_platform(Feature::CHROMEOS_PLATFORM);
148 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 193 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
149 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 194 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
150 Feature::UNSPECIFIED_CONTEXT, Feature::CHROMEOS_PLATFORM, -1)); 195 Feature::CHROMEOS_PLATFORM));
151 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailable( 196 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest(
152 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 197 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
153 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 198 Feature::UNSPECIFIED_PLATFORM));
154 } 199 }
155 200
156 TEST(ExtensionFeatureTest, Version) { 201 TEST(ExtensionFeatureTest, Version) {
157 Feature feature; 202 Feature feature;
158 feature.set_min_manifest_version(5); 203 feature.set_min_manifest_version(5);
159 204
160 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable( 205 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
206 feature.IsAvailableToManifest(
207 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
208 0, Feature::UNSPECIFIED_PLATFORM));
209 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
210 feature.IsAvailableToManifest(
211 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
212 4, Feature::UNSPECIFIED_PLATFORM));
213
214 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
161 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 215 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
162 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 0)); 216 5, Feature::UNSPECIFIED_PLATFORM));
163 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable( 217 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
164 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 218 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
165 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 4)); 219 10, Feature::UNSPECIFIED_PLATFORM));
166
167 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
168 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
169 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 5));
170 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
171 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
172 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 10));
173 220
174 feature.set_max_manifest_version(8); 221 feature.set_max_manifest_version(8);
175 222
176 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailable( 223 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION,
224 feature.IsAvailableToManifest(
225 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
226 10, Feature::UNSPECIFIED_PLATFORM));
227 EXPECT_EQ(Feature::IS_AVAILABLE,
228 feature.IsAvailableToManifest(
229 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
230 8, Feature::UNSPECIFIED_PLATFORM));
231 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
177 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 232 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
178 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 10)); 233 7, Feature::UNSPECIFIED_PLATFORM));
179 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
180 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
181 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 8));
182 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
183 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
184 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 7));
185 } 234 }
186 235
187 TEST(ExtensionFeatureTest, ParseNull) { 236 TEST(ExtensionFeatureTest, ParseNull) {
188 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 237 scoped_ptr<DictionaryValue> value(new DictionaryValue());
189 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 238 scoped_ptr<Feature> feature(new Feature());
239 feature->Parse(value.get());
190 EXPECT_TRUE(feature->whitelist()->empty()); 240 EXPECT_TRUE(feature->whitelist()->empty());
191 EXPECT_TRUE(feature->extension_types()->empty()); 241 EXPECT_TRUE(feature->extension_types()->empty());
192 EXPECT_TRUE(feature->contexts()->empty()); 242 EXPECT_TRUE(feature->contexts()->empty());
193 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); 243 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
194 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); 244 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform());
195 EXPECT_EQ(0, feature->min_manifest_version()); 245 EXPECT_EQ(0, feature->min_manifest_version());
196 EXPECT_EQ(0, feature->max_manifest_version()); 246 EXPECT_EQ(0, feature->max_manifest_version());
197 } 247 }
198 248
199 TEST(ExtensionFeatureTest, ParseWhitelist) { 249 TEST(ExtensionFeatureTest, ParseWhitelist) {
200 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 250 scoped_ptr<DictionaryValue> value(new DictionaryValue());
201 ListValue* whitelist = new ListValue(); 251 ListValue* whitelist = new ListValue();
202 whitelist->Append(Value::CreateStringValue("foo")); 252 whitelist->Append(Value::CreateStringValue("foo"));
203 whitelist->Append(Value::CreateStringValue("bar")); 253 whitelist->Append(Value::CreateStringValue("bar"));
204 value->Set("whitelist", whitelist); 254 value->Set("whitelist", whitelist);
205 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 255 scoped_ptr<Feature> feature(new Feature());
256 feature->Parse(value.get());
206 EXPECT_EQ(2u, feature->whitelist()->size()); 257 EXPECT_EQ(2u, feature->whitelist()->size());
207 EXPECT_TRUE(feature->whitelist()->count("foo")); 258 EXPECT_TRUE(feature->whitelist()->count("foo"));
208 EXPECT_TRUE(feature->whitelist()->count("bar")); 259 EXPECT_TRUE(feature->whitelist()->count("bar"));
209 } 260 }
210 261
211 TEST(ExtensionFeatureTest, ParsePackageTypes) { 262 TEST(ExtensionFeatureTest, ParsePackageTypes) {
212 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 263 scoped_ptr<DictionaryValue> value(new DictionaryValue());
213 ListValue* extension_types = new ListValue(); 264 ListValue* extension_types = new ListValue();
214 extension_types->Append(Value::CreateStringValue("extension")); 265 extension_types->Append(Value::CreateStringValue("extension"));
215 extension_types->Append(Value::CreateStringValue("theme")); 266 extension_types->Append(Value::CreateStringValue("theme"));
216 extension_types->Append(Value::CreateStringValue("packaged_app")); 267 extension_types->Append(Value::CreateStringValue("packaged_app"));
217 extension_types->Append(Value::CreateStringValue("hosted_app")); 268 extension_types->Append(Value::CreateStringValue("hosted_app"));
218 extension_types->Append(Value::CreateStringValue("platform_app")); 269 extension_types->Append(Value::CreateStringValue("platform_app"));
219 value->Set("extension_types", extension_types); 270 value->Set("extension_types", extension_types);
220 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 271 scoped_ptr<Feature> feature(new Feature());
272 feature->Parse(value.get());
221 EXPECT_EQ(5u, feature->extension_types()->size()); 273 EXPECT_EQ(5u, feature->extension_types()->size());
222 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); 274 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION));
223 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); 275 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME));
224 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP)); 276 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP));
225 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); 277 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP));
226 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); 278 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
227 279
228 value->SetString("extension_types", "all"); 280 value->SetString("extension_types", "all");
229 scoped_ptr<Feature> feature2(Feature::Parse(value.get())); 281 scoped_ptr<Feature> feature2(new Feature());
282 feature2->Parse(value.get());
230 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); 283 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types()));
231 } 284 }
232 285
233 TEST(ExtensionFeatureTest, ParseContexts) { 286 TEST(ExtensionFeatureTest, ParseContexts) {
234 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 287 scoped_ptr<DictionaryValue> value(new DictionaryValue());
235 ListValue* contexts = new ListValue(); 288 ListValue* contexts = new ListValue();
236 contexts->Append(Value::CreateStringValue("blessed_extension")); 289 contexts->Append(Value::CreateStringValue("blessed_extension"));
237 contexts->Append(Value::CreateStringValue("unblessed_extension")); 290 contexts->Append(Value::CreateStringValue("unblessed_extension"));
238 contexts->Append(Value::CreateStringValue("content_script")); 291 contexts->Append(Value::CreateStringValue("content_script"));
239 contexts->Append(Value::CreateStringValue("web_page")); 292 contexts->Append(Value::CreateStringValue("web_page"));
240 value->Set("contexts", contexts); 293 value->Set("contexts", contexts);
241 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 294 scoped_ptr<Feature> feature(new Feature());
295 feature->Parse(value.get());
242 EXPECT_EQ(4u, feature->contexts()->size()); 296 EXPECT_EQ(4u, feature->contexts()->size());
243 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); 297 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT));
244 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 298 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
245 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); 299 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT));
246 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); 300 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT));
247 301
248 value->SetString("contexts", "all"); 302 value->SetString("contexts", "all");
249 scoped_ptr<Feature> feature2(Feature::Parse(value.get())); 303 scoped_ptr<Feature> feature2(new Feature());
304 feature2->Parse(value.get());
250 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); 305 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts()));
251 } 306 }
252 307
253 TEST(ExtensionFeatureTest, ParseLocation) { 308 TEST(ExtensionFeatureTest, ParseLocation) {
254 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 309 scoped_ptr<DictionaryValue> value(new DictionaryValue());
255 value->SetString("location", "component"); 310 value->SetString("location", "component");
256 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 311 scoped_ptr<Feature> feature(new Feature());
312 feature->Parse(value.get());
257 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); 313 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location());
258 } 314 }
259 315
260 TEST(ExtensionFeatureTest, ParsePlatform) { 316 TEST(ExtensionFeatureTest, ParsePlatform) {
261 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 317 scoped_ptr<DictionaryValue> value(new DictionaryValue());
262 value->SetString("platform", "chromeos"); 318 value->SetString("platform", "chromeos");
263 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 319 scoped_ptr<Feature> feature(new Feature());
320 feature->Parse(value.get());
264 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); 321 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform());
265 } 322 }
266 323
267 TEST(ExtensionFeatureTest, ManifestVersion) { 324 TEST(ExtensionFeatureTest, ManifestVersion) {
268 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 325 scoped_ptr<DictionaryValue> value(new DictionaryValue());
269 value->SetInteger("min_manifest_version", 1); 326 value->SetInteger("min_manifest_version", 1);
270 value->SetInteger("max_manifest_version", 5); 327 value->SetInteger("max_manifest_version", 5);
271 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 328 scoped_ptr<Feature> feature(new Feature());
329 feature->Parse(value.get());
272 EXPECT_EQ(1, feature->min_manifest_version()); 330 EXPECT_EQ(1, feature->min_manifest_version());
273 EXPECT_EQ(5, feature->max_manifest_version()); 331 EXPECT_EQ(5, feature->max_manifest_version());
274 } 332 }
333
334 TEST(ExtensionFeatureTest, ParseLeavesExistingValues) {
335 Feature feature;
336 feature.whitelist()->insert("foo");
337 feature.extension_types()->insert(Extension::TYPE_THEME);
338 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
339 feature.set_location(Feature::COMPONENT_LOCATION);
340 feature.set_platform(Feature::CHROMEOS_PLATFORM);
341 feature.set_min_manifest_version(4);
342 feature.set_min_manifest_version(2);
343
344 Feature feature2 = feature;
345 EXPECT_TRUE(feature2.Equals(feature));
346
347 DictionaryValue definition;
348 feature2.Parse(&definition);
349 EXPECT_TRUE(feature2.Equals(feature));
koz (OOO until 15th September) 2012/04/02 06:39:48 Could you add a test for what happens when a dicti
Aaron Boodman 2012/04/02 08:21:54 Done.
350 }
351
352 TEST(ExtensionFeatureTest, Equals) {
353 Feature feature;
354 feature.whitelist()->insert("foo");
355 feature.extension_types()->insert(Extension::TYPE_THEME);
356 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
357 feature.set_location(Feature::COMPONENT_LOCATION);
358 feature.set_platform(Feature::CHROMEOS_PLATFORM);
359 feature.set_min_manifest_version(18);
360 feature.set_max_manifest_version(25);
361
362 Feature feature2(feature);
363 EXPECT_TRUE(feature2.Equals(feature));
364
365 feature2.whitelist()->clear();
366 EXPECT_FALSE(feature2.Equals(feature));
367
368 feature2 = feature;
369 feature2.extension_types()->clear();
370 EXPECT_FALSE(feature2.Equals(feature));
371
372 feature2 = feature;
373 feature2.contexts()->clear();
374 EXPECT_FALSE(feature2.Equals(feature));
375
376 feature2 = feature;
377 feature2.set_location(Feature::UNSPECIFIED_LOCATION);
378 EXPECT_FALSE(feature2.Equals(feature));
379
380 feature2 = feature;
381 feature2.set_platform(Feature::UNSPECIFIED_PLATFORM);
382 EXPECT_FALSE(feature2.Equals(feature));
383
384 feature2 = feature;
385 feature2.set_min_manifest_version(0);
386 EXPECT_FALSE(feature2.Equals(feature));
387
388 feature2 = feature;
389 feature2.set_max_manifest_version(0);
390 EXPECT_FALSE(feature2.Equals(feature));
391 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698