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/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 } | |
OLD | NEW |