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

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

Issue 9969136: Reland r130462: Implement FeatureProvider for ExtensionAPI." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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 Feature::UNSPECIFIED_PLATFORM));
157
158 feature.set_min_manifest_version(22);
159 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext(
160 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
161 Feature::CHROMEOS_PLATFORM));
162 feature.set_min_manifest_version(21);
163
164 feature.set_max_manifest_version(18);
165 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext(
166 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
167 Feature::CHROMEOS_PLATFORM));
168 feature.set_max_manifest_version(25);
123 } 169 }
124 170
125 TEST(ExtensionFeatureTest, Location) { 171 TEST(ExtensionFeatureTest, Location) {
126 Feature feature; 172 Feature feature;
127 173
128 // If the feature specifies "component" as its location, then only component 174 // If the feature specifies "component" as its location, then only component
129 // extensions can access it. 175 // extensions can access it.
130 feature.set_location(Feature::COMPONENT_LOCATION); 176 feature.set_location(Feature::COMPONENT_LOCATION);
131 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 177 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
132 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, 178 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
133 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 179 Feature::UNSPECIFIED_PLATFORM));
134 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailable( 180 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest(
135 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 181 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
136 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 182 Feature::UNSPECIFIED_PLATFORM));
137 183
138 // But component extensions can access anything else, whatever their location. 184 // But component extensions can access anything else, whatever their location.
139 feature.set_location(Feature::UNSPECIFIED_LOCATION); 185 feature.set_location(Feature::UNSPECIFIED_LOCATION);
140 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 186 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
141 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, 187 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
142 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 188 Feature::UNSPECIFIED_PLATFORM));
143 } 189 }
144 190
145 TEST(ExtensionFeatureTest, Platform) { 191 TEST(ExtensionFeatureTest, Platform) {
146 Feature feature; 192 Feature feature;
147 feature.set_platform(Feature::CHROMEOS_PLATFORM); 193 feature.set_platform(Feature::CHROMEOS_PLATFORM);
148 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable( 194 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
149 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 195 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
150 Feature::UNSPECIFIED_CONTEXT, Feature::CHROMEOS_PLATFORM, -1)); 196 Feature::CHROMEOS_PLATFORM));
151 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailable( 197 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest(
152 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 198 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
153 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1)); 199 Feature::UNSPECIFIED_PLATFORM));
154 } 200 }
155 201
156 TEST(ExtensionFeatureTest, Version) { 202 TEST(ExtensionFeatureTest, Version) {
157 Feature feature; 203 Feature feature;
158 feature.set_min_manifest_version(5); 204 feature.set_min_manifest_version(5);
159 205
160 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable( 206 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
207 feature.IsAvailableToManifest(
208 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
209 0, Feature::UNSPECIFIED_PLATFORM));
210 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
211 feature.IsAvailableToManifest(
212 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
213 4, Feature::UNSPECIFIED_PLATFORM));
214
215 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
161 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 216 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
162 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 0)); 217 5, Feature::UNSPECIFIED_PLATFORM));
163 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable( 218 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
164 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 219 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
165 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 4)); 220 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 221
174 feature.set_max_manifest_version(8); 222 feature.set_max_manifest_version(8);
175 223
176 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailable( 224 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION,
225 feature.IsAvailableToManifest(
226 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
227 10, Feature::UNSPECIFIED_PLATFORM));
228 EXPECT_EQ(Feature::IS_AVAILABLE,
229 feature.IsAvailableToManifest(
230 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
231 8, Feature::UNSPECIFIED_PLATFORM));
232 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
177 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 233 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
178 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 10)); 234 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 } 235 }
186 236
187 TEST(ExtensionFeatureTest, ParseNull) { 237 TEST(ExtensionFeatureTest, ParseNull) {
188 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 238 scoped_ptr<DictionaryValue> value(new DictionaryValue());
189 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 239 scoped_ptr<Feature> feature(new Feature());
240 feature->Parse(value.get());
190 EXPECT_TRUE(feature->whitelist()->empty()); 241 EXPECT_TRUE(feature->whitelist()->empty());
191 EXPECT_TRUE(feature->extension_types()->empty()); 242 EXPECT_TRUE(feature->extension_types()->empty());
192 EXPECT_TRUE(feature->contexts()->empty()); 243 EXPECT_TRUE(feature->contexts()->empty());
193 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); 244 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
194 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); 245 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform());
195 EXPECT_EQ(0, feature->min_manifest_version()); 246 EXPECT_EQ(0, feature->min_manifest_version());
196 EXPECT_EQ(0, feature->max_manifest_version()); 247 EXPECT_EQ(0, feature->max_manifest_version());
197 } 248 }
198 249
199 TEST(ExtensionFeatureTest, ParseWhitelist) { 250 TEST(ExtensionFeatureTest, ParseWhitelist) {
200 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 251 scoped_ptr<DictionaryValue> value(new DictionaryValue());
201 ListValue* whitelist = new ListValue(); 252 ListValue* whitelist = new ListValue();
202 whitelist->Append(Value::CreateStringValue("foo")); 253 whitelist->Append(Value::CreateStringValue("foo"));
203 whitelist->Append(Value::CreateStringValue("bar")); 254 whitelist->Append(Value::CreateStringValue("bar"));
204 value->Set("whitelist", whitelist); 255 value->Set("whitelist", whitelist);
205 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 256 scoped_ptr<Feature> feature(new Feature());
257 feature->Parse(value.get());
206 EXPECT_EQ(2u, feature->whitelist()->size()); 258 EXPECT_EQ(2u, feature->whitelist()->size());
207 EXPECT_TRUE(feature->whitelist()->count("foo")); 259 EXPECT_TRUE(feature->whitelist()->count("foo"));
208 EXPECT_TRUE(feature->whitelist()->count("bar")); 260 EXPECT_TRUE(feature->whitelist()->count("bar"));
209 } 261 }
210 262
211 TEST(ExtensionFeatureTest, ParsePackageTypes) { 263 TEST(ExtensionFeatureTest, ParsePackageTypes) {
212 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 264 scoped_ptr<DictionaryValue> value(new DictionaryValue());
213 ListValue* extension_types = new ListValue(); 265 ListValue* extension_types = new ListValue();
214 extension_types->Append(Value::CreateStringValue("extension")); 266 extension_types->Append(Value::CreateStringValue("extension"));
215 extension_types->Append(Value::CreateStringValue("theme")); 267 extension_types->Append(Value::CreateStringValue("theme"));
216 extension_types->Append(Value::CreateStringValue("packaged_app")); 268 extension_types->Append(Value::CreateStringValue("packaged_app"));
217 extension_types->Append(Value::CreateStringValue("hosted_app")); 269 extension_types->Append(Value::CreateStringValue("hosted_app"));
218 extension_types->Append(Value::CreateStringValue("platform_app")); 270 extension_types->Append(Value::CreateStringValue("platform_app"));
219 value->Set("extension_types", extension_types); 271 value->Set("extension_types", extension_types);
220 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 272 scoped_ptr<Feature> feature(new Feature());
273 feature->Parse(value.get());
221 EXPECT_EQ(5u, feature->extension_types()->size()); 274 EXPECT_EQ(5u, feature->extension_types()->size());
222 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); 275 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION));
223 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); 276 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME));
224 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP)); 277 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP));
225 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); 278 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP));
226 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); 279 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
227 280
228 value->SetString("extension_types", "all"); 281 value->SetString("extension_types", "all");
229 scoped_ptr<Feature> feature2(Feature::Parse(value.get())); 282 scoped_ptr<Feature> feature2(new Feature());
283 feature2->Parse(value.get());
230 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); 284 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types()));
231 } 285 }
232 286
233 TEST(ExtensionFeatureTest, ParseContexts) { 287 TEST(ExtensionFeatureTest, ParseContexts) {
234 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 288 scoped_ptr<DictionaryValue> value(new DictionaryValue());
235 ListValue* contexts = new ListValue(); 289 ListValue* contexts = new ListValue();
236 contexts->Append(Value::CreateStringValue("blessed_extension")); 290 contexts->Append(Value::CreateStringValue("blessed_extension"));
237 contexts->Append(Value::CreateStringValue("unblessed_extension")); 291 contexts->Append(Value::CreateStringValue("unblessed_extension"));
238 contexts->Append(Value::CreateStringValue("content_script")); 292 contexts->Append(Value::CreateStringValue("content_script"));
239 contexts->Append(Value::CreateStringValue("web_page")); 293 contexts->Append(Value::CreateStringValue("web_page"));
240 value->Set("contexts", contexts); 294 value->Set("contexts", contexts);
241 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 295 scoped_ptr<Feature> feature(new Feature());
296 feature->Parse(value.get());
242 EXPECT_EQ(4u, feature->contexts()->size()); 297 EXPECT_EQ(4u, feature->contexts()->size());
243 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); 298 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT));
244 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 299 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
245 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); 300 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT));
246 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); 301 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT));
247 302
248 value->SetString("contexts", "all"); 303 value->SetString("contexts", "all");
249 scoped_ptr<Feature> feature2(Feature::Parse(value.get())); 304 scoped_ptr<Feature> feature2(new Feature());
305 feature2->Parse(value.get());
250 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); 306 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts()));
251 } 307 }
252 308
253 TEST(ExtensionFeatureTest, ParseLocation) { 309 TEST(ExtensionFeatureTest, ParseLocation) {
254 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 310 scoped_ptr<DictionaryValue> value(new DictionaryValue());
255 value->SetString("location", "component"); 311 value->SetString("location", "component");
256 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 312 scoped_ptr<Feature> feature(new Feature());
313 feature->Parse(value.get());
257 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); 314 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location());
258 } 315 }
259 316
260 TEST(ExtensionFeatureTest, ParsePlatform) { 317 TEST(ExtensionFeatureTest, ParsePlatform) {
261 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 318 scoped_ptr<DictionaryValue> value(new DictionaryValue());
262 value->SetString("platform", "chromeos"); 319 value->SetString("platform", "chromeos");
263 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 320 scoped_ptr<Feature> feature(new Feature());
321 feature->Parse(value.get());
264 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); 322 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform());
265 } 323 }
266 324
267 TEST(ExtensionFeatureTest, ManifestVersion) { 325 TEST(ExtensionFeatureTest, ManifestVersion) {
268 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 326 scoped_ptr<DictionaryValue> value(new DictionaryValue());
269 value->SetInteger("min_manifest_version", 1); 327 value->SetInteger("min_manifest_version", 1);
270 value->SetInteger("max_manifest_version", 5); 328 value->SetInteger("max_manifest_version", 5);
271 scoped_ptr<Feature> feature(Feature::Parse(value.get())); 329 scoped_ptr<Feature> feature(new Feature());
330 feature->Parse(value.get());
272 EXPECT_EQ(1, feature->min_manifest_version()); 331 EXPECT_EQ(1, feature->min_manifest_version());
273 EXPECT_EQ(5, feature->max_manifest_version()); 332 EXPECT_EQ(5, feature->max_manifest_version());
274 } 333 }
334
335 TEST(ExtensionFeatureTest, Inheritance) {
336 Feature feature;
337 feature.whitelist()->insert("foo");
338 feature.extension_types()->insert(Extension::TYPE_THEME);
339 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
340 feature.set_location(Feature::COMPONENT_LOCATION);
341 feature.set_platform(Feature::CHROMEOS_PLATFORM);
342 feature.set_min_manifest_version(1);
343 feature.set_max_manifest_version(2);
344
345 Feature feature2 = feature;
346 EXPECT_TRUE(feature2.Equals(feature));
347
348 DictionaryValue definition;
349 feature2.Parse(&definition);
350 EXPECT_TRUE(feature2.Equals(feature));
351
352 ListValue* whitelist = new ListValue();
353 ListValue* extension_types = new ListValue();
354 ListValue* contexts = new ListValue();
355 whitelist->Append(Value::CreateStringValue("bar"));
356 extension_types->Append(Value::CreateStringValue("extension"));
357 contexts->Append(Value::CreateStringValue("unblessed_extension"));
358 definition.Set("whitelist", whitelist);
359 definition.Set("extension_types", extension_types);
360 definition.Set("contexts", contexts);
361 // Can't test location or platform because we only have one value so far.
362 definition.Set("min_manifest_version", Value::CreateIntegerValue(2));
363 definition.Set("max_manifest_version", Value::CreateIntegerValue(3));
364
365 feature2.Parse(&definition);
366 EXPECT_FALSE(feature2.Equals(feature));
367 EXPECT_EQ(1u, feature2.whitelist()->size());
368 EXPECT_EQ(1u, feature2.extension_types()->size());
369 EXPECT_EQ(1u, feature2.contexts()->size());
370 EXPECT_EQ(1u, feature2.whitelist()->count("bar"));
371 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION));
372 EXPECT_EQ(1u,
373 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
374 EXPECT_EQ(2, feature2.min_manifest_version());
375 EXPECT_EQ(3, feature2.max_manifest_version());
376 }
377
378 TEST(ExtensionFeatureTest, Equals) {
379 Feature feature;
380 feature.whitelist()->insert("foo");
381 feature.extension_types()->insert(Extension::TYPE_THEME);
382 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
383 feature.set_location(Feature::COMPONENT_LOCATION);
384 feature.set_platform(Feature::CHROMEOS_PLATFORM);
385 feature.set_min_manifest_version(18);
386 feature.set_max_manifest_version(25);
387
388 Feature feature2(feature);
389 EXPECT_TRUE(feature2.Equals(feature));
390
391 feature2.whitelist()->clear();
392 EXPECT_FALSE(feature2.Equals(feature));
393
394 feature2 = feature;
395 feature2.extension_types()->clear();
396 EXPECT_FALSE(feature2.Equals(feature));
397
398 feature2 = feature;
399 feature2.contexts()->clear();
400 EXPECT_FALSE(feature2.Equals(feature));
401
402 feature2 = feature;
403 feature2.set_location(Feature::UNSPECIFIED_LOCATION);
404 EXPECT_FALSE(feature2.Equals(feature));
405
406 feature2 = feature;
407 feature2.set_platform(Feature::UNSPECIFIED_PLATFORM);
408 EXPECT_FALSE(feature2.Equals(feature));
409
410 feature2 = feature;
411 feature2.set_min_manifest_version(0);
412 EXPECT_FALSE(feature2.Equals(feature));
413
414 feature2 = feature;
415 feature2.set_max_manifest_version(0);
416 EXPECT_FALSE(feature2.Equals(feature));
417 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698