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

Side by Side Diff: chrome/common/extensions/features/simple_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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/common/extensions/features/simple_feature_provider.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 using extensions::Extension;
10 using extensions::Feature;
11 using extensions::SimpleFeatureProvider;
12
13 TEST(SimpleFeatureProvider, ManifestFeatures) {
14 SimpleFeatureProvider* provider =
15 SimpleFeatureProvider::GetManifestFeatures();
16 Feature* feature = provider->GetFeature("description");
17 ASSERT_TRUE(feature);
18 EXPECT_EQ(5u, feature->extension_types()->size());
19 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION));
20 EXPECT_EQ(1u,
21 feature->extension_types()->count(Extension::TYPE_LEGACY_PACKAGED_APP));
22 EXPECT_EQ(1u,
23 feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
24 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_HOSTED_APP));
25 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_THEME));
26
27 DictionaryValue manifest;
28 manifest.SetString("name", "test extension");
29 manifest.SetString("version", "1");
30 manifest.SetString("description", "hello there");
31
32 std::string error;
33 scoped_refptr<const Extension> extension(Extension::Create(
34 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS,
35 &error));
36
37 ASSERT_TRUE(extension.get());
38 EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext(
39 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
40
41 feature = provider->GetFeature("theme");
42 ASSERT_TRUE(feature);
43 EXPECT_EQ(Feature::INVALID_TYPE, feature->IsAvailableToContext(
44 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
45
46 feature = provider->GetFeature("devtools_page");
47 ASSERT_TRUE(feature);
48 EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext(
49 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
50 }
51
52 TEST(SimpleFeatureProvider, PermissionFeatures) {
53 SimpleFeatureProvider* provider =
54 SimpleFeatureProvider::GetPermissionFeatures();
55 Feature* feature = provider->GetFeature("contextMenus");
56 ASSERT_TRUE(feature);
57 EXPECT_EQ(3u, feature->extension_types()->size());
58 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION));
59 EXPECT_EQ(1u,
60 feature->extension_types()->count(Extension::TYPE_LEGACY_PACKAGED_APP));
61 EXPECT_EQ(1u,
62 feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
63
64 DictionaryValue manifest;
65 manifest.SetString("name", "test extension");
66 manifest.SetString("version", "1");
67 ListValue* permissions = new ListValue();
68 manifest.Set("permissions", permissions);
69 permissions->Append(Value::CreateStringValue("contextMenus"));
70
71 std::string error;
72 scoped_refptr<const Extension> extension(Extension::Create(
73 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS,
74 &error));
75
76 ASSERT_TRUE(extension.get());
77 EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext(
78 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
79
80 feature = provider->GetFeature("chromePrivate");
81 ASSERT_TRUE(feature);
82 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature->IsAvailableToContext(
83 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
84
85 feature = provider->GetFeature("clipboardWrite");
86 ASSERT_TRUE(feature);
87 EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext(
88 extension.get(), Feature::UNSPECIFIED_CONTEXT).result());
89 }
90
91 TEST(SimpleFeatureProvider, Validation) {
92 scoped_ptr<DictionaryValue> value(new DictionaryValue());
93
94 DictionaryValue* feature1 = new DictionaryValue();
95 value->Set("feature1", feature1);
96
97 DictionaryValue* feature2 = new DictionaryValue();
98 ListValue* extension_types = new ListValue();
99 extension_types->Append(Value::CreateStringValue("extension"));
100 feature2->Set("extension_types", extension_types);
101 ListValue* contexts = new ListValue();
102 contexts->Append(Value::CreateStringValue("blessed_extension"));
103 feature2->Set("contexts", contexts);
104 value->Set("feature2", feature2);
105
106 scoped_ptr<SimpleFeatureProvider> provider(
107 new SimpleFeatureProvider(value.get(), NULL));
108
109 // feature1 won't validate because it lacks an extension type.
110 EXPECT_FALSE(provider->GetFeature("feature1"));
111
112 // If we add one, it works.
113 feature1->Set("extension_types", extension_types->DeepCopy());
114 provider.reset(new SimpleFeatureProvider(value.get(), NULL));
115 EXPECT_TRUE(provider->GetFeature("feature1"));
116
117 // feature2 won't validate because of the presence of "contexts".
118 EXPECT_FALSE(provider->GetFeature("feature2"));
119
120 // If we remove it, it works.
121 feature2->Remove("contexts", NULL);
122 provider.reset(new SimpleFeatureProvider(value.get(), NULL));
123 EXPECT_TRUE(provider->GetFeature("feature2"));
124 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698