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

Side by Side Diff: chrome/common/extensions/extension_unittest.cc

Issue 256049: Generate IDs for --load-extension by hashing the path instead (Closed)
Patch Set: Removed support for default Extension constructor Created 11 years, 2 months 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 | « chrome/common/extensions/extension.cc ('k') | no next file » | 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) 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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698