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

Side by Side Diff: chrome/common/extensions/api/extension_api_unittest.cc

Issue 802653003: Convert EventRouter to use ProcessMap::GetMostLikelyContextType rather than (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: delete some code! Created 6 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
« no previous file with comments | « no previous file | extensions/browser/event_router.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "extensions/common/extension_api.h" 5 #include "extensions/common/extension_api.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 for (size_t i = 0; i < arraysize(test_data); ++i) { 78 for (size_t i = 0; i < arraysize(test_data); ++i) {
79 std::string feature_type; 79 std::string feature_type;
80 std::string feature_name; 80 std::string feature_name;
81 ExtensionAPI::SplitDependencyName( 81 ExtensionAPI::SplitDependencyName(
82 test_data[i].input, &feature_type, &feature_name); 82 test_data[i].input, &feature_type, &feature_name);
83 EXPECT_EQ(test_data[i].expected_feature_type, feature_type) << i; 83 EXPECT_EQ(test_data[i].expected_feature_type, feature_type) << i;
84 EXPECT_EQ(test_data[i].expected_feature_name, feature_name) << i; 84 EXPECT_EQ(test_data[i].expected_feature_name, feature_name) << i;
85 } 85 }
86 } 86 }
87 87
88 TEST(ExtensionAPITest, IsAvailableInUntrustedContext) {
89 scoped_ptr<ExtensionAPI> extension_api(
90 ExtensionAPI::CreateWithDefaultConfiguration());
91 scoped_refptr<const Extension> extension =
92 ExtensionBuilder()
93 .SetManifest(DictionaryBuilder()
94 .Set("name", "extension")
95 .Set("version", "1")
96 .Set("permissions", ListBuilder().Append("storage"))
97 .Set("manifest_version", 2))
98 .Build();
99
100 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("runtime.connect",
101 extension.get()));
102 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("runtime.onConnect",
103 extension.get()));
104 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("runtime.lastError",
105 extension.get()));
106
107 // Exists, but privileged.
108 EXPECT_FALSE(extension_api->IsAvailableInUntrustedContext(
109 "extension.getViews", extension.get()));
110 EXPECT_FALSE(extension_api->IsAvailableInUntrustedContext("history.search",
111 extension.get()));
112
113 // Whole APIs that are unprivileged.
114 EXPECT_TRUE(
115 extension_api->IsAvailableInUntrustedContext("app", extension.get()));
116 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("app.getDetails",
117 extension.get()));
118 // There is no feature "app.isInstalled" (it's "app.getIsInstalled") but
119 // this should be available nonetheless.
120 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("app.isInstalled",
121 extension.get()));
122 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("storage.local",
123 extension.get()));
124 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext(
125 "storage.local.onChanged", extension.get()));
126 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("storage.local.set",
127 extension.get()));
128 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext(
129 "storage.local.MAX_ITEMS", extension.get()));
130 EXPECT_TRUE(extension_api->IsAvailableInUntrustedContext("storage.set",
131 extension.get()));
132
133 // APIs which override unprivileged APIs.
134 EXPECT_FALSE(extension_api->IsAvailableInUntrustedContext("app.runtime",
135 extension.get()));
136 EXPECT_FALSE(extension_api->IsAvailableInUntrustedContext("app.window",
137 extension.get()));
138 }
139
140 TEST(ExtensionAPITest, IsAvailableInUntrustedContextFeatures) {
141 struct {
142 std::string api_full_name;
143 bool expect_is_available;
144 } test_data[] = {{"test1", true},
145 {"test1.foo", false},
146 {"test2", false},
147 {"test2.foo", true},
148 {"test2.bar", true},
149 {"test2.baz", false},
150 {"test2.qux", false},
151 {"test3", true},
152 {"test3.foo", false},
153 {"test4", true},
154 {"test5", true}};
155
156 base::FilePath api_features_path;
157 PathService::Get(chrome::DIR_TEST_DATA, &api_features_path);
158 api_features_path = api_features_path.AppendASCII("extensions")
159 .AppendASCII("extension_api_unittest")
160 .AppendASCII("privileged_api_features.json");
161
162 std::string api_features_str;
163 ASSERT_TRUE(base::ReadFileToString(
164 api_features_path, &api_features_str)) << "privileged_api_features.json";
165
166 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>(
167 base::JSONReader::Read(api_features_str)));
168 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature);
169
170 scoped_refptr<Extension> extension =
171 BuildExtension(ExtensionBuilder().Pass()).Build();
172
173 for (size_t i = 0; i < arraysize(test_data); ++i) {
174 ExtensionAPI api;
175 api.RegisterDependencyProvider("api", &api_feature_provider);
176 EXPECT_EQ(test_data[i].expect_is_available,
177 api.IsAvailableInUntrustedContext(test_data[i].api_full_name,
178 extension.get()))
179 << i;
180 }
181 }
182
183 TEST(ExtensionAPITest, APIFeatures) { 88 TEST(ExtensionAPITest, APIFeatures) {
184 struct { 89 struct {
185 std::string api_full_name; 90 std::string api_full_name;
186 bool expect_is_available; 91 bool expect_is_available;
187 Feature::Context context; 92 Feature::Context context;
188 GURL url; 93 GURL url;
189 } test_data[] = { 94 } test_data[] = {
190 { "test1", false, Feature::WEB_PAGE_CONTEXT, GURL() }, 95 { "test1", false, Feature::WEB_PAGE_CONTEXT, GURL() },
191 { "test1", true, Feature::BLESSED_EXTENSION_CONTEXT, GURL() }, 96 { "test1", true, Feature::BLESSED_EXTENSION_CONTEXT, GURL() },
192 { "test1", true, Feature::UNBLESSED_EXTENSION_CONTEXT, GURL() }, 97 { "test1", true, Feature::UNBLESSED_EXTENSION_CONTEXT, GURL() },
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 extension.get(), 831 extension.get(),
927 Feature::BLESSED_EXTENSION_CONTEXT, 832 Feature::BLESSED_EXTENSION_CONTEXT,
928 GURL()).is_available()); 833 GURL()).is_available());
929 EXPECT_FALSE(extension_api->IsAvailable("pageAction", 834 EXPECT_FALSE(extension_api->IsAvailable("pageAction",
930 extension.get(), 835 extension.get(),
931 Feature::BLESSED_EXTENSION_CONTEXT, 836 Feature::BLESSED_EXTENSION_CONTEXT,
932 GURL()).is_available()); 837 GURL()).is_available());
933 } 838 }
934 839
935 } // namespace extensions 840 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | extensions/browser/event_router.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698