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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "chrome/browser/extensions/external_install_ui.h" | 49 #include "chrome/browser/extensions/external_install_ui.h" |
50 #include "chrome/browser/extensions/external_policy_loader.h" | 50 #include "chrome/browser/extensions/external_policy_loader.h" |
51 #include "chrome/browser/extensions/external_pref_loader.h" | 51 #include "chrome/browser/extensions/external_pref_loader.h" |
52 #include "chrome/browser/extensions/external_provider_impl.h" | 52 #include "chrome/browser/extensions/external_provider_impl.h" |
53 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" | 53 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" |
54 #include "chrome/browser/extensions/install_observer.h" | 54 #include "chrome/browser/extensions/install_observer.h" |
55 #include "chrome/browser/extensions/install_tracker.h" | 55 #include "chrome/browser/extensions/install_tracker.h" |
56 #include "chrome/browser/extensions/install_tracker_factory.h" | 56 #include "chrome/browser/extensions/install_tracker_factory.h" |
57 #include "chrome/browser/extensions/installed_loader.h" | 57 #include "chrome/browser/extensions/installed_loader.h" |
58 #include "chrome/browser/extensions/pack_extension_job.h" | 58 #include "chrome/browser/extensions/pack_extension_job.h" |
| 59 #include "chrome/browser/extensions/test_blacklist.h" |
59 #include "chrome/browser/extensions/test_extension_system.h" | 60 #include "chrome/browser/extensions/test_extension_system.h" |
60 #include "chrome/browser/extensions/unpacked_installer.h" | 61 #include "chrome/browser/extensions/unpacked_installer.h" |
61 #include "chrome/browser/extensions/updater/extension_updater.h" | 62 #include "chrome/browser/extensions/updater/extension_updater.h" |
62 #include "chrome/browser/prefs/browser_prefs.h" | 63 #include "chrome/browser/prefs/browser_prefs.h" |
63 #include "chrome/browser/prefs/pref_service_mock_factory.h" | 64 #include "chrome/browser/prefs/pref_service_mock_factory.h" |
64 #include "chrome/browser/prefs/pref_service_syncable.h" | 65 #include "chrome/browser/prefs/pref_service_syncable.h" |
65 #include "chrome/browser/sync/profile_sync_service.h" | 66 #include "chrome/browser/sync/profile_sync_service.h" |
66 #include "chrome/browser/sync/profile_sync_service_factory.h" | 67 #include "chrome/browser/sync/profile_sync_service_factory.h" |
67 #include "chrome/common/chrome_constants.h" | 68 #include "chrome/common/chrome_constants.h" |
68 #include "chrome/common/chrome_paths.h" | 69 #include "chrome/common/chrome_paths.h" |
(...skipping 3285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3354 Extension::NO_FLAGS, false); | 3355 Extension::NO_FLAGS, false); |
3355 UpdateExtension(good->id(), path, ENABLED); | 3356 UpdateExtension(good->id(), path, ENABLED); |
3356 | 3357 |
3357 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 3358 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); |
3358 } | 3359 } |
3359 | 3360 |
3360 #if defined(ENABLE_BLACKLIST_TESTS) | 3361 #if defined(ENABLE_BLACKLIST_TESTS) |
3361 // Tests blacklisting then unblacklisting extensions after the service has been | 3362 // Tests blacklisting then unblacklisting extensions after the service has been |
3362 // initialized. | 3363 // initialized. |
3363 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { | 3364 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { |
3364 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( | 3365 extensions::TestBlacklist test_blacklist; |
3365 new FakeSafeBrowsingDatabaseManager(true)); | |
3366 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); | |
3367 | |
3368 // A profile with 3 extensions installed: good0, good1, and good2. | 3366 // A profile with 3 extensions installed: good0, good1, and good2. |
3369 InitializeGoodInstalledExtensionService(); | 3367 InitializeGoodInstalledExtensionService(); |
| 3368 test_blacklist.Attach(service_->blacklist_); |
3370 service_->Init(); | 3369 service_->Init(); |
3371 | 3370 |
3372 const extensions::ExtensionSet* extensions = service_->extensions(); | 3371 const extensions::ExtensionSet* extensions = service_->extensions(); |
3373 const extensions::ExtensionSet* blacklisted_extensions = | 3372 const extensions::ExtensionSet* blacklisted_extensions = |
3374 service_->blacklisted_extensions(); | 3373 service_->blacklisted_extensions(); |
3375 | 3374 |
3376 EXPECT_TRUE( extensions->Contains(good0) && | 3375 EXPECT_TRUE( extensions->Contains(good0) && |
3377 !blacklisted_extensions->Contains(good0)); | 3376 !blacklisted_extensions->Contains(good0)); |
3378 EXPECT_TRUE( extensions->Contains(good1) && | 3377 EXPECT_TRUE( extensions->Contains(good1) && |
3379 !blacklisted_extensions->Contains(good1)); | 3378 !blacklisted_extensions->Contains(good1)); |
3380 EXPECT_TRUE( extensions->Contains(good2) && | 3379 EXPECT_TRUE( extensions->Contains(good2) && |
3381 !blacklisted_extensions->Contains(good2)); | 3380 !blacklisted_extensions->Contains(good2)); |
3382 | 3381 |
3383 EXPECT_FALSE(IsPrefExist(good0, "blacklist")); | 3382 EXPECT_FALSE(IsPrefExist(good0, "blacklist")); |
3384 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); | 3383 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); |
3385 EXPECT_FALSE(IsPrefExist(good2, "blacklist")); | 3384 EXPECT_FALSE(IsPrefExist(good2, "blacklist")); |
3386 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); | 3385 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); |
3387 | 3386 |
3388 // Blacklist good0 and good1 (and an invalid extension ID). | 3387 // Blacklist good0 and good1 (and an invalid extension ID). |
3389 blacklist_db->SetUnsafe(good0, good1, "invalid_id").NotifyUpdate(); | 3388 test_blacklist.SetBlacklistState( |
| 3389 good0, extensions::BLACKLISTED_MALWARE, true); |
| 3390 test_blacklist.SetBlacklistState( |
| 3391 good1, extensions::BLACKLISTED_MALWARE, true); |
| 3392 test_blacklist.SetBlacklistState( |
| 3393 "invalid_id", extensions::BLACKLISTED_MALWARE, true); |
3390 base::RunLoop().RunUntilIdle(); | 3394 base::RunLoop().RunUntilIdle(); |
3391 | 3395 |
3392 EXPECT_TRUE(!extensions->Contains(good0) && | 3396 EXPECT_TRUE(!extensions->Contains(good0) && |
3393 blacklisted_extensions->Contains(good0)); | 3397 blacklisted_extensions->Contains(good0)); |
3394 EXPECT_TRUE(!extensions->Contains(good1) && | 3398 EXPECT_TRUE(!extensions->Contains(good1) && |
3395 blacklisted_extensions->Contains(good1)); | 3399 blacklisted_extensions->Contains(good1)); |
3396 EXPECT_TRUE( extensions->Contains(good2) && | 3400 EXPECT_TRUE( extensions->Contains(good2) && |
3397 !blacklisted_extensions->Contains(good2)); | 3401 !blacklisted_extensions->Contains(good2)); |
3398 | 3402 |
3399 EXPECT_TRUE(ValidateBooleanPref(good0, "blacklist", true)); | 3403 EXPECT_TRUE(ValidateBooleanPref(good0, "blacklist", true)); |
3400 EXPECT_TRUE(ValidateBooleanPref(good1, "blacklist", true)); | 3404 EXPECT_TRUE(ValidateBooleanPref(good1, "blacklist", true)); |
3401 EXPECT_FALSE(IsPrefExist(good2, "blacklist")); | 3405 EXPECT_FALSE(IsPrefExist(good2, "blacklist")); |
3402 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); | 3406 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); |
3403 | 3407 |
3404 // Un-blacklist good1 and blacklist good2. | 3408 // Un-blacklist good1 and blacklist good2. |
3405 blacklist_db->SetUnsafe(good0, good2, "invalid_id").NotifyUpdate(); | 3409 test_blacklist.Clear(false); |
| 3410 test_blacklist.SetBlacklistState( |
| 3411 good0, extensions::BLACKLISTED_MALWARE, true); |
| 3412 test_blacklist.SetBlacklistState( |
| 3413 good2, extensions::BLACKLISTED_MALWARE, true); |
| 3414 test_blacklist.SetBlacklistState( |
| 3415 "invalid_id", extensions::BLACKLISTED_MALWARE, true); |
3406 base::RunLoop().RunUntilIdle(); | 3416 base::RunLoop().RunUntilIdle(); |
3407 | 3417 |
3408 EXPECT_TRUE(!extensions->Contains(good0) && | 3418 EXPECT_TRUE(!extensions->Contains(good0) && |
3409 blacklisted_extensions->Contains(good0)); | 3419 blacklisted_extensions->Contains(good0)); |
3410 EXPECT_TRUE( extensions->Contains(good1) && | 3420 EXPECT_TRUE( extensions->Contains(good1) && |
3411 !blacklisted_extensions->Contains(good1)); | 3421 !blacklisted_extensions->Contains(good1)); |
3412 EXPECT_TRUE(!extensions->Contains(good2) && | 3422 EXPECT_TRUE(!extensions->Contains(good2) && |
3413 blacklisted_extensions->Contains(good2)); | 3423 blacklisted_extensions->Contains(good2)); |
3414 | 3424 |
3415 EXPECT_TRUE(ValidateBooleanPref(good0, "blacklist", true)); | 3425 EXPECT_TRUE(ValidateBooleanPref(good0, "blacklist", true)); |
(...skipping 22 matching lines...) Expand all Loading... |
3438 // decide to install this silently. Somebody should fix these tests, all | 3448 // decide to install this silently. Somebody should fix these tests, all |
3439 // 6,000 lines of them. Hah! | 3449 // 6,000 lines of them. Hah! |
3440 InstallCRX(path, INSTALL_FAILED, Extension::WAS_INSTALLED_BY_DEFAULT); | 3450 InstallCRX(path, INSTALL_FAILED, Extension::WAS_INSTALLED_BY_DEFAULT); |
3441 EXPECT_EQ(0u, service_->extensions()->size()); | 3451 EXPECT_EQ(0u, service_->extensions()->size()); |
3442 } | 3452 } |
3443 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3453 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3444 | 3454 |
3445 #if defined(ENABLE_BLACKLIST_TESTS) | 3455 #if defined(ENABLE_BLACKLIST_TESTS) |
3446 // Unload blacklisted extension on policy change. | 3456 // Unload blacklisted extension on policy change. |
3447 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { | 3457 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { |
3448 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( | 3458 extensions::TestBlacklist test_blacklist; |
3449 new FakeSafeBrowsingDatabaseManager(true)); | |
3450 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); | |
3451 | 3459 |
3452 // A profile with no extensions installed. | 3460 // A profile with no extensions installed. |
3453 InitializeEmptyExtensionService(); | 3461 InitializeEmptyExtensionService(); |
| 3462 test_blacklist.Attach(service_->blacklist_); |
3454 | 3463 |
3455 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3464 base::FilePath path = data_dir_.AppendASCII("good.crx"); |
3456 | 3465 |
3457 const Extension* good = InstallCRX(path, INSTALL_NEW); | 3466 const Extension* good = InstallCRX(path, INSTALL_NEW); |
3458 EXPECT_EQ(good_crx, good->id()); | 3467 EXPECT_EQ(good_crx, good->id()); |
3459 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 3468 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
3460 EXPECT_EQ(1u, service_->extensions()->size()); | 3469 EXPECT_EQ(1u, service_->extensions()->size()); |
3461 | 3470 |
3462 base::ListValue whitelist; | 3471 base::ListValue whitelist; |
3463 PrefService* prefs = service_->extension_prefs()->pref_service(); | 3472 PrefService* prefs = service_->extension_prefs()->pref_service(); |
3464 whitelist.Append(new base::StringValue(good_crx)); | 3473 whitelist.Append(new base::StringValue(good_crx)); |
3465 prefs->Set(prefs::kExtensionInstallAllowList, whitelist); | 3474 prefs->Set(prefs::kExtensionInstallAllowList, whitelist); |
3466 | 3475 |
3467 blacklist_db->SetUnsafe(good_crx).NotifyUpdate(); | 3476 test_blacklist.SetBlacklistState( |
| 3477 good_crx, extensions::BLACKLISTED_MALWARE, true); |
3468 base::RunLoop().RunUntilIdle(); | 3478 base::RunLoop().RunUntilIdle(); |
3469 | 3479 |
3470 // The good_crx is blacklisted and the whitelist doesn't negate it. | 3480 // The good_crx is blacklisted and the whitelist doesn't negate it. |
3471 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); | 3481 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); |
3472 EXPECT_EQ(0u, service_->extensions()->size()); | 3482 EXPECT_EQ(0u, service_->extensions()->size()); |
3473 } | 3483 } |
3474 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3484 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3475 | 3485 |
3476 #if defined(ENABLE_BLACKLIST_TESTS) | 3486 #if defined(ENABLE_BLACKLIST_TESTS) |
3477 // Tests that a blacklisted extension is eventually unloaded on startup, if it | 3487 // Tests that a blacklisted extension is eventually unloaded on startup, if it |
3478 // wasn't already. | 3488 // wasn't already. |
3479 TEST_F(ExtensionServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { | 3489 TEST_F(ExtensionServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { |
3480 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( | 3490 extensions::TestBlacklist test_blacklist; |
3481 new FakeSafeBrowsingDatabaseManager(true)); | |
3482 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); | |
3483 | 3491 |
3484 // A profile with 3 extensions installed: good0, good1, and good2. | 3492 // A profile with 3 extensions installed: good0, good1, and good2. |
3485 InitializeGoodInstalledExtensionService(); | 3493 InitializeGoodInstalledExtensionService(); |
| 3494 test_blacklist.Attach(service_->blacklist_); |
3486 | 3495 |
3487 // Blacklist good1 before the service initializes. | 3496 // Blacklist good1 before the service initializes. |
3488 blacklist_db->SetUnsafe(good1); | 3497 test_blacklist.SetBlacklistState( |
| 3498 good1, extensions::BLACKLISTED_MALWARE, false); |
3489 | 3499 |
3490 // Load extensions. | 3500 // Load extensions. |
3491 service_->Init(); | 3501 service_->Init(); |
3492 ASSERT_EQ(3u, loaded_.size()); // hasn't had time to blacklist yet | 3502 ASSERT_EQ(3u, loaded_.size()); // hasn't had time to blacklist yet |
3493 | 3503 |
3494 base::RunLoop().RunUntilIdle(); | 3504 base::RunLoop().RunUntilIdle(); |
3495 ASSERT_EQ(1u, service_->blacklisted_extensions()->size()); | 3505 ASSERT_EQ(1u, service_->blacklisted_extensions()->size()); |
3496 ASSERT_EQ(2u, service_->extensions()->size()); | 3506 ASSERT_EQ(2u, service_->extensions()->size()); |
3497 | 3507 |
3498 ASSERT_TRUE(service_->extensions()->Contains(good0)); | 3508 ASSERT_TRUE(service_->extensions()->Contains(good0)); |
3499 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good1)); | 3509 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good1)); |
3500 ASSERT_TRUE(service_->extensions()->Contains(good2)); | 3510 ASSERT_TRUE(service_->extensions()->Contains(good2)); |
3501 } | 3511 } |
3502 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3512 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3503 | 3513 |
3504 #if defined(ENABLE_BLACKLIST_TESTS) | 3514 #if defined(ENABLE_BLACKLIST_TESTS) |
3505 // Tests extensions blacklisted in prefs on startup; one still blacklisted by | 3515 // Tests extensions blacklisted in prefs on startup; one still blacklisted by |
3506 // safe browsing, the other not. The not-blacklisted one should recover. | 3516 // safe browsing, the other not. The not-blacklisted one should recover. |
3507 TEST_F(ExtensionServiceTest, BlacklistedInPrefsFromStartup) { | 3517 TEST_F(ExtensionServiceTest, BlacklistedInPrefsFromStartup) { |
3508 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( | 3518 extensions::TestBlacklist test_blacklist; |
3509 new FakeSafeBrowsingDatabaseManager(true)); | |
3510 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); | |
3511 | 3519 |
3512 InitializeGoodInstalledExtensionService(); | 3520 InitializeGoodInstalledExtensionService(); |
| 3521 test_blacklist.Attach(service_->blacklist_); |
3513 service_->extension_prefs()->SetExtensionBlacklisted(good0, true); | 3522 service_->extension_prefs()->SetExtensionBlacklisted(good0, true); |
3514 service_->extension_prefs()->SetExtensionBlacklisted(good1, true); | 3523 service_->extension_prefs()->SetExtensionBlacklisted(good1, true); |
3515 | 3524 |
3516 blacklist_db->SetUnsafe(good1); | 3525 test_blacklist.SetBlacklistState( |
| 3526 good1, extensions::BLACKLISTED_MALWARE, false); |
3517 | 3527 |
3518 service_->Init(); | 3528 service_->Init(); |
3519 | 3529 |
3520 ASSERT_EQ(2u, service_->blacklisted_extensions()->size()); | 3530 ASSERT_EQ(2u, service_->blacklisted_extensions()->size()); |
3521 ASSERT_EQ(1u, service_->extensions()->size()); | 3531 ASSERT_EQ(1u, service_->extensions()->size()); |
3522 | 3532 |
3523 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good0)); | 3533 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good0)); |
3524 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good1)); | 3534 ASSERT_TRUE(service_->blacklisted_extensions()->Contains(good1)); |
3525 ASSERT_TRUE(service_->extensions()->Contains(good2)); | 3535 ASSERT_TRUE(service_->extensions()->Contains(good2)); |
3526 | 3536 |
(...skipping 3214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6741 // ReconcileKnownDisabled(). | 6751 // ReconcileKnownDisabled(). |
6742 service_->EnableExtension(good2); | 6752 service_->EnableExtension(good2); |
6743 service_->ReconcileKnownDisabled(); | 6753 service_->ReconcileKnownDisabled(); |
6744 expected_extensions.insert(good2); | 6754 expected_extensions.insert(good2); |
6745 expected_disabled_extensions.erase(good2); | 6755 expected_disabled_extensions.erase(good2); |
6746 | 6756 |
6747 EXPECT_EQ(expected_extensions, service_->extensions()->GetIDs()); | 6757 EXPECT_EQ(expected_extensions, service_->extensions()->GetIDs()); |
6748 EXPECT_EQ(expected_disabled_extensions, | 6758 EXPECT_EQ(expected_disabled_extensions, |
6749 service_->disabled_extensions()->GetIDs()); | 6759 service_->disabled_extensions()->GetIDs()); |
6750 } | 6760 } |
OLD | NEW |