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

Unified Diff: chrome/common/extensions/features/base_feature_provider_unittest.cc

Issue 11316164: Implement ComplexFeature to support permission features with multiple rules. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renames and add TODO Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
+ }
+}
« no previous file with comments | « chrome/common/extensions/features/base_feature_provider.cc ('k') | chrome/common/extensions/features/complex_feature.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698