| 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/features/feature.h" | 5 #include "chrome/common/extensions/features/simple_feature.h" |
| 6 | 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 | 8 |
| 9 using chrome::VersionInfo; | 9 using chrome::VersionInfo; |
| 10 using extensions::Extension; | 10 using extensions::Extension; |
| 11 using extensions::Feature; | 11 using extensions::Feature; |
| 12 using extensions::SimpleFeature; |
| 12 | 13 |
| 13 namespace { | 14 namespace { |
| 14 | 15 |
| 15 struct IsAvailableTestData { | 16 struct IsAvailableTestData { |
| 16 std::string extension_id; | 17 std::string extension_id; |
| 17 Extension::Type extension_type; | 18 Extension::Type extension_type; |
| 18 Feature::Location location; | 19 Feature::Location location; |
| 19 Feature::Platform platform; | 20 Feature::Platform platform; |
| 20 int manifest_version; | 21 int manifest_version; |
| 21 Feature::AvailabilityResult expected_result; | 22 Feature::AvailabilityResult expected_result; |
| 22 }; | 23 }; |
| 23 | 24 |
| 24 class ExtensionFeatureTest : public testing::Test { | 25 class ExtensionSimpleFeatureTest : public testing::Test { |
| 25 protected: | 26 protected: |
| 26 ExtensionFeatureTest() | 27 ExtensionSimpleFeatureTest() |
| 27 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} | 28 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} |
| 28 virtual ~ExtensionFeatureTest() {} | 29 virtual ~ExtensionSimpleFeatureTest() {} |
| 29 | 30 |
| 30 private: | 31 private: |
| 31 Feature::ScopedCurrentChannel current_channel_; | 32 Feature::ScopedCurrentChannel current_channel_; |
| 32 }; | 33 }; |
| 33 | 34 |
| 34 TEST_F(ExtensionFeatureTest, IsAvailableNullCase) { | 35 TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) { |
| 35 const IsAvailableTestData tests[] = { | 36 const IsAvailableTestData tests[] = { |
| 36 { "", Extension::TYPE_UNKNOWN, | 37 { "", Extension::TYPE_UNKNOWN, |
| 37 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 38 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 38 Feature::IS_AVAILABLE }, | 39 Feature::IS_AVAILABLE }, |
| 39 { "random-extension", Extension::TYPE_UNKNOWN, | 40 { "random-extension", Extension::TYPE_UNKNOWN, |
| 40 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 41 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 41 Feature::IS_AVAILABLE }, | 42 Feature::IS_AVAILABLE }, |
| 42 { "", Extension::TYPE_LEGACY_PACKAGED_APP, | 43 { "", Extension::TYPE_LEGACY_PACKAGED_APP, |
| 43 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 44 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 44 Feature::IS_AVAILABLE }, | 45 Feature::IS_AVAILABLE }, |
| 45 { "", Extension::TYPE_UNKNOWN, | 46 { "", Extension::TYPE_UNKNOWN, |
| 46 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 47 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 47 Feature::IS_AVAILABLE }, | 48 Feature::IS_AVAILABLE }, |
| 48 { "", Extension::TYPE_UNKNOWN, | 49 { "", Extension::TYPE_UNKNOWN, |
| 49 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 50 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 50 Feature::IS_AVAILABLE }, | 51 Feature::IS_AVAILABLE }, |
| 51 { "", Extension::TYPE_UNKNOWN, | 52 { "", Extension::TYPE_UNKNOWN, |
| 52 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, | 53 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, |
| 53 Feature::IS_AVAILABLE }, | 54 Feature::IS_AVAILABLE }, |
| 54 { "", Extension::TYPE_UNKNOWN, | 55 { "", Extension::TYPE_UNKNOWN, |
| 55 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, | 56 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, |
| 56 Feature::IS_AVAILABLE } | 57 Feature::IS_AVAILABLE } |
| 57 }; | 58 }; |
| 58 | 59 |
| 59 Feature feature; | 60 SimpleFeature feature; |
| 60 for (size_t i = 0; i < arraysize(tests); ++i) { | 61 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 61 const IsAvailableTestData& test = tests[i]; | 62 const IsAvailableTestData& test = tests[i]; |
| 62 EXPECT_EQ(test.expected_result, | 63 EXPECT_EQ(test.expected_result, |
| 63 feature.IsAvailableToManifest(test.extension_id, | 64 feature.IsAvailableToManifest(test.extension_id, |
| 64 test.extension_type, | 65 test.extension_type, |
| 65 test.location, | 66 test.location, |
| 66 test.manifest_version, | 67 test.manifest_version, |
| 67 test.platform).result()); | 68 test.platform).result()); |
| 68 } | 69 } |
| 69 } | 70 } |
| 70 | 71 |
| 71 TEST_F(ExtensionFeatureTest, Whitelist) { | 72 TEST_F(ExtensionSimpleFeatureTest, Whitelist) { |
| 72 Feature feature; | 73 SimpleFeature feature; |
| 73 feature.whitelist()->insert("foo"); | 74 feature.whitelist()->insert("foo"); |
| 74 feature.whitelist()->insert("bar"); | 75 feature.whitelist()->insert("bar"); |
| 75 | 76 |
| 76 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 77 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 77 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 78 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 78 Feature::UNSPECIFIED_PLATFORM).result()); | 79 Feature::UNSPECIFIED_PLATFORM).result()); |
| 79 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 80 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 80 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 81 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 81 Feature::UNSPECIFIED_PLATFORM).result()); | 82 Feature::UNSPECIFIED_PLATFORM).result()); |
| 82 | 83 |
| 83 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 84 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 84 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 85 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 85 Feature::UNSPECIFIED_PLATFORM).result()); | 86 Feature::UNSPECIFIED_PLATFORM).result()); |
| 86 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 87 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 87 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 88 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 88 Feature::UNSPECIFIED_PLATFORM).result()); | 89 Feature::UNSPECIFIED_PLATFORM).result()); |
| 89 | 90 |
| 90 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 91 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); |
| 91 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 92 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 92 "baz", Extension::TYPE_LEGACY_PACKAGED_APP, | 93 "baz", Extension::TYPE_LEGACY_PACKAGED_APP, |
| 93 Feature::UNSPECIFIED_LOCATION, -1, | 94 Feature::UNSPECIFIED_LOCATION, -1, |
| 94 Feature::UNSPECIFIED_PLATFORM).result()); | 95 Feature::UNSPECIFIED_PLATFORM).result()); |
| 95 } | 96 } |
| 96 | 97 |
| 97 TEST_F(ExtensionFeatureTest, PackageType) { | 98 TEST_F(ExtensionSimpleFeatureTest, PackageType) { |
| 98 Feature feature; | 99 SimpleFeature feature; |
| 99 feature.extension_types()->insert(Extension::TYPE_EXTENSION); | 100 feature.extension_types()->insert(Extension::TYPE_EXTENSION); |
| 100 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 101 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); |
| 101 | 102 |
| 102 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 103 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 103 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, | 104 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, |
| 104 Feature::UNSPECIFIED_PLATFORM).result()); | 105 Feature::UNSPECIFIED_PLATFORM).result()); |
| 105 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 106 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 106 "", Extension::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, | 107 "", Extension::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, |
| 107 -1, Feature::UNSPECIFIED_PLATFORM).result()); | 108 -1, Feature::UNSPECIFIED_PLATFORM).result()); |
| 108 | 109 |
| 109 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 110 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( |
| 110 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 111 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 111 Feature::UNSPECIFIED_PLATFORM).result()); | 112 Feature::UNSPECIFIED_PLATFORM).result()); |
| 112 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 113 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( |
| 113 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, | 114 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, |
| 114 Feature::UNSPECIFIED_PLATFORM).result()); | 115 Feature::UNSPECIFIED_PLATFORM).result()); |
| 115 } | 116 } |
| 116 | 117 |
| 117 TEST_F(ExtensionFeatureTest, Context) { | 118 TEST_F(ExtensionSimpleFeatureTest, Context) { |
| 118 Feature feature; | 119 SimpleFeature feature; |
| 119 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 120 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
| 120 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 121 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); |
| 121 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 122 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 122 feature.set_min_manifest_version(21); | 123 feature.set_min_manifest_version(21); |
| 123 feature.set_max_manifest_version(25); | 124 feature.set_max_manifest_version(25); |
| 124 | 125 |
| 125 DictionaryValue manifest; | 126 DictionaryValue manifest; |
| 126 manifest.SetString("name", "test"); | 127 manifest.SetString("name", "test"); |
| 127 manifest.SetString("version", "1"); | 128 manifest.SetString("version", "1"); |
| 128 manifest.SetInteger("manifest_version", 21); | 129 manifest.SetInteger("manifest_version", 21); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 Feature::CHROMEOS_PLATFORM).result()); | 173 Feature::CHROMEOS_PLATFORM).result()); |
| 173 feature.set_min_manifest_version(21); | 174 feature.set_min_manifest_version(21); |
| 174 | 175 |
| 175 feature.set_max_manifest_version(18); | 176 feature.set_max_manifest_version(18); |
| 176 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext( | 177 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext( |
| 177 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 178 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 178 Feature::CHROMEOS_PLATFORM).result()); | 179 Feature::CHROMEOS_PLATFORM).result()); |
| 179 feature.set_max_manifest_version(25); | 180 feature.set_max_manifest_version(25); |
| 180 } | 181 } |
| 181 | 182 |
| 182 TEST_F(ExtensionFeatureTest, Location) { | 183 TEST_F(ExtensionSimpleFeatureTest, Location) { |
| 183 Feature feature; | 184 SimpleFeature feature; |
| 184 | 185 |
| 185 // If the feature specifies "component" as its location, then only component | 186 // If the feature specifies "component" as its location, then only component |
| 186 // extensions can access it. | 187 // extensions can access it. |
| 187 feature.set_location(Feature::COMPONENT_LOCATION); | 188 feature.set_location(Feature::COMPONENT_LOCATION); |
| 188 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 189 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 189 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 190 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, |
| 190 Feature::UNSPECIFIED_PLATFORM).result()); | 191 Feature::UNSPECIFIED_PLATFORM).result()); |
| 191 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( | 192 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( |
| 192 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 193 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 193 Feature::UNSPECIFIED_PLATFORM).result()); | 194 Feature::UNSPECIFIED_PLATFORM).result()); |
| 194 | 195 |
| 195 // But component extensions can access anything else, whatever their location. | 196 // But component extensions can access anything else, whatever their location. |
| 196 feature.set_location(Feature::UNSPECIFIED_LOCATION); | 197 feature.set_location(Feature::UNSPECIFIED_LOCATION); |
| 197 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 198 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 198 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 199 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, |
| 199 Feature::UNSPECIFIED_PLATFORM).result()); | 200 Feature::UNSPECIFIED_PLATFORM).result()); |
| 200 } | 201 } |
| 201 | 202 |
| 202 TEST_F(ExtensionFeatureTest, Platform) { | 203 TEST_F(ExtensionSimpleFeatureTest, Platform) { |
| 203 Feature feature; | 204 SimpleFeature feature; |
| 204 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 205 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 205 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 206 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 206 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 207 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 207 Feature::CHROMEOS_PLATFORM).result()); | 208 Feature::CHROMEOS_PLATFORM).result()); |
| 208 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( | 209 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( |
| 209 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 210 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 210 Feature::UNSPECIFIED_PLATFORM).result()); | 211 Feature::UNSPECIFIED_PLATFORM).result()); |
| 211 } | 212 } |
| 212 | 213 |
| 213 TEST_F(ExtensionFeatureTest, Version) { | 214 TEST_F(ExtensionSimpleFeatureTest, Version) { |
| 214 Feature feature; | 215 SimpleFeature feature; |
| 215 feature.set_min_manifest_version(5); | 216 feature.set_min_manifest_version(5); |
| 216 | 217 |
| 217 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, | 218 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, |
| 218 feature.IsAvailableToManifest( | 219 feature.IsAvailableToManifest( |
| 219 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 220 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 220 0, Feature::UNSPECIFIED_PLATFORM).result()); | 221 0, Feature::UNSPECIFIED_PLATFORM).result()); |
| 221 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, | 222 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, |
| 222 feature.IsAvailableToManifest( | 223 feature.IsAvailableToManifest( |
| 223 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 224 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 224 4, Feature::UNSPECIFIED_PLATFORM).result()); | 225 4, Feature::UNSPECIFIED_PLATFORM).result()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 238 10, Feature::UNSPECIFIED_PLATFORM).result()); | 239 10, Feature::UNSPECIFIED_PLATFORM).result()); |
| 239 EXPECT_EQ(Feature::IS_AVAILABLE, | 240 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 240 feature.IsAvailableToManifest( | 241 feature.IsAvailableToManifest( |
| 241 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 242 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 242 8, Feature::UNSPECIFIED_PLATFORM).result()); | 243 8, Feature::UNSPECIFIED_PLATFORM).result()); |
| 243 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 244 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 244 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 245 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 245 7, Feature::UNSPECIFIED_PLATFORM).result()); | 246 7, Feature::UNSPECIFIED_PLATFORM).result()); |
| 246 } | 247 } |
| 247 | 248 |
| 248 TEST_F(ExtensionFeatureTest, ParseNull) { | 249 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { |
| 249 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 250 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 250 scoped_ptr<Feature> feature(new Feature()); | 251 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 251 feature->Parse(value.get()); | 252 feature->Parse(value.get()); |
| 252 EXPECT_TRUE(feature->whitelist()->empty()); | 253 EXPECT_TRUE(feature->whitelist()->empty()); |
| 253 EXPECT_TRUE(feature->extension_types()->empty()); | 254 EXPECT_TRUE(feature->extension_types()->empty()); |
| 254 EXPECT_TRUE(feature->contexts()->empty()); | 255 EXPECT_TRUE(feature->contexts()->empty()); |
| 255 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); | 256 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); |
| 256 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); | 257 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); |
| 257 EXPECT_EQ(0, feature->min_manifest_version()); | 258 EXPECT_EQ(0, feature->min_manifest_version()); |
| 258 EXPECT_EQ(0, feature->max_manifest_version()); | 259 EXPECT_EQ(0, feature->max_manifest_version()); |
| 259 } | 260 } |
| 260 | 261 |
| 261 TEST_F(ExtensionFeatureTest, ParseWhitelist) { | 262 TEST_F(ExtensionSimpleFeatureTest, ParseWhitelist) { |
| 262 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 263 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 263 ListValue* whitelist = new ListValue(); | 264 ListValue* whitelist = new ListValue(); |
| 264 whitelist->Append(Value::CreateStringValue("foo")); | 265 whitelist->Append(Value::CreateStringValue("foo")); |
| 265 whitelist->Append(Value::CreateStringValue("bar")); | 266 whitelist->Append(Value::CreateStringValue("bar")); |
| 266 value->Set("whitelist", whitelist); | 267 value->Set("whitelist", whitelist); |
| 267 scoped_ptr<Feature> feature(new Feature()); | 268 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 268 feature->Parse(value.get()); | 269 feature->Parse(value.get()); |
| 269 EXPECT_EQ(2u, feature->whitelist()->size()); | 270 EXPECT_EQ(2u, feature->whitelist()->size()); |
| 270 EXPECT_TRUE(feature->whitelist()->count("foo")); | 271 EXPECT_TRUE(feature->whitelist()->count("foo")); |
| 271 EXPECT_TRUE(feature->whitelist()->count("bar")); | 272 EXPECT_TRUE(feature->whitelist()->count("bar")); |
| 272 } | 273 } |
| 273 | 274 |
| 274 TEST_F(ExtensionFeatureTest, ParsePackageTypes) { | 275 TEST_F(ExtensionSimpleFeatureTest, ParsePackageTypes) { |
| 275 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 276 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 276 ListValue* extension_types = new ListValue(); | 277 ListValue* extension_types = new ListValue(); |
| 277 extension_types->Append(Value::CreateStringValue("extension")); | 278 extension_types->Append(Value::CreateStringValue("extension")); |
| 278 extension_types->Append(Value::CreateStringValue("theme")); | 279 extension_types->Append(Value::CreateStringValue("theme")); |
| 279 extension_types->Append(Value::CreateStringValue("packaged_app")); | 280 extension_types->Append(Value::CreateStringValue("packaged_app")); |
| 280 extension_types->Append(Value::CreateStringValue("hosted_app")); | 281 extension_types->Append(Value::CreateStringValue("hosted_app")); |
| 281 extension_types->Append(Value::CreateStringValue("platform_app")); | 282 extension_types->Append(Value::CreateStringValue("platform_app")); |
| 282 value->Set("extension_types", extension_types); | 283 value->Set("extension_types", extension_types); |
| 283 scoped_ptr<Feature> feature(new Feature()); | 284 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 284 feature->Parse(value.get()); | 285 feature->Parse(value.get()); |
| 285 EXPECT_EQ(5u, feature->extension_types()->size()); | 286 EXPECT_EQ(5u, feature->extension_types()->size()); |
| 286 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); | 287 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); |
| 287 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); | 288 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); |
| 288 EXPECT_TRUE(feature->extension_types()->count( | 289 EXPECT_TRUE(feature->extension_types()->count( |
| 289 Extension::TYPE_LEGACY_PACKAGED_APP)); | 290 Extension::TYPE_LEGACY_PACKAGED_APP)); |
| 290 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); | 291 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); |
| 291 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); | 292 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); |
| 292 | 293 |
| 293 value->SetString("extension_types", "all"); | 294 value->SetString("extension_types", "all"); |
| 294 scoped_ptr<Feature> feature2(new Feature()); | 295 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
| 295 feature2->Parse(value.get()); | 296 feature2->Parse(value.get()); |
| 296 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); | 297 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); |
| 297 } | 298 } |
| 298 | 299 |
| 299 TEST_F(ExtensionFeatureTest, ParseContexts) { | 300 TEST_F(ExtensionSimpleFeatureTest, ParseContexts) { |
| 300 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 301 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 301 ListValue* contexts = new ListValue(); | 302 ListValue* contexts = new ListValue(); |
| 302 contexts->Append(Value::CreateStringValue("blessed_extension")); | 303 contexts->Append(Value::CreateStringValue("blessed_extension")); |
| 303 contexts->Append(Value::CreateStringValue("unblessed_extension")); | 304 contexts->Append(Value::CreateStringValue("unblessed_extension")); |
| 304 contexts->Append(Value::CreateStringValue("content_script")); | 305 contexts->Append(Value::CreateStringValue("content_script")); |
| 305 contexts->Append(Value::CreateStringValue("web_page")); | 306 contexts->Append(Value::CreateStringValue("web_page")); |
| 306 value->Set("contexts", contexts); | 307 value->Set("contexts", contexts); |
| 307 scoped_ptr<Feature> feature(new Feature()); | 308 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 308 feature->Parse(value.get()); | 309 feature->Parse(value.get()); |
| 309 EXPECT_EQ(4u, feature->contexts()->size()); | 310 EXPECT_EQ(4u, feature->contexts()->size()); |
| 310 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); | 311 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); |
| 311 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); | 312 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
| 312 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); | 313 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); |
| 313 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); | 314 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); |
| 314 | 315 |
| 315 value->SetString("contexts", "all"); | 316 value->SetString("contexts", "all"); |
| 316 scoped_ptr<Feature> feature2(new Feature()); | 317 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
| 317 feature2->Parse(value.get()); | 318 feature2->Parse(value.get()); |
| 318 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); | 319 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); |
| 319 } | 320 } |
| 320 | 321 |
| 321 TEST_F(ExtensionFeatureTest, ParseLocation) { | 322 TEST_F(ExtensionSimpleFeatureTest, ParseLocation) { |
| 322 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 323 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 323 value->SetString("location", "component"); | 324 value->SetString("location", "component"); |
| 324 scoped_ptr<Feature> feature(new Feature()); | 325 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 325 feature->Parse(value.get()); | 326 feature->Parse(value.get()); |
| 326 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); | 327 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); |
| 327 } | 328 } |
| 328 | 329 |
| 329 TEST_F(ExtensionFeatureTest, ParsePlatform) { | 330 TEST_F(ExtensionSimpleFeatureTest, ParsePlatform) { |
| 330 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 331 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 331 value->SetString("platform", "chromeos"); | 332 value->SetString("platform", "chromeos"); |
| 332 scoped_ptr<Feature> feature(new Feature()); | 333 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 333 feature->Parse(value.get()); | 334 feature->Parse(value.get()); |
| 334 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); | 335 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); |
| 335 } | 336 } |
| 336 | 337 |
| 337 TEST_F(ExtensionFeatureTest, ManifestVersion) { | 338 TEST_F(ExtensionSimpleFeatureTest, ManifestVersion) { |
| 338 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 339 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 339 value->SetInteger("min_manifest_version", 1); | 340 value->SetInteger("min_manifest_version", 1); |
| 340 value->SetInteger("max_manifest_version", 5); | 341 value->SetInteger("max_manifest_version", 5); |
| 341 scoped_ptr<Feature> feature(new Feature()); | 342 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 342 feature->Parse(value.get()); | 343 feature->Parse(value.get()); |
| 343 EXPECT_EQ(1, feature->min_manifest_version()); | 344 EXPECT_EQ(1, feature->min_manifest_version()); |
| 344 EXPECT_EQ(5, feature->max_manifest_version()); | 345 EXPECT_EQ(5, feature->max_manifest_version()); |
| 345 } | 346 } |
| 346 | 347 |
| 347 TEST_F(ExtensionFeatureTest, Inheritance) { | 348 TEST_F(ExtensionSimpleFeatureTest, Inheritance) { |
| 348 Feature feature; | 349 SimpleFeature feature; |
| 349 feature.whitelist()->insert("foo"); | 350 feature.whitelist()->insert("foo"); |
| 350 feature.extension_types()->insert(Extension::TYPE_THEME); | 351 feature.extension_types()->insert(Extension::TYPE_THEME); |
| 351 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 352 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
| 352 feature.set_location(Feature::COMPONENT_LOCATION); | 353 feature.set_location(Feature::COMPONENT_LOCATION); |
| 353 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 354 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 354 feature.set_min_manifest_version(1); | 355 feature.set_min_manifest_version(1); |
| 355 feature.set_max_manifest_version(2); | 356 feature.set_max_manifest_version(2); |
| 356 | 357 |
| 357 Feature feature2 = feature; | 358 SimpleFeature feature2 = feature; |
| 358 EXPECT_TRUE(feature2.Equals(feature)); | 359 EXPECT_TRUE(feature2.Equals(feature)); |
| 359 | 360 |
| 360 DictionaryValue definition; | 361 DictionaryValue definition; |
| 361 feature2.Parse(&definition); | 362 feature2.Parse(&definition); |
| 362 EXPECT_TRUE(feature2.Equals(feature)); | 363 EXPECT_TRUE(feature2.Equals(feature)); |
| 363 | 364 |
| 364 ListValue* whitelist = new ListValue(); | 365 ListValue* whitelist = new ListValue(); |
| 365 ListValue* extension_types = new ListValue(); | 366 ListValue* extension_types = new ListValue(); |
| 366 ListValue* contexts = new ListValue(); | 367 ListValue* contexts = new ListValue(); |
| 367 whitelist->Append(Value::CreateStringValue("bar")); | 368 whitelist->Append(Value::CreateStringValue("bar")); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 380 EXPECT_EQ(1u, feature2.extension_types()->size()); | 381 EXPECT_EQ(1u, feature2.extension_types()->size()); |
| 381 EXPECT_EQ(1u, feature2.contexts()->size()); | 382 EXPECT_EQ(1u, feature2.contexts()->size()); |
| 382 EXPECT_EQ(1u, feature2.whitelist()->count("bar")); | 383 EXPECT_EQ(1u, feature2.whitelist()->count("bar")); |
| 383 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION)); | 384 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION)); |
| 384 EXPECT_EQ(1u, | 385 EXPECT_EQ(1u, |
| 385 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); | 386 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
| 386 EXPECT_EQ(2, feature2.min_manifest_version()); | 387 EXPECT_EQ(2, feature2.min_manifest_version()); |
| 387 EXPECT_EQ(3, feature2.max_manifest_version()); | 388 EXPECT_EQ(3, feature2.max_manifest_version()); |
| 388 } | 389 } |
| 389 | 390 |
| 390 TEST_F(ExtensionFeatureTest, Equals) { | 391 TEST_F(ExtensionSimpleFeatureTest, Equals) { |
| 391 Feature feature; | 392 SimpleFeature feature; |
| 392 feature.whitelist()->insert("foo"); | 393 feature.whitelist()->insert("foo"); |
| 393 feature.extension_types()->insert(Extension::TYPE_THEME); | 394 feature.extension_types()->insert(Extension::TYPE_THEME); |
| 394 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); | 395 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); |
| 395 feature.set_location(Feature::COMPONENT_LOCATION); | 396 feature.set_location(Feature::COMPONENT_LOCATION); |
| 396 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 397 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 397 feature.set_min_manifest_version(18); | 398 feature.set_min_manifest_version(18); |
| 398 feature.set_max_manifest_version(25); | 399 feature.set_max_manifest_version(25); |
| 399 | 400 |
| 400 Feature feature2(feature); | 401 SimpleFeature feature2(feature); |
| 401 EXPECT_TRUE(feature2.Equals(feature)); | 402 EXPECT_TRUE(feature2.Equals(feature)); |
| 402 | 403 |
| 403 feature2.whitelist()->clear(); | 404 feature2.whitelist()->clear(); |
| 404 EXPECT_FALSE(feature2.Equals(feature)); | 405 EXPECT_FALSE(feature2.Equals(feature)); |
| 405 | 406 |
| 406 feature2 = feature; | 407 feature2 = feature; |
| 407 feature2.extension_types()->clear(); | 408 feature2.extension_types()->clear(); |
| 408 EXPECT_FALSE(feature2.Equals(feature)); | 409 EXPECT_FALSE(feature2.Equals(feature)); |
| 409 | 410 |
| 410 feature2 = feature; | 411 feature2 = feature; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 425 | 426 |
| 426 feature2 = feature; | 427 feature2 = feature; |
| 427 feature2.set_max_manifest_version(0); | 428 feature2.set_max_manifest_version(0); |
| 428 EXPECT_FALSE(feature2.Equals(feature)); | 429 EXPECT_FALSE(feature2.Equals(feature)); |
| 429 } | 430 } |
| 430 | 431 |
| 431 Feature::AvailabilityResult IsAvailableInChannel( | 432 Feature::AvailabilityResult IsAvailableInChannel( |
| 432 const std::string& channel, VersionInfo::Channel channel_for_testing) { | 433 const std::string& channel, VersionInfo::Channel channel_for_testing) { |
| 433 Feature::ScopedCurrentChannel current_channel(channel_for_testing); | 434 Feature::ScopedCurrentChannel current_channel(channel_for_testing); |
| 434 | 435 |
| 435 Feature feature; | 436 SimpleFeature feature; |
| 436 if (!channel.empty()) { | 437 if (!channel.empty()) { |
| 437 DictionaryValue feature_value; | 438 DictionaryValue feature_value; |
| 438 feature_value.SetString("channel", channel); | 439 feature_value.SetString("channel", channel); |
| 439 feature.Parse(&feature_value); | 440 feature.Parse(&feature_value); |
| 440 } | 441 } |
| 441 | 442 |
| 442 return feature.IsAvailableToManifest( | 443 return feature.IsAvailableToManifest( |
| 443 "random-extension", | 444 "random-extension", |
| 444 Extension::TYPE_UNKNOWN, | 445 Extension::TYPE_UNKNOWN, |
| 445 Feature::UNSPECIFIED_LOCATION, | 446 Feature::UNSPECIFIED_LOCATION, |
| 446 -1).result(); | 447 -1, |
| 448 Feature::GetCurrentPlatform()).result(); |
| 447 } | 449 } |
| 448 | 450 |
| 449 TEST_F(ExtensionFeatureTest, SupportedChannel) { | 451 TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) { |
| 450 // stable supported. | 452 // stable supported. |
| 451 EXPECT_EQ(Feature::IS_AVAILABLE, | 453 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 452 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); | 454 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); |
| 453 EXPECT_EQ(Feature::IS_AVAILABLE, | 455 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 454 IsAvailableInChannel("stable", VersionInfo::CHANNEL_CANARY)); | 456 IsAvailableInChannel("stable", VersionInfo::CHANNEL_CANARY)); |
| 455 EXPECT_EQ(Feature::IS_AVAILABLE, | 457 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 456 IsAvailableInChannel("stable", VersionInfo::CHANNEL_DEV)); | 458 IsAvailableInChannel("stable", VersionInfo::CHANNEL_DEV)); |
| 457 EXPECT_EQ(Feature::IS_AVAILABLE, | 459 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 458 IsAvailableInChannel("stable", VersionInfo::CHANNEL_BETA)); | 460 IsAvailableInChannel("stable", VersionInfo::CHANNEL_BETA)); |
| 459 EXPECT_EQ(Feature::IS_AVAILABLE, | 461 EXPECT_EQ(Feature::IS_AVAILABLE, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); | 516 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); |
| 515 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 517 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 516 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); | 518 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); |
| 517 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 519 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 518 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); | 520 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); |
| 519 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 521 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 520 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); | 522 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); |
| 521 } | 523 } |
| 522 | 524 |
| 523 } // namespace | 525 } // namespace |
| OLD | NEW |