OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "base/file_path.h" | 5 #include "base/file_path.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "chrome/common/chrome_paths.h" | 9 #include "chrome/common/chrome_paths.h" |
10 #include "chrome/common/extensions/extension.h" | 10 #include "chrome/common/extensions/extension.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); | 220 EXPECT_FALSE(extension.InitFromValue(*input_value, true, &error)); |
221 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPrivacyBlacklistsPath)); | 221 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPrivacyBlacklistsPath)); |
222 } | 222 } |
223 | 223 |
224 TEST(ExtensionTest, InitFromValueValid) { | 224 TEST(ExtensionTest, InitFromValueValid) { |
225 #if defined(OS_WIN) | 225 #if defined(OS_WIN) |
226 FilePath path(FILE_PATH_LITERAL("C:\\foo")); | 226 FilePath path(FILE_PATH_LITERAL("C:\\foo")); |
227 #elif defined(OS_POSIX) | 227 #elif defined(OS_POSIX) |
228 FilePath path(FILE_PATH_LITERAL("/foo")); | 228 FilePath path(FILE_PATH_LITERAL("/foo")); |
229 #endif | 229 #endif |
230 Extension::ResetGeneratedIdCounter(); | |
231 | |
232 Extension extension(path); | 230 Extension extension(path); |
233 std::string error; | 231 std::string error; |
234 DictionaryValue input_value; | 232 DictionaryValue input_value; |
235 | 233 |
236 // Test minimal extension | 234 // Test minimal extension |
237 input_value.SetString(keys::kVersion, "1.0.0.0"); | 235 input_value.SetString(keys::kVersion, "1.0.0.0"); |
238 input_value.SetString(keys::kName, "my extension"); | 236 input_value.SetString(keys::kName, "my extension"); |
239 | 237 |
240 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); | 238 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); |
241 EXPECT_EQ("", error); | 239 EXPECT_EQ("", error); |
242 EXPECT_EQ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", extension.id()); | 240 EXPECT_TRUE(Extension::IdIsValid(extension.id())); |
243 EXPECT_EQ("1.0.0.0", extension.VersionString()); | 241 EXPECT_EQ("1.0.0.0", extension.VersionString()); |
244 EXPECT_EQ("my extension", extension.name()); | 242 EXPECT_EQ("my extension", extension.name()); |
245 EXPECT_EQ("chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/", | 243 EXPECT_EQ(extension.id(), extension.url().host()); |
246 extension.url().spec()); | |
247 EXPECT_EQ(path.value(), extension.path().value()); | 244 EXPECT_EQ(path.value(), extension.path().value()); |
248 } | 245 } |
249 | 246 |
250 TEST(ExtensionTest, GetResourceURLAndPath) { | 247 TEST(ExtensionTest, GetResourceURLAndPath) { |
251 #if defined(OS_WIN) | 248 #if defined(OS_WIN) |
252 FilePath path(FILE_PATH_LITERAL("C:\\foo")); | 249 FilePath path(FILE_PATH_LITERAL("C:\\foo")); |
253 #elif defined(OS_POSIX) | 250 #elif defined(OS_POSIX) |
254 FilePath path(FILE_PATH_LITERAL("/foo")); | 251 FilePath path(FILE_PATH_LITERAL("/foo")); |
255 #endif | 252 #endif |
256 Extension extension(path); | 253 Extension extension(path); |
(...skipping 13 matching lines...) Expand all Loading... |
270 .Append(FILE_PATH_LITERAL("baz.js")).value(), | 267 .Append(FILE_PATH_LITERAL("baz.js")).value(), |
271 Extension::GetResourcePath(extension.path(), "bar/baz.js").value()); | 268 Extension::GetResourcePath(extension.path(), "bar/baz.js").value()); |
272 EXPECT_EQ(path.Append(FILE_PATH_LITERAL("baz.js")).value(), | 269 EXPECT_EQ(path.Append(FILE_PATH_LITERAL("baz.js")).value(), |
273 Extension::GetResourcePath(extension.path(), "bar/../baz.js") | 270 Extension::GetResourcePath(extension.path(), "bar/../baz.js") |
274 .value()); | 271 .value()); |
275 EXPECT_EQ(FilePath().value(), | 272 EXPECT_EQ(FilePath().value(), |
276 Extension::GetResourcePath(extension.path(), "../baz.js").value()); | 273 Extension::GetResourcePath(extension.path(), "../baz.js").value()); |
277 } | 274 } |
278 | 275 |
279 TEST(ExtensionTest, LoadPageActionHelper) { | 276 TEST(ExtensionTest, LoadPageActionHelper) { |
280 Extension extension; | 277 #if defined(OS_WIN) |
| 278 FilePath path(StringPrintf(L"c:\\extension")); |
| 279 #else |
| 280 FilePath path(StringPrintf("/extension")); |
| 281 #endif |
| 282 Extension extension(path); |
281 std::string error_msg; | 283 std::string error_msg; |
282 scoped_ptr<ExtensionAction> action; | 284 scoped_ptr<ExtensionAction> action; |
283 DictionaryValue input; | 285 DictionaryValue input; |
284 | 286 |
285 // First try with an empty dictionary. We should get nothing back. | 287 // First try with an empty dictionary. We should get nothing back. |
286 ASSERT_TRUE(extension.LoadExtensionActionHelper( | 288 ASSERT_TRUE(extension.LoadExtensionActionHelper( |
287 &input, 0, &error_msg, ExtensionAction::PAGE_ACTION) == NULL); | 289 &input, 0, &error_msg, ExtensionAction::PAGE_ACTION) == NULL); |
288 ASSERT_STRNE("", error_msg.c_str()); | 290 ASSERT_STRNE("", error_msg.c_str()); |
289 error_msg = ""; | 291 error_msg = ""; |
290 | 292 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 EXPECT_TRUE(Extension::IdIsValid("pppppppppppppppppppppppppppppppp")); | 419 EXPECT_TRUE(Extension::IdIsValid("pppppppppppppppppppppppppppppppp")); |
418 EXPECT_TRUE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnop")); | 420 EXPECT_TRUE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnop")); |
419 EXPECT_TRUE(Extension::IdIsValid("ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP")); | 421 EXPECT_TRUE(Extension::IdIsValid("ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP")); |
420 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmno")); | 422 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmno")); |
421 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnopa")); | 423 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnopa")); |
422 EXPECT_FALSE(Extension::IdIsValid("0123456789abcdef0123456789abcdef")); | 424 EXPECT_FALSE(Extension::IdIsValid("0123456789abcdef0123456789abcdef")); |
423 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnoq")); | 425 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmnoq")); |
424 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmno0")); | 426 EXPECT_FALSE(Extension::IdIsValid("abcdefghijklmnopabcdefghijklmno0")); |
425 } | 427 } |
426 | 428 |
427 TEST(ExtensionTest, GenerateIDFromPublicKey) { | 429 TEST(ExtensionTest, GenerateID) { |
428 const uint8 public_key_info[] = { | 430 const uint8 public_key_info[] = { |
429 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, | 431 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, |
430 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, | 432 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, |
431 0x89, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, 0x20, 0xdc, 0x7c, 0x9b, | 433 0x89, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, 0x20, 0xdc, 0x7c, 0x9b, |
432 0x0c, 0xdc, 0x51, 0x61, 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, | 434 0x0c, 0xdc, 0x51, 0x61, 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, |
433 0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, 0x85, 0x7b, 0x0c, 0x04, | 435 0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, 0x85, 0x7b, 0x0c, 0x04, |
434 0x13, 0x3f, 0x8d, 0xf4, 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a, | 436 0x13, 0x3f, 0x8d, 0xf4, 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a, |
435 0xb0, 0x40, 0x53, 0x3a, 0xd7, 0x66, 0x09, 0x0f, 0x9e, 0x36, 0x74, 0x30, | 437 0xb0, 0x40, 0x53, 0x3a, 0xd7, 0x66, 0x09, 0x0f, 0x9e, 0x36, 0x74, 0x30, |
436 0xda, 0x8a, 0x31, 0x4f, 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17, | 438 0xda, 0x8a, 0x31, 0x4f, 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17, |
437 0xde, 0x4e, 0xb9, 0x57, 0x5e, 0x7e, 0x0a, 0xe5, 0xb2, 0x65, 0x7a, 0x89, | 439 0xde, 0x4e, 0xb9, 0x57, 0x5e, 0x7e, 0x0a, 0xe5, 0xb2, 0x65, 0x7a, 0x89, |
438 0x4e, 0xb6, 0x47, 0xff, 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85, | 440 0x4e, 0xb6, 0x47, 0xff, 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85, |
439 0x84, 0x32, 0x33, 0xf3, 0x17, 0x49, 0xbf, 0xe9, 0x96, 0xd0, 0xd6, 0x14, | 441 0x84, 0x32, 0x33, 0xf3, 0x17, 0x49, 0xbf, 0xe9, 0x96, 0xd0, 0xd6, 0x14, |
440 0x6f, 0x13, 0x8d, 0xc5, 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18, | 442 0x6f, 0x13, 0x8d, 0xc5, 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18, |
441 0x53, 0x56, 0xa6, 0x83, 0xa2, 0xce, 0x93, 0x93, 0xe7, 0x1f, 0x0f, 0xe6, | 443 0x53, 0x56, 0xa6, 0x83, 0xa2, 0xce, 0x93, 0x93, 0xe7, 0x1f, 0x0f, 0xe6, |
442 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01 | 444 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01 |
443 }; | 445 }; |
444 | 446 |
445 std::string extension_id; | 447 std::string extension_id; |
446 EXPECT_TRUE( | 448 EXPECT_TRUE( |
447 Extension::GenerateIdFromPublicKey( | 449 Extension::GenerateId( |
448 std::string(reinterpret_cast<const char*>(&public_key_info[0]), | 450 std::string(reinterpret_cast<const char*>(&public_key_info[0]), |
449 arraysize(public_key_info)), | 451 arraysize(public_key_info)), |
450 &extension_id)); | 452 &extension_id)); |
451 EXPECT_EQ("melddjfinppjdikinhbgehiennejpfhp", extension_id); | 453 EXPECT_EQ("melddjfinppjdikinhbgehiennejpfhp", extension_id); |
452 } | 454 } |
453 | 455 |
454 TEST(ExtensionTest, UpdateUrls) { | 456 TEST(ExtensionTest, UpdateUrls) { |
455 // Test several valid update urls | 457 // Test several valid update urls |
456 std::vector<std::string> valid; | 458 std::vector<std::string> valid; |
457 valid.push_back("http://test.com"); | 459 valid.push_back("http://test.com"); |
458 valid.push_back("http://test.com/"); | 460 valid.push_back("http://test.com/"); |
459 valid.push_back("http://test.com/update"); | 461 valid.push_back("http://test.com/update"); |
460 valid.push_back("http://test.com/update?check=true"); | 462 valid.push_back("http://test.com/update?check=true"); |
461 for (size_t i = 0; i < valid.size(); i++) { | 463 for (size_t i = 0; i < valid.size(); i++) { |
462 GURL url(valid[i]); | 464 GURL url(valid[i]); |
463 EXPECT_TRUE(url.is_valid()); | 465 EXPECT_TRUE(url.is_valid()); |
464 | 466 |
465 DictionaryValue input_value; | 467 DictionaryValue input_value; |
466 Extension extension; | 468 #if defined(OS_WIN) |
| 469 FilePath path(StringPrintf(L"c:\\extension%i", i)); |
| 470 #else |
| 471 FilePath path(StringPrintf("/extension%i", i)); |
| 472 #endif |
| 473 Extension extension(path); |
467 std::string error; | 474 std::string error; |
468 | 475 |
469 input_value.SetString(keys::kVersion, "1.0"); | 476 input_value.SetString(keys::kVersion, "1.0"); |
470 input_value.SetString(keys::kName, "Test"); | 477 input_value.SetString(keys::kName, "Test"); |
471 input_value.SetString(keys::kUpdateURL, url.spec()); | 478 input_value.SetString(keys::kUpdateURL, url.spec()); |
472 | 479 |
473 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); | 480 EXPECT_TRUE(extension.InitFromValue(input_value, false, &error)); |
474 } | 481 } |
475 | 482 |
476 // Test some invalid update urls | 483 // Test some invalid update urls |
477 std::vector<std::string> invalid; | 484 std::vector<std::string> invalid; |
478 invalid.push_back(""); | 485 invalid.push_back(""); |
479 invalid.push_back("test.com"); | 486 invalid.push_back("test.com"); |
480 valid.push_back("http://test.com/update#whatever"); | 487 valid.push_back("http://test.com/update#whatever"); |
481 for (size_t i = 0; i < invalid.size(); i++) { | 488 for (size_t i = 0; i < invalid.size(); i++) { |
482 DictionaryValue input_value; | 489 DictionaryValue input_value; |
483 Extension extension; | 490 #if defined(OS_WIN) |
| 491 FilePath path(StringPrintf(L"c:\\extension%i", i)); |
| 492 #else |
| 493 FilePath path(StringPrintf("/extension%i", i)); |
| 494 #endif |
| 495 Extension extension(path); |
484 std::string error; | 496 std::string error; |
485 input_value.SetString(keys::kVersion, "1.0"); | 497 input_value.SetString(keys::kVersion, "1.0"); |
486 input_value.SetString(keys::kName, "Test"); | 498 input_value.SetString(keys::kName, "Test"); |
487 input_value.SetString(keys::kUpdateURL, invalid[i]); | 499 input_value.SetString(keys::kUpdateURL, invalid[i]); |
488 | 500 |
489 EXPECT_FALSE(extension.InitFromValue(input_value, false, &error)); | 501 EXPECT_FALSE(extension.InitFromValue(input_value, false, &error)); |
490 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL)); | 502 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL)); |
491 } | 503 } |
492 } | 504 } |
493 | 505 |
(...skipping 28 matching lines...) Expand all Loading... |
522 path = path.AppendASCII("extensions") | 534 path = path.AppendASCII("extensions") |
523 .AppendASCII(dir) | 535 .AppendASCII(dir) |
524 .AppendASCII(test_file); | 536 .AppendASCII(test_file); |
525 | 537 |
526 JSONFileValueSerializer serializer(path); | 538 JSONFileValueSerializer serializer(path); |
527 scoped_ptr<Value> result(serializer.Deserialize(NULL)); | 539 scoped_ptr<Value> result(serializer.Deserialize(NULL)); |
528 if (!result.get()) | 540 if (!result.get()) |
529 return NULL; | 541 return NULL; |
530 | 542 |
531 std::string error; | 543 std::string error; |
532 scoped_ptr<Extension> extension(new Extension); | 544 scoped_ptr<Extension> extension(new Extension(path.DirName())); |
533 extension->InitFromValue(*static_cast<DictionaryValue*>(result.get()), | 545 extension->InitFromValue(*static_cast<DictionaryValue*>(result.get()), |
534 false, &error); | 546 false, &error); |
535 | 547 |
536 return extension.release(); | 548 return extension.release(); |
537 } | 549 } |
538 | 550 |
539 TEST(ExtensionTest, EffectiveHostPermissions) { | 551 TEST(ExtensionTest, EffectiveHostPermissions) { |
540 scoped_ptr<Extension> extension; | 552 scoped_ptr<Extension> extension; |
541 std::set<std::string> hosts; | 553 std::set<std::string> hosts; |
542 | 554 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 scoped_ptr<Extension> new_extension( | 660 scoped_ptr<Extension> new_extension( |
649 LoadManifest("allow_silent_upgrade", | 661 LoadManifest("allow_silent_upgrade", |
650 std::string(kTests[i].base_name) + "_new.json")); | 662 std::string(kTests[i].base_name) + "_new.json")); |
651 | 663 |
652 EXPECT_EQ(kTests[i].expect_success, | 664 EXPECT_EQ(kTests[i].expect_success, |
653 Extension::IsPrivilegeIncrease(old_extension.get(), | 665 Extension::IsPrivilegeIncrease(old_extension.get(), |
654 new_extension.get())) | 666 new_extension.get())) |
655 << kTests[i].base_name; | 667 << kTests[i].base_name; |
656 } | 668 } |
657 } | 669 } |
OLD | NEW |