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 <utility> | 5 #include <utility> |
6 | 6 |
7 #include "base/test/values_test_util.h" | 7 #include "base/test/values_test_util.h" |
8 #include "extensions/common/manifest_constants.h" | 8 #include "extensions/common/manifest_constants.h" |
9 #include "extensions/common/manifest_handlers/oauth2_manifest_handler.h" | 9 #include "extensions/common/manifest_handlers/oauth2_manifest_handler.h" |
10 #include "extensions/common/manifest_test.h" | 10 #include "extensions/common/manifest_test.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 AUTO_APPROVE_TRUE, | 35 AUTO_APPROVE_TRUE, |
36 AUTO_APPROVE_INVALID | 36 AUTO_APPROVE_INVALID |
37 }; | 37 }; |
38 | 38 |
39 enum ClientIdValue { | 39 enum ClientIdValue { |
40 CLIENT_ID_DEFAULT, | 40 CLIENT_ID_DEFAULT, |
41 CLIENT_ID_NOT_SET, | 41 CLIENT_ID_NOT_SET, |
42 CLIENT_ID_EMPTY | 42 CLIENT_ID_EMPTY |
43 }; | 43 }; |
44 | 44 |
45 scoped_ptr<base::DictionaryValue> CreateManifest( | 45 std::unique_ptr<base::DictionaryValue> CreateManifest( |
46 AutoApproveValue auto_approve, | 46 AutoApproveValue auto_approve, |
47 bool extension_id_whitelisted, | 47 bool extension_id_whitelisted, |
48 ClientIdValue client_id) { | 48 ClientIdValue client_id) { |
49 scoped_ptr<base::DictionaryValue> manifest = base::DictionaryValue::From( | 49 std::unique_ptr<base::DictionaryValue> manifest = |
50 base::test::ParseJson("{ \n" | 50 base::DictionaryValue::From( |
51 " \"name\": \"test\", \n" | 51 base::test::ParseJson("{ \n" |
52 " \"version\": \"0.1\", \n" | 52 " \"name\": \"test\", \n" |
53 " \"manifest_version\": 2, \n" | 53 " \"version\": \"0.1\", \n" |
54 " \"oauth2\": { \n" | 54 " \"manifest_version\": 2, \n" |
55 " \"scopes\": [ \"scope1\" ], \n" | 55 " \"oauth2\": { \n" |
56 " }, \n" | 56 " \"scopes\": [ \"scope1\" ], \n" |
57 "} \n")); | 57 " }, \n" |
| 58 "} \n")); |
58 EXPECT_TRUE(manifest); | 59 EXPECT_TRUE(manifest); |
59 switch (auto_approve) { | 60 switch (auto_approve) { |
60 case AUTO_APPROVE_NOT_SET: | 61 case AUTO_APPROVE_NOT_SET: |
61 break; | 62 break; |
62 case AUTO_APPROVE_FALSE: | 63 case AUTO_APPROVE_FALSE: |
63 manifest->SetBoolean(keys::kOAuth2AutoApprove, false); | 64 manifest->SetBoolean(keys::kOAuth2AutoApprove, false); |
64 break; | 65 break; |
65 case AUTO_APPROVE_TRUE: | 66 case AUTO_APPROVE_TRUE: |
66 manifest->SetBoolean(keys::kOAuth2AutoApprove, true); | 67 manifest->SetBoolean(keys::kOAuth2AutoApprove, true); |
67 break; | 68 break; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 EXPECT_EQ("'oauth2' is only allowed for extensions, legacy packaged apps, " | 150 EXPECT_EQ("'oauth2' is only allowed for extensions, legacy packaged apps, " |
150 "and packaged apps, but this is a hosted app.", | 151 "and packaged apps, but this is a hosted app.", |
151 warning.message); | 152 warning.message); |
152 EXPECT_EQ("", OAuth2Info::GetOAuth2Info(extension.get()).client_id); | 153 EXPECT_EQ("", OAuth2Info::GetOAuth2Info(extension.get()).client_id); |
153 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).scopes.empty()); | 154 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).scopes.empty()); |
154 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 155 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
155 } | 156 } |
156 } | 157 } |
157 | 158 |
158 TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionNotOnWhitelist) { | 159 TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionNotOnWhitelist) { |
159 scoped_ptr<base::DictionaryValue> ext_manifest = | 160 std::unique_ptr<base::DictionaryValue> ext_manifest = |
160 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_DEFAULT); | 161 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_DEFAULT); |
161 ManifestData manifest(std::move(ext_manifest), "test"); | 162 ManifestData manifest(std::move(ext_manifest), "test"); |
162 scoped_refptr<extensions::Extension> extension = | 163 scoped_refptr<extensions::Extension> extension = |
163 LoadAndExpectSuccess(manifest); | 164 LoadAndExpectSuccess(manifest); |
164 EXPECT_TRUE(extension->install_warnings().empty()); | 165 EXPECT_TRUE(extension->install_warnings().empty()); |
165 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 166 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
166 } | 167 } |
167 | 168 |
168 TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionNotOnWhitelist) { | 169 TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionNotOnWhitelist) { |
169 scoped_ptr<base::DictionaryValue> ext_manifest = | 170 std::unique_ptr<base::DictionaryValue> ext_manifest = |
170 CreateManifest(AUTO_APPROVE_FALSE, false, CLIENT_ID_DEFAULT); | 171 CreateManifest(AUTO_APPROVE_FALSE, false, CLIENT_ID_DEFAULT); |
171 ManifestData manifest(std::move(ext_manifest), "test"); | 172 ManifestData manifest(std::move(ext_manifest), "test"); |
172 scoped_refptr<extensions::Extension> extension = | 173 scoped_refptr<extensions::Extension> extension = |
173 LoadAndExpectSuccess(manifest); | 174 LoadAndExpectSuccess(manifest); |
174 EXPECT_EQ(1U, extension->install_warnings().size()); | 175 EXPECT_EQ(1U, extension->install_warnings().size()); |
175 const extensions::InstallWarning& warning = | 176 const extensions::InstallWarning& warning = |
176 extension->install_warnings()[0]; | 177 extension->install_warnings()[0]; |
177 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); | 178 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); |
178 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 179 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
179 } | 180 } |
180 | 181 |
181 TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionNotOnWhitelist) { | 182 TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionNotOnWhitelist) { |
182 scoped_ptr<base::DictionaryValue> ext_manifest = | 183 std::unique_ptr<base::DictionaryValue> ext_manifest = |
183 CreateManifest(AUTO_APPROVE_TRUE, false, CLIENT_ID_DEFAULT); | 184 CreateManifest(AUTO_APPROVE_TRUE, false, CLIENT_ID_DEFAULT); |
184 ManifestData manifest(std::move(ext_manifest), "test"); | 185 ManifestData manifest(std::move(ext_manifest), "test"); |
185 scoped_refptr<extensions::Extension> extension = | 186 scoped_refptr<extensions::Extension> extension = |
186 LoadAndExpectSuccess(manifest); | 187 LoadAndExpectSuccess(manifest); |
187 EXPECT_EQ(1U, extension->install_warnings().size()); | 188 EXPECT_EQ(1U, extension->install_warnings().size()); |
188 const extensions::InstallWarning& warning = | 189 const extensions::InstallWarning& warning = |
189 extension->install_warnings()[0]; | 190 extension->install_warnings()[0]; |
190 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); | 191 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); |
191 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 192 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
192 } | 193 } |
193 | 194 |
194 TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionNotOnWhitelist) { | 195 TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionNotOnWhitelist) { |
195 scoped_ptr<base::DictionaryValue> ext_manifest = | 196 std::unique_ptr<base::DictionaryValue> ext_manifest = |
196 CreateManifest(AUTO_APPROVE_INVALID, false, CLIENT_ID_DEFAULT); | 197 CreateManifest(AUTO_APPROVE_INVALID, false, CLIENT_ID_DEFAULT); |
197 ManifestData manifest(std::move(ext_manifest), "test"); | 198 ManifestData manifest(std::move(ext_manifest), "test"); |
198 scoped_refptr<extensions::Extension> extension = | 199 scoped_refptr<extensions::Extension> extension = |
199 LoadAndExpectSuccess(manifest); | 200 LoadAndExpectSuccess(manifest); |
200 EXPECT_EQ(1U, extension->install_warnings().size()); | 201 EXPECT_EQ(1U, extension->install_warnings().size()); |
201 const extensions::InstallWarning& warning = | 202 const extensions::InstallWarning& warning = |
202 extension->install_warnings()[0]; | 203 extension->install_warnings()[0]; |
203 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); | 204 EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message); |
204 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 205 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
205 } | 206 } |
206 | 207 |
207 TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionOnWhitelist) { | 208 TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionOnWhitelist) { |
208 scoped_ptr<base::DictionaryValue> ext_manifest = | 209 std::unique_ptr<base::DictionaryValue> ext_manifest = |
209 CreateManifest(AUTO_APPROVE_NOT_SET, true, CLIENT_ID_DEFAULT); | 210 CreateManifest(AUTO_APPROVE_NOT_SET, true, CLIENT_ID_DEFAULT); |
210 ManifestData manifest(std::move(ext_manifest), "test"); | 211 ManifestData manifest(std::move(ext_manifest), "test"); |
211 scoped_refptr<extensions::Extension> extension = | 212 scoped_refptr<extensions::Extension> extension = |
212 LoadAndExpectSuccess(manifest); | 213 LoadAndExpectSuccess(manifest); |
213 EXPECT_TRUE(extension->install_warnings().empty()); | 214 EXPECT_TRUE(extension->install_warnings().empty()); |
214 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 215 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
215 } | 216 } |
216 | 217 |
217 TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionOnWhitelist) { | 218 TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionOnWhitelist) { |
218 scoped_ptr<base::DictionaryValue> ext_manifest = | 219 std::unique_ptr<base::DictionaryValue> ext_manifest = |
219 CreateManifest(AUTO_APPROVE_FALSE, true, CLIENT_ID_DEFAULT); | 220 CreateManifest(AUTO_APPROVE_FALSE, true, CLIENT_ID_DEFAULT); |
220 ManifestData manifest(std::move(ext_manifest), "test"); | 221 ManifestData manifest(std::move(ext_manifest), "test"); |
221 scoped_refptr<extensions::Extension> extension = | 222 scoped_refptr<extensions::Extension> extension = |
222 LoadAndExpectSuccess(manifest); | 223 LoadAndExpectSuccess(manifest); |
223 EXPECT_TRUE(extension->install_warnings().empty()); | 224 EXPECT_TRUE(extension->install_warnings().empty()); |
224 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 225 EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
225 } | 226 } |
226 | 227 |
227 TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionOnWhitelist) { | 228 TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionOnWhitelist) { |
228 scoped_ptr<base::DictionaryValue> ext_manifest = | 229 std::unique_ptr<base::DictionaryValue> ext_manifest = |
229 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT); | 230 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT); |
230 ManifestData manifest(std::move(ext_manifest), "test"); | 231 ManifestData manifest(std::move(ext_manifest), "test"); |
231 scoped_refptr<extensions::Extension> extension = | 232 scoped_refptr<extensions::Extension> extension = |
232 LoadAndExpectSuccess(manifest); | 233 LoadAndExpectSuccess(manifest); |
233 EXPECT_TRUE(extension->install_warnings().empty()); | 234 EXPECT_TRUE(extension->install_warnings().empty()); |
234 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); | 235 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve); |
235 } | 236 } |
236 | 237 |
237 TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionOnWhitelist) { | 238 TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionOnWhitelist) { |
238 scoped_ptr<base::DictionaryValue> ext_manifest = | 239 std::unique_ptr<base::DictionaryValue> ext_manifest = |
239 CreateManifest(AUTO_APPROVE_INVALID, true, CLIENT_ID_DEFAULT); | 240 CreateManifest(AUTO_APPROVE_INVALID, true, CLIENT_ID_DEFAULT); |
240 ManifestData manifest(std::move(ext_manifest), "test"); | 241 ManifestData manifest(std::move(ext_manifest), "test"); |
241 std::string error; | 242 std::string error; |
242 scoped_refptr<extensions::Extension> extension = | 243 scoped_refptr<extensions::Extension> extension = |
243 LoadExtension(manifest, &error); | 244 LoadExtension(manifest, &error); |
244 EXPECT_EQ( | 245 EXPECT_EQ( |
245 "Invalid value for 'oauth2.auto_approve'. Value must be true or false.", | 246 "Invalid value for 'oauth2.auto_approve'. Value must be true or false.", |
246 error); | 247 error); |
247 } | 248 } |
248 | 249 |
249 TEST_F(OAuth2ManifestTest, InvalidClientId) { | 250 TEST_F(OAuth2ManifestTest, InvalidClientId) { |
250 { | 251 { |
251 scoped_ptr<base::DictionaryValue> ext_manifest = | 252 std::unique_ptr<base::DictionaryValue> ext_manifest = |
252 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET); | 253 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET); |
253 ManifestData manifest(std::move(ext_manifest), "test"); | 254 ManifestData manifest(std::move(ext_manifest), "test"); |
254 std::string error; | 255 std::string error; |
255 LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId); | 256 LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId); |
256 } | 257 } |
257 | 258 |
258 { | 259 { |
259 scoped_ptr<base::DictionaryValue> ext_manifest = | 260 std::unique_ptr<base::DictionaryValue> ext_manifest = |
260 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY); | 261 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY); |
261 ManifestData manifest(std::move(ext_manifest), "test"); | 262 ManifestData manifest(std::move(ext_manifest), "test"); |
262 std::string error; | 263 std::string error; |
263 LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId); | 264 LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId); |
264 } | 265 } |
265 } | 266 } |
266 | 267 |
267 TEST_F(OAuth2ManifestTest, ComponentInvalidClientId) { | 268 TEST_F(OAuth2ManifestTest, ComponentInvalidClientId) { |
268 // Component Apps without auto_approve must include a client ID. | 269 // Component Apps without auto_approve must include a client ID. |
269 { | 270 { |
270 scoped_ptr<base::DictionaryValue> ext_manifest = | 271 std::unique_ptr<base::DictionaryValue> ext_manifest = |
271 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET); | 272 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET); |
272 ManifestData manifest(std::move(ext_manifest), "test"); | 273 ManifestData manifest(std::move(ext_manifest), "test"); |
273 std::string error; | 274 std::string error; |
274 LoadAndExpectError(manifest, | 275 LoadAndExpectError(manifest, |
275 errors::kInvalidOAuth2ClientId, | 276 errors::kInvalidOAuth2ClientId, |
276 extensions::Manifest::COMPONENT); | 277 extensions::Manifest::COMPONENT); |
277 } | 278 } |
278 | 279 |
279 { | 280 { |
280 scoped_ptr<base::DictionaryValue> ext_manifest = | 281 std::unique_ptr<base::DictionaryValue> ext_manifest = |
281 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY); | 282 CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY); |
282 ManifestData manifest(std::move(ext_manifest), "test"); | 283 ManifestData manifest(std::move(ext_manifest), "test"); |
283 std::string error; | 284 std::string error; |
284 LoadAndExpectError(manifest, | 285 LoadAndExpectError(manifest, |
285 errors::kInvalidOAuth2ClientId, | 286 errors::kInvalidOAuth2ClientId, |
286 extensions::Manifest::COMPONENT); | 287 extensions::Manifest::COMPONENT); |
287 } | 288 } |
288 } | 289 } |
289 | 290 |
290 TEST_F(OAuth2ManifestTest, ComponentWithChromeClientId) { | 291 TEST_F(OAuth2ManifestTest, ComponentWithChromeClientId) { |
291 { | 292 { |
292 scoped_ptr<base::DictionaryValue> ext_manifest = | 293 std::unique_ptr<base::DictionaryValue> ext_manifest = |
293 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_NOT_SET); | 294 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_NOT_SET); |
294 ManifestData manifest(std::move(ext_manifest), "test"); | 295 ManifestData manifest(std::move(ext_manifest), "test"); |
295 scoped_refptr<extensions::Extension> extension = | 296 scoped_refptr<extensions::Extension> extension = |
296 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); | 297 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); |
297 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty()); | 298 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty()); |
298 } | 299 } |
299 | 300 |
300 { | 301 { |
301 scoped_ptr<base::DictionaryValue> ext_manifest = | 302 std::unique_ptr<base::DictionaryValue> ext_manifest = |
302 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_EMPTY); | 303 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_EMPTY); |
303 ManifestData manifest(std::move(ext_manifest), "test"); | 304 ManifestData manifest(std::move(ext_manifest), "test"); |
304 scoped_refptr<extensions::Extension> extension = | 305 scoped_refptr<extensions::Extension> extension = |
305 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); | 306 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); |
306 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty()); | 307 EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty()); |
307 } | 308 } |
308 } | 309 } |
309 | 310 |
310 TEST_F(OAuth2ManifestTest, ComponentWithStandardClientId) { | 311 TEST_F(OAuth2ManifestTest, ComponentWithStandardClientId) { |
311 scoped_ptr<base::DictionaryValue> ext_manifest = | 312 std::unique_ptr<base::DictionaryValue> ext_manifest = |
312 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT); | 313 CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT); |
313 ManifestData manifest(std::move(ext_manifest), "test"); | 314 ManifestData manifest(std::move(ext_manifest), "test"); |
314 scoped_refptr<extensions::Extension> extension = | 315 scoped_refptr<extensions::Extension> extension = |
315 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); | 316 LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT); |
316 EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id); | 317 EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id); |
317 } | 318 } |
318 | 319 |
319 } // namespace extensions | 320 } // namespace extensions |
OLD | NEW |