OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 1447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 std::string("Could not load extension from '*'. ") + | 1458 std::string("Could not load extension from '*'. ") + |
1459 extensions::manifest_errors::kMissingFile)) << | 1459 extensions::manifest_errors::kMissingFile)) << |
1460 base::UTF16ToUTF8(GetErrors()[2]); | 1460 base::UTF16ToUTF8(GetErrors()[2]); |
1461 | 1461 |
1462 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[3]), | 1462 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[3]), |
1463 std::string("Could not load extension from '*'. ") + | 1463 std::string("Could not load extension from '*'. ") + |
1464 extensions::manifest_errors::kManifestUnreadable)) << | 1464 extensions::manifest_errors::kManifestUnreadable)) << |
1465 base::UTF16ToUTF8(GetErrors()[3]); | 1465 base::UTF16ToUTF8(GetErrors()[3]); |
1466 }; | 1466 }; |
1467 | 1467 |
| 1468 // Test that partially deleted extensions are cleaned up during startup |
| 1469 // Test loading bad extensions from the profile directory. |
| 1470 TEST_F(ExtensionServiceTest, CleanupOnStartup) { |
| 1471 InitPluginService(); |
| 1472 InitializeGoodInstalledExtensionService(); |
| 1473 |
| 1474 // Simulate that one of them got partially deleted by clearing its pref. |
| 1475 { |
| 1476 DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings"); |
| 1477 base::DictionaryValue* dict = update.Get(); |
| 1478 ASSERT_TRUE(dict != NULL); |
| 1479 dict->Remove("behllobkkfkfnphdnhnkndlbkcpglgmj", NULL); |
| 1480 } |
| 1481 |
| 1482 service_->Init(); |
| 1483 // A delayed task to call GarbageCollectExtensions is posted by |
| 1484 // ExtensionService::Init. As the test won't wait for the delayed task to |
| 1485 // be called, call it manually instead. |
| 1486 service_->GarbageCollectExtensions(); |
| 1487 // Wait for GarbageCollectExtensions task to complete. |
| 1488 base::RunLoop().RunUntilIdle(); |
| 1489 |
| 1490 base::FileEnumerator dirs(extensions_install_dir_, false, |
| 1491 base::FileEnumerator::DIRECTORIES); |
| 1492 size_t count = 0; |
| 1493 while (!dirs.Next().empty()) |
| 1494 count++; |
| 1495 |
| 1496 // We should have only gotten two extensions now. |
| 1497 EXPECT_EQ(2u, count); |
| 1498 |
| 1499 // And extension1 dir should now be toast. |
| 1500 base::FilePath extension_dir = extensions_install_dir_ |
| 1501 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj"); |
| 1502 ASSERT_FALSE(base::PathExists(extension_dir)); |
| 1503 } |
| 1504 |
| 1505 // Test that GarbageCollectExtensions deletes the right versions of an |
| 1506 // extension. |
| 1507 TEST_F(ExtensionServiceTest, GarbageCollectWithPendingUpdates) { |
| 1508 InitPluginService(); |
| 1509 |
| 1510 base::FilePath source_install_dir = data_dir_ |
| 1511 .AppendASCII("pending_updates") |
| 1512 .AppendASCII("Extensions"); |
| 1513 base::FilePath pref_path = |
| 1514 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
| 1515 |
| 1516 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 1517 |
| 1518 // This is the directory that is going to be deleted, so make sure it actually |
| 1519 // is there before the garbage collection. |
| 1520 ASSERT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1521 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); |
| 1522 |
| 1523 service_->GarbageCollectExtensions(); |
| 1524 // Wait for GarbageCollectExtensions task to complete. |
| 1525 base::RunLoop().RunUntilIdle(); |
| 1526 |
| 1527 // Verify that the pending update for the first extension didn't get |
| 1528 // deleted. |
| 1529 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1530 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); |
| 1531 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1532 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0"))); |
| 1533 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1534 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); |
| 1535 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1536 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); |
| 1537 } |
| 1538 |
| 1539 // Test that pending updates are properly handled on startup. |
| 1540 TEST_F(ExtensionServiceTest, UpdateOnStartup) { |
| 1541 InitPluginService(); |
| 1542 |
| 1543 base::FilePath source_install_dir = data_dir_ |
| 1544 .AppendASCII("pending_updates") |
| 1545 .AppendASCII("Extensions"); |
| 1546 base::FilePath pref_path = |
| 1547 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
| 1548 |
| 1549 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 1550 |
| 1551 // This is the directory that is going to be deleted, so make sure it actually |
| 1552 // is there before the garbage collection. |
| 1553 ASSERT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1554 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); |
| 1555 |
| 1556 service_->Init(); |
| 1557 // A delayed task to call GarbageCollectExtensions is posted by |
| 1558 // ExtensionService::Init. As the test won't wait for the delayed task to |
| 1559 // be called, call it manually instead. |
| 1560 service_->GarbageCollectExtensions(); |
| 1561 // Wait for GarbageCollectExtensions task to complete. |
| 1562 base::RunLoop().RunUntilIdle(); |
| 1563 |
| 1564 // Verify that the pending update for the first extension got installed. |
| 1565 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1566 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); |
| 1567 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1568 "bjafgdebaacbbbecmhlhpofkepfkgcpa/2.0"))); |
| 1569 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1570 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); |
| 1571 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII( |
| 1572 "hpiknbiabeeppbpihjehijgoemciehgk/3"))); |
| 1573 |
| 1574 // Make sure update information got deleted. |
| 1575 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); |
| 1576 EXPECT_FALSE( |
| 1577 prefs->GetDelayedInstallInfo("bjafgdebaacbbbecmhlhpofkepfkgcpa")); |
| 1578 } |
| 1579 |
1468 // Test various cases for delayed install because of missing imports. | 1580 // Test various cases for delayed install because of missing imports. |
1469 TEST_F(ExtensionServiceTest, PendingImports) { | 1581 TEST_F(ExtensionServiceTest, PendingImports) { |
1470 InitPluginService(); | 1582 InitPluginService(); |
1471 | 1583 |
1472 base::FilePath source_install_dir = data_dir_ | 1584 base::FilePath source_install_dir = data_dir_ |
1473 .AppendASCII("pending_updates_with_imports") | 1585 .AppendASCII("pending_updates_with_imports") |
1474 .AppendASCII("Extensions"); | 1586 .AppendASCII("Extensions"); |
1475 base::FilePath pref_path = | 1587 base::FilePath pref_path = |
1476 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 1588 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
1477 | 1589 |
(...skipping 5412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6890 // ReconcileKnownDisabled(). | 7002 // ReconcileKnownDisabled(). |
6891 service_->EnableExtension(good2); | 7003 service_->EnableExtension(good2); |
6892 service_->ReconcileKnownDisabled(); | 7004 service_->ReconcileKnownDisabled(); |
6893 expected_extensions.insert(good2); | 7005 expected_extensions.insert(good2); |
6894 expected_disabled_extensions.erase(good2); | 7006 expected_disabled_extensions.erase(good2); |
6895 | 7007 |
6896 EXPECT_EQ(expected_extensions, registry_->enabled_extensions().GetIDs()); | 7008 EXPECT_EQ(expected_extensions, registry_->enabled_extensions().GetIDs()); |
6897 EXPECT_EQ(expected_disabled_extensions, | 7009 EXPECT_EQ(expected_disabled_extensions, |
6898 registry_->disabled_extensions().GetIDs()); | 7010 registry_->disabled_extensions().GetIDs()); |
6899 } | 7011 } |
OLD | NEW |