| Index: chrome/common/extensions/features/base_feature_provider_unittest.cc
|
| diff --git a/chrome/common/extensions/features/simple_feature_provider_unittest.cc b/chrome/common/extensions/features/base_feature_provider_unittest.cc
|
| similarity index 55%
|
| rename from chrome/common/extensions/features/simple_feature_provider_unittest.cc
|
| rename to chrome/common/extensions/features/base_feature_provider_unittest.cc
|
| index 0503ddc7a30e99f406d50950145ec7b93d104a2d..8a6991fca3c18b8e0867d0833ac00197c7e1bebc 100644
|
| --- a/chrome/common/extensions/features/simple_feature_provider_unittest.cc
|
| +++ b/chrome/common/extensions/features/base_feature_provider_unittest.cc
|
| @@ -2,18 +2,24 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/common/extensions/features/simple_feature_provider.h"
|
| +#include "chrome/common/extensions/features/base_feature_provider.h"
|
|
|
| +#include "chrome/common/extensions/value_builder.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using chrome::VersionInfo;
|
| +using extensions::DictionaryBuilder;
|
| using extensions::Extension;
|
| using extensions::Feature;
|
| -using extensions::SimpleFeatureProvider;
|
| -
|
| -TEST(SimpleFeatureProvider, ManifestFeatures) {
|
| - SimpleFeatureProvider* provider =
|
| - SimpleFeatureProvider::GetManifestFeatures();
|
| - Feature* feature = provider->GetFeature("description");
|
| +using extensions::ListBuilder;
|
| +using extensions::SimpleFeature;
|
| +using extensions::BaseFeatureProvider;
|
| +
|
| +TEST(BaseFeatureProvider, ManifestFeatures) {
|
| + BaseFeatureProvider* provider =
|
| + BaseFeatureProvider::GetManifestFeatures();
|
| + SimpleFeature* feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("description"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(5u, feature->extension_types()->size());
|
| EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION));
|
| @@ -38,21 +44,24 @@ TEST(SimpleFeatureProvider, ManifestFeatures) {
|
| EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
|
|
| - feature = provider->GetFeature("theme");
|
| + feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("theme"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(Feature::INVALID_TYPE, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
|
|
| - feature = provider->GetFeature("devtools_page");
|
| + feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("devtools_page"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
| }
|
|
|
| -TEST(SimpleFeatureProvider, PermissionFeatures) {
|
| - SimpleFeatureProvider* provider =
|
| - SimpleFeatureProvider::GetPermissionFeatures();
|
| - Feature* feature = provider->GetFeature("contextMenus");
|
| +TEST(BaseFeatureProvider, PermissionFeatures) {
|
| + BaseFeatureProvider* provider =
|
| + BaseFeatureProvider::GetPermissionFeatures();
|
| + SimpleFeature* feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("contextMenus"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(3u, feature->extension_types()->size());
|
| EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION));
|
| @@ -77,18 +86,20 @@ TEST(SimpleFeatureProvider, PermissionFeatures) {
|
| EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
|
|
| - feature = provider->GetFeature("chromePrivate");
|
| + feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("chromePrivate"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
|
|
| - feature = provider->GetFeature("clipboardWrite");
|
| + feature =
|
| + static_cast<SimpleFeature*>(provider->GetFeature("clipboardWrite"));
|
| ASSERT_TRUE(feature);
|
| EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext(
|
| extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
|
| }
|
|
|
| -TEST(SimpleFeatureProvider, Validation) {
|
| +TEST(BaseFeatureProvider, Validation) {
|
| scoped_ptr<DictionaryValue> value(new DictionaryValue());
|
|
|
| DictionaryValue* feature1 = new DictionaryValue();
|
| @@ -103,15 +114,15 @@ TEST(SimpleFeatureProvider, Validation) {
|
| feature2->Set("contexts", contexts);
|
| value->Set("feature2", feature2);
|
|
|
| - scoped_ptr<SimpleFeatureProvider> provider(
|
| - new SimpleFeatureProvider(value.get(), NULL));
|
| + scoped_ptr<BaseFeatureProvider> provider(
|
| + new BaseFeatureProvider(*value, NULL));
|
|
|
| // feature1 won't validate because it lacks an extension type.
|
| EXPECT_FALSE(provider->GetFeature("feature1"));
|
|
|
| // If we add one, it works.
|
| feature1->Set("extension_types", extension_types->DeepCopy());
|
| - provider.reset(new SimpleFeatureProvider(value.get(), NULL));
|
| + provider.reset(new BaseFeatureProvider(*value, NULL));
|
| EXPECT_TRUE(provider->GetFeature("feature1"));
|
|
|
| // feature2 won't validate because of the presence of "contexts".
|
| @@ -119,6 +130,55 @@ TEST(SimpleFeatureProvider, Validation) {
|
|
|
| // If we remove it, it works.
|
| feature2->Remove("contexts", NULL);
|
| - provider.reset(new SimpleFeatureProvider(value.get(), NULL));
|
| + provider.reset(new BaseFeatureProvider(*value, NULL));
|
| EXPECT_TRUE(provider->GetFeature("feature2"));
|
| }
|
| +
|
| +TEST(BaseFeatureProvider, ComplexFeatures) {
|
| + scoped_ptr<DictionaryValue> rule(
|
| + DictionaryBuilder()
|
| + .Set("feature1",
|
| + ListBuilder().Append(DictionaryBuilder()
|
| + .Set("channel", "beta")
|
| + .Set("extension_types",
|
| + ListBuilder().Append("extension")))
|
| + .Append(DictionaryBuilder()
|
| + .Set("channel", "beta")
|
| + .Set("extension_types",
|
| + ListBuilder().Append("packaged_app"))))
|
| + .Build());
|
| +
|
| + scoped_ptr<BaseFeatureProvider> provider(
|
| + new BaseFeatureProvider(*rule, NULL));
|
| +
|
| + Feature *feature = provider->GetFeature("feature1");
|
| + EXPECT_TRUE(feature);
|
| +
|
| + // Make sure both rules are applied correctly.
|
| + {
|
| + Feature::ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_BETA);
|
| + EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
|
| + "1",
|
| + Extension::TYPE_EXTENSION,
|
| + Feature::UNSPECIFIED_LOCATION,
|
| + Feature::UNSPECIFIED_PLATFORM).result());
|
| + EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
|
| + "2",
|
| + Extension::TYPE_LEGACY_PACKAGED_APP,
|
| + Feature::UNSPECIFIED_LOCATION,
|
| + Feature::UNSPECIFIED_PLATFORM).result());
|
| + }
|
| + {
|
| + Feature::ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_STABLE);
|
| + EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
|
| + "1",
|
| + Extension::TYPE_EXTENSION,
|
| + Feature::UNSPECIFIED_LOCATION,
|
| + Feature::UNSPECIFIED_PLATFORM).result());
|
| + EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
|
| + "2",
|
| + Extension::TYPE_LEGACY_PACKAGED_APP,
|
| + Feature::UNSPECIFIED_LOCATION,
|
| + Feature::UNSPECIFIED_PLATFORM).result());
|
| + }
|
| +}
|
|
|