| 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/simple_feature.h" | 5 #include "chrome/common/extensions/features/simple_feature.h" |
| 6 | 6 |
| 7 #include "chrome/common/extensions/value_builder.h" | 7 #include "chrome/common/extensions/value_builder.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 using chrome::VersionInfo; | 10 using chrome::VersionInfo; |
| 11 using extensions::DictionaryBuilder; | 11 using extensions::DictionaryBuilder; |
| 12 using extensions::Extension; | 12 using extensions::Extension; |
| 13 using extensions::Feature; | 13 using extensions::Feature; |
| 14 using extensions::ListBuilder; | 14 using extensions::ListBuilder; |
| 15 using extensions::Manifest; |
| 15 using extensions::SimpleFeature; | 16 using extensions::SimpleFeature; |
| 16 | 17 |
| 17 namespace { | 18 namespace { |
| 18 | 19 |
| 19 struct IsAvailableTestData { | 20 struct IsAvailableTestData { |
| 20 std::string extension_id; | 21 std::string extension_id; |
| 21 Extension::Type extension_type; | 22 Manifest::Type extension_type; |
| 22 Feature::Location location; | 23 Feature::Location location; |
| 23 Feature::Platform platform; | 24 Feature::Platform platform; |
| 24 int manifest_version; | 25 int manifest_version; |
| 25 Feature::AvailabilityResult expected_result; | 26 Feature::AvailabilityResult expected_result; |
| 26 }; | 27 }; |
| 27 | 28 |
| 28 class ExtensionSimpleFeatureTest : public testing::Test { | 29 class ExtensionSimpleFeatureTest : public testing::Test { |
| 29 protected: | 30 protected: |
| 30 ExtensionSimpleFeatureTest() | 31 ExtensionSimpleFeatureTest() |
| 31 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} | 32 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} |
| 32 virtual ~ExtensionSimpleFeatureTest() {} | 33 virtual ~ExtensionSimpleFeatureTest() {} |
| 33 | 34 |
| 34 private: | 35 private: |
| 35 Feature::ScopedCurrentChannel current_channel_; | 36 Feature::ScopedCurrentChannel current_channel_; |
| 36 }; | 37 }; |
| 37 | 38 |
| 38 TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) { | 39 TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) { |
| 39 const IsAvailableTestData tests[] = { | 40 const IsAvailableTestData tests[] = { |
| 40 { "", Extension::TYPE_UNKNOWN, | 41 { "", Manifest::TYPE_UNKNOWN, |
| 41 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 42 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 42 Feature::IS_AVAILABLE }, | 43 Feature::IS_AVAILABLE }, |
| 43 { "random-extension", Extension::TYPE_UNKNOWN, | 44 { "random-extension", Manifest::TYPE_UNKNOWN, |
| 44 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 45 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 45 Feature::IS_AVAILABLE }, | 46 Feature::IS_AVAILABLE }, |
| 46 { "", Extension::TYPE_LEGACY_PACKAGED_APP, | 47 { "", Manifest::TYPE_LEGACY_PACKAGED_APP, |
| 47 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 48 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 48 Feature::IS_AVAILABLE }, | 49 Feature::IS_AVAILABLE }, |
| 49 { "", Extension::TYPE_UNKNOWN, | 50 { "", Manifest::TYPE_UNKNOWN, |
| 50 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 51 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 51 Feature::IS_AVAILABLE }, | 52 Feature::IS_AVAILABLE }, |
| 52 { "", Extension::TYPE_UNKNOWN, | 53 { "", Manifest::TYPE_UNKNOWN, |
| 53 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, | 54 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
| 54 Feature::IS_AVAILABLE }, | 55 Feature::IS_AVAILABLE }, |
| 55 { "", Extension::TYPE_UNKNOWN, | 56 { "", Manifest::TYPE_UNKNOWN, |
| 56 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, | 57 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, |
| 57 Feature::IS_AVAILABLE }, | 58 Feature::IS_AVAILABLE }, |
| 58 { "", Extension::TYPE_UNKNOWN, | 59 { "", Manifest::TYPE_UNKNOWN, |
| 59 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, | 60 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, |
| 60 Feature::IS_AVAILABLE } | 61 Feature::IS_AVAILABLE } |
| 61 }; | 62 }; |
| 62 | 63 |
| 63 SimpleFeature feature; | 64 SimpleFeature feature; |
| 64 for (size_t i = 0; i < arraysize(tests); ++i) { | 65 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 65 const IsAvailableTestData& test = tests[i]; | 66 const IsAvailableTestData& test = tests[i]; |
| 66 EXPECT_EQ(test.expected_result, | 67 EXPECT_EQ(test.expected_result, |
| 67 feature.IsAvailableToManifest(test.extension_id, | 68 feature.IsAvailableToManifest(test.extension_id, |
| 68 test.extension_type, | 69 test.extension_type, |
| 69 test.location, | 70 test.location, |
| 70 test.manifest_version, | 71 test.manifest_version, |
| 71 test.platform).result()); | 72 test.platform).result()); |
| 72 } | 73 } |
| 73 } | 74 } |
| 74 | 75 |
| 75 TEST_F(ExtensionSimpleFeatureTest, Whitelist) { | 76 TEST_F(ExtensionSimpleFeatureTest, Whitelist) { |
| 76 SimpleFeature feature; | 77 SimpleFeature feature; |
| 77 feature.whitelist()->insert("foo"); | 78 feature.whitelist()->insert("foo"); |
| 78 feature.whitelist()->insert("bar"); | 79 feature.whitelist()->insert("bar"); |
| 79 | 80 |
| 80 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 81 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 81 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 82 "foo", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 82 Feature::UNSPECIFIED_PLATFORM).result()); | 83 Feature::UNSPECIFIED_PLATFORM).result()); |
| 83 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 84 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 84 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 85 "bar", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 85 Feature::UNSPECIFIED_PLATFORM).result()); | 86 Feature::UNSPECIFIED_PLATFORM).result()); |
| 86 | 87 |
| 87 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 88 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 88 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 89 "baz", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 89 Feature::UNSPECIFIED_PLATFORM).result()); | 90 Feature::UNSPECIFIED_PLATFORM).result()); |
| 90 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 91 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 91 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 92 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 92 Feature::UNSPECIFIED_PLATFORM).result()); | 93 Feature::UNSPECIFIED_PLATFORM).result()); |
| 93 | 94 |
| 94 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 95 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 95 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 96 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
| 96 "baz", Extension::TYPE_LEGACY_PACKAGED_APP, | 97 "baz", Manifest::TYPE_LEGACY_PACKAGED_APP, |
| 97 Feature::UNSPECIFIED_LOCATION, -1, | 98 Feature::UNSPECIFIED_LOCATION, -1, |
| 98 Feature::UNSPECIFIED_PLATFORM).result()); | 99 Feature::UNSPECIFIED_PLATFORM).result()); |
| 99 } | 100 } |
| 100 | 101 |
| 101 TEST_F(ExtensionSimpleFeatureTest, PackageType) { | 102 TEST_F(ExtensionSimpleFeatureTest, PackageType) { |
| 102 SimpleFeature feature; | 103 SimpleFeature feature; |
| 103 feature.extension_types()->insert(Extension::TYPE_EXTENSION); | 104 feature.extension_types()->insert(Manifest::TYPE_EXTENSION); |
| 104 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 105 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 105 | 106 |
| 106 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 107 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 107 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, | 108 "", Manifest::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, |
| 108 Feature::UNSPECIFIED_PLATFORM).result()); | 109 Feature::UNSPECIFIED_PLATFORM).result()); |
| 109 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 110 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 110 "", Extension::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, | 111 "", Manifest::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, |
| 111 -1, Feature::UNSPECIFIED_PLATFORM).result()); | 112 -1, Feature::UNSPECIFIED_PLATFORM).result()); |
| 112 | 113 |
| 113 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 114 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( |
| 114 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 115 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 115 Feature::UNSPECIFIED_PLATFORM).result()); | 116 Feature::UNSPECIFIED_PLATFORM).result()); |
| 116 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 117 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( |
| 117 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, | 118 "", Manifest::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, |
| 118 Feature::UNSPECIFIED_PLATFORM).result()); | 119 Feature::UNSPECIFIED_PLATFORM).result()); |
| 119 } | 120 } |
| 120 | 121 |
| 121 TEST_F(ExtensionSimpleFeatureTest, Context) { | 122 TEST_F(ExtensionSimpleFeatureTest, Context) { |
| 122 SimpleFeature feature; | 123 SimpleFeature feature; |
| 123 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 124 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
| 124 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 125 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 125 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 126 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 126 feature.set_min_manifest_version(21); | 127 feature.set_min_manifest_version(21); |
| 127 feature.set_max_manifest_version(25); | 128 feature.set_max_manifest_version(25); |
| 128 | 129 |
| 129 DictionaryValue manifest; | 130 DictionaryValue manifest; |
| 130 manifest.SetString("name", "test"); | 131 manifest.SetString("name", "test"); |
| 131 manifest.SetString("version", "1"); | 132 manifest.SetString("version", "1"); |
| 132 manifest.SetInteger("manifest_version", 21); | 133 manifest.SetInteger("manifest_version", 21); |
| 133 manifest.SetString("app.launch.local_path", "foo.html"); | 134 manifest.SetString("app.launch.local_path", "foo.html"); |
| 134 | 135 |
| 135 std::string error; | 136 std::string error; |
| 136 scoped_refptr<const Extension> extension(Extension::Create( | 137 scoped_refptr<const Extension> extension(Extension::Create( |
| 137 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS, &error)); | 138 FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS, &error)); |
| 138 EXPECT_EQ("", error); | 139 EXPECT_EQ("", error); |
| 139 ASSERT_TRUE(extension.get()); | 140 ASSERT_TRUE(extension.get()); |
| 140 | 141 |
| 141 feature.whitelist()->insert("monkey"); | 142 feature.whitelist()->insert("monkey"); |
| 142 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( | 143 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( |
| 143 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 144 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 144 Feature::CHROMEOS_PLATFORM).result()); | 145 Feature::CHROMEOS_PLATFORM).result()); |
| 145 feature.whitelist()->clear(); | 146 feature.whitelist()->clear(); |
| 146 | 147 |
| 147 feature.extension_types()->clear(); | 148 feature.extension_types()->clear(); |
| 148 feature.extension_types()->insert(Extension::TYPE_THEME); | 149 feature.extension_types()->insert(Manifest::TYPE_THEME); |
| 149 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToContext( | 150 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToContext( |
| 150 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 151 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 151 Feature::CHROMEOS_PLATFORM).result()); | 152 Feature::CHROMEOS_PLATFORM).result()); |
| 152 feature.extension_types()->clear(); | 153 feature.extension_types()->clear(); |
| 153 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); | 154 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 154 | 155 |
| 155 feature.GetContexts()->clear(); | 156 feature.GetContexts()->clear(); |
| 156 feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); | 157 feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); |
| 157 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailableToContext( | 158 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailableToContext( |
| 158 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 159 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 159 Feature::CHROMEOS_PLATFORM).result()); | 160 Feature::CHROMEOS_PLATFORM).result()); |
| 160 feature.GetContexts()->clear(); | 161 feature.GetContexts()->clear(); |
| 161 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 162 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
| 162 | 163 |
| 163 feature.set_location(Feature::COMPONENT_LOCATION); | 164 feature.set_location(Feature::COMPONENT_LOCATION); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 183 feature.set_max_manifest_version(25); | 184 feature.set_max_manifest_version(25); |
| 184 } | 185 } |
| 185 | 186 |
| 186 TEST_F(ExtensionSimpleFeatureTest, Location) { | 187 TEST_F(ExtensionSimpleFeatureTest, Location) { |
| 187 SimpleFeature feature; | 188 SimpleFeature feature; |
| 188 | 189 |
| 189 // If the feature specifies "component" as its location, then only component | 190 // If the feature specifies "component" as its location, then only component |
| 190 // extensions can access it. | 191 // extensions can access it. |
| 191 feature.set_location(Feature::COMPONENT_LOCATION); | 192 feature.set_location(Feature::COMPONENT_LOCATION); |
| 192 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 193 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 193 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 194 "", Manifest::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, |
| 194 Feature::UNSPECIFIED_PLATFORM).result()); | 195 Feature::UNSPECIFIED_PLATFORM).result()); |
| 195 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( | 196 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( |
| 196 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 197 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 197 Feature::UNSPECIFIED_PLATFORM).result()); | 198 Feature::UNSPECIFIED_PLATFORM).result()); |
| 198 | 199 |
| 199 // But component extensions can access anything else, whatever their location. | 200 // But component extensions can access anything else, whatever their location. |
| 200 feature.set_location(Feature::UNSPECIFIED_LOCATION); | 201 feature.set_location(Feature::UNSPECIFIED_LOCATION); |
| 201 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 202 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 202 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 203 "", Manifest::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, |
| 203 Feature::UNSPECIFIED_PLATFORM).result()); | 204 Feature::UNSPECIFIED_PLATFORM).result()); |
| 204 } | 205 } |
| 205 | 206 |
| 206 TEST_F(ExtensionSimpleFeatureTest, Platform) { | 207 TEST_F(ExtensionSimpleFeatureTest, Platform) { |
| 207 SimpleFeature feature; | 208 SimpleFeature feature; |
| 208 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 209 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 209 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 210 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 210 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 211 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 211 Feature::CHROMEOS_PLATFORM).result()); | 212 Feature::CHROMEOS_PLATFORM).result()); |
| 212 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( | 213 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( |
| 213 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 214 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
| 214 Feature::UNSPECIFIED_PLATFORM).result()); | 215 Feature::UNSPECIFIED_PLATFORM).result()); |
| 215 } | 216 } |
| 216 | 217 |
| 217 TEST_F(ExtensionSimpleFeatureTest, Version) { | 218 TEST_F(ExtensionSimpleFeatureTest, Version) { |
| 218 SimpleFeature feature; | 219 SimpleFeature feature; |
| 219 feature.set_min_manifest_version(5); | 220 feature.set_min_manifest_version(5); |
| 220 | 221 |
| 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 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 224 0, Feature::UNSPECIFIED_PLATFORM).result()); | 225 0, Feature::UNSPECIFIED_PLATFORM).result()); |
| 225 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, | 226 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, |
| 226 feature.IsAvailableToManifest( | 227 feature.IsAvailableToManifest( |
| 227 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 228 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 228 4, Feature::UNSPECIFIED_PLATFORM).result()); | 229 4, Feature::UNSPECIFIED_PLATFORM).result()); |
| 229 | 230 |
| 230 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 231 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 231 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 232 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 232 5, Feature::UNSPECIFIED_PLATFORM).result()); | 233 5, Feature::UNSPECIFIED_PLATFORM).result()); |
| 233 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 234 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 234 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 235 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 235 10, Feature::UNSPECIFIED_PLATFORM).result()); | 236 10, Feature::UNSPECIFIED_PLATFORM).result()); |
| 236 | 237 |
| 237 feature.set_max_manifest_version(8); | 238 feature.set_max_manifest_version(8); |
| 238 | 239 |
| 239 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, | 240 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, |
| 240 feature.IsAvailableToManifest( | 241 feature.IsAvailableToManifest( |
| 241 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 242 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 242 10, Feature::UNSPECIFIED_PLATFORM).result()); | 243 10, Feature::UNSPECIFIED_PLATFORM).result()); |
| 243 EXPECT_EQ(Feature::IS_AVAILABLE, | 244 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 244 feature.IsAvailableToManifest( | 245 feature.IsAvailableToManifest( |
| 245 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 246 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 246 8, Feature::UNSPECIFIED_PLATFORM).result()); | 247 8, Feature::UNSPECIFIED_PLATFORM).result()); |
| 247 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 248 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
| 248 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 249 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, |
| 249 7, Feature::UNSPECIFIED_PLATFORM).result()); | 250 7, Feature::UNSPECIFIED_PLATFORM).result()); |
| 250 } | 251 } |
| 251 | 252 |
| 252 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { | 253 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { |
| 253 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 254 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 254 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 255 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 255 feature->Parse(value.get()); | 256 feature->Parse(value.get()); |
| 256 EXPECT_TRUE(feature->whitelist()->empty()); | 257 EXPECT_TRUE(feature->whitelist()->empty()); |
| 257 EXPECT_TRUE(feature->extension_types()->empty()); | 258 EXPECT_TRUE(feature->extension_types()->empty()); |
| 258 EXPECT_TRUE(feature->GetContexts()->empty()); | 259 EXPECT_TRUE(feature->GetContexts()->empty()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 280 ListValue* extension_types = new ListValue(); | 281 ListValue* extension_types = new ListValue(); |
| 281 extension_types->Append(Value::CreateStringValue("extension")); | 282 extension_types->Append(Value::CreateStringValue("extension")); |
| 282 extension_types->Append(Value::CreateStringValue("theme")); | 283 extension_types->Append(Value::CreateStringValue("theme")); |
| 283 extension_types->Append(Value::CreateStringValue("packaged_app")); | 284 extension_types->Append(Value::CreateStringValue("packaged_app")); |
| 284 extension_types->Append(Value::CreateStringValue("hosted_app")); | 285 extension_types->Append(Value::CreateStringValue("hosted_app")); |
| 285 extension_types->Append(Value::CreateStringValue("platform_app")); | 286 extension_types->Append(Value::CreateStringValue("platform_app")); |
| 286 value->Set("extension_types", extension_types); | 287 value->Set("extension_types", extension_types); |
| 287 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 288 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 288 feature->Parse(value.get()); | 289 feature->Parse(value.get()); |
| 289 EXPECT_EQ(5u, feature->extension_types()->size()); | 290 EXPECT_EQ(5u, feature->extension_types()->size()); |
| 290 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); | 291 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_EXTENSION)); |
| 291 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); | 292 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_THEME)); |
| 292 EXPECT_TRUE(feature->extension_types()->count( | 293 EXPECT_TRUE(feature->extension_types()->count( |
| 293 Extension::TYPE_LEGACY_PACKAGED_APP)); | 294 Manifest::TYPE_LEGACY_PACKAGED_APP)); |
| 294 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); | 295 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_HOSTED_APP)); |
| 295 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); | 296 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_PLATFORM_APP)); |
| 296 | 297 |
| 297 value->SetString("extension_types", "all"); | 298 value->SetString("extension_types", "all"); |
| 298 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); | 299 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
| 299 feature2->Parse(value.get()); | 300 feature2->Parse(value.get()); |
| 300 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); | 301 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); |
| 301 } | 302 } |
| 302 | 303 |
| 303 TEST_F(ExtensionSimpleFeatureTest, ParseContexts) { | 304 TEST_F(ExtensionSimpleFeatureTest, ParseContexts) { |
| 304 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | 305 scoped_ptr<DictionaryValue> value(new DictionaryValue()); |
| 305 ListValue* contexts = new ListValue(); | 306 ListValue* contexts = new ListValue(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 value->SetInteger("max_manifest_version", 5); | 349 value->SetInteger("max_manifest_version", 5); |
| 349 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 350 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 350 feature->Parse(value.get()); | 351 feature->Parse(value.get()); |
| 351 EXPECT_EQ(1, feature->min_manifest_version()); | 352 EXPECT_EQ(1, feature->min_manifest_version()); |
| 352 EXPECT_EQ(5, feature->max_manifest_version()); | 353 EXPECT_EQ(5, feature->max_manifest_version()); |
| 353 } | 354 } |
| 354 | 355 |
| 355 TEST_F(ExtensionSimpleFeatureTest, Inheritance) { | 356 TEST_F(ExtensionSimpleFeatureTest, Inheritance) { |
| 356 SimpleFeature feature; | 357 SimpleFeature feature; |
| 357 feature.whitelist()->insert("foo"); | 358 feature.whitelist()->insert("foo"); |
| 358 feature.extension_types()->insert(Extension::TYPE_THEME); | 359 feature.extension_types()->insert(Manifest::TYPE_THEME); |
| 359 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 360 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
| 360 feature.set_location(Feature::COMPONENT_LOCATION); | 361 feature.set_location(Feature::COMPONENT_LOCATION); |
| 361 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 362 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 362 feature.set_min_manifest_version(1); | 363 feature.set_min_manifest_version(1); |
| 363 feature.set_max_manifest_version(2); | 364 feature.set_max_manifest_version(2); |
| 364 | 365 |
| 365 SimpleFeature feature2 = feature; | 366 SimpleFeature feature2 = feature; |
| 366 EXPECT_TRUE(feature2.Equals(feature)); | 367 EXPECT_TRUE(feature2.Equals(feature)); |
| 367 | 368 |
| 368 DictionaryValue definition; | 369 DictionaryValue definition; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 381 // Can't test location or platform because we only have one value so far. | 382 // Can't test location or platform because we only have one value so far. |
| 382 definition.Set("min_manifest_version", Value::CreateIntegerValue(2)); | 383 definition.Set("min_manifest_version", Value::CreateIntegerValue(2)); |
| 383 definition.Set("max_manifest_version", Value::CreateIntegerValue(3)); | 384 definition.Set("max_manifest_version", Value::CreateIntegerValue(3)); |
| 384 | 385 |
| 385 feature2.Parse(&definition); | 386 feature2.Parse(&definition); |
| 386 EXPECT_FALSE(feature2.Equals(feature)); | 387 EXPECT_FALSE(feature2.Equals(feature)); |
| 387 EXPECT_EQ(1u, feature2.whitelist()->size()); | 388 EXPECT_EQ(1u, feature2.whitelist()->size()); |
| 388 EXPECT_EQ(1u, feature2.extension_types()->size()); | 389 EXPECT_EQ(1u, feature2.extension_types()->size()); |
| 389 EXPECT_EQ(1u, feature2.GetContexts()->size()); | 390 EXPECT_EQ(1u, feature2.GetContexts()->size()); |
| 390 EXPECT_EQ(1u, feature2.whitelist()->count("bar")); | 391 EXPECT_EQ(1u, feature2.whitelist()->count("bar")); |
| 391 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION)); | 392 EXPECT_EQ(1u, feature2.extension_types()->count(Manifest::TYPE_EXTENSION)); |
| 392 EXPECT_EQ(1u, feature2.GetContexts()->count( | 393 EXPECT_EQ(1u, feature2.GetContexts()->count( |
| 393 Feature::UNBLESSED_EXTENSION_CONTEXT)); | 394 Feature::UNBLESSED_EXTENSION_CONTEXT)); |
| 394 EXPECT_EQ(2, feature2.min_manifest_version()); | 395 EXPECT_EQ(2, feature2.min_manifest_version()); |
| 395 EXPECT_EQ(3, feature2.max_manifest_version()); | 396 EXPECT_EQ(3, feature2.max_manifest_version()); |
| 396 } | 397 } |
| 397 | 398 |
| 398 TEST_F(ExtensionSimpleFeatureTest, Equals) { | 399 TEST_F(ExtensionSimpleFeatureTest, Equals) { |
| 399 SimpleFeature feature; | 400 SimpleFeature feature; |
| 400 feature.whitelist()->insert("foo"); | 401 feature.whitelist()->insert("foo"); |
| 401 feature.extension_types()->insert(Extension::TYPE_THEME); | 402 feature.extension_types()->insert(Manifest::TYPE_THEME); |
| 402 feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); | 403 feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); |
| 403 feature.set_location(Feature::COMPONENT_LOCATION); | 404 feature.set_location(Feature::COMPONENT_LOCATION); |
| 404 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 405 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
| 405 feature.set_min_manifest_version(18); | 406 feature.set_min_manifest_version(18); |
| 406 feature.set_max_manifest_version(25); | 407 feature.set_max_manifest_version(25); |
| 407 | 408 |
| 408 SimpleFeature feature2(feature); | 409 SimpleFeature feature2(feature); |
| 409 EXPECT_TRUE(feature2.Equals(feature)); | 410 EXPECT_TRUE(feature2.Equals(feature)); |
| 410 | 411 |
| 411 feature2.whitelist()->clear(); | 412 feature2.whitelist()->clear(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 442 | 443 |
| 443 SimpleFeature feature; | 444 SimpleFeature feature; |
| 444 if (!channel.empty()) { | 445 if (!channel.empty()) { |
| 445 DictionaryValue feature_value; | 446 DictionaryValue feature_value; |
| 446 feature_value.SetString("channel", channel); | 447 feature_value.SetString("channel", channel); |
| 447 feature.Parse(&feature_value); | 448 feature.Parse(&feature_value); |
| 448 } | 449 } |
| 449 | 450 |
| 450 return feature.IsAvailableToManifest( | 451 return feature.IsAvailableToManifest( |
| 451 "random-extension", | 452 "random-extension", |
| 452 Extension::TYPE_UNKNOWN, | 453 Manifest::TYPE_UNKNOWN, |
| 453 Feature::UNSPECIFIED_LOCATION, | 454 Feature::UNSPECIFIED_LOCATION, |
| 454 -1, | 455 -1, |
| 455 Feature::GetCurrentPlatform()).result(); | 456 Feature::GetCurrentPlatform()).result(); |
| 456 } | 457 } |
| 457 | 458 |
| 458 TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) { | 459 TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) { |
| 459 // stable supported. | 460 // stable supported. |
| 460 EXPECT_EQ(Feature::IS_AVAILABLE, | 461 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 461 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); | 462 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); |
| 462 EXPECT_EQ(Feature::IS_AVAILABLE, | 463 EXPECT_EQ(Feature::IS_AVAILABLE, |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); | 524 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); |
| 524 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 525 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 525 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); | 526 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); |
| 526 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 527 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 527 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); | 528 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); |
| 528 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 529 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
| 529 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); | 530 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); |
| 530 } | 531 } |
| 531 | 532 |
| 532 } // namespace | 533 } // namespace |
| OLD | NEW |