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 <algorithm> | 5 #include <algorithm> |
6 #include <set> | 6 #include <set> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 const base::DictionaryValue* dict = | 917 const base::DictionaryValue* dict = |
918 profile()->GetPrefs()->GetDictionary("extensions.settings"); | 918 profile()->GetPrefs()->GetDictionary("extensions.settings"); |
919 if (!dict) { | 919 if (!dict) { |
920 ADD_FAILURE(); | 920 ADD_FAILURE(); |
921 return 0; | 921 return 0; |
922 } | 922 } |
923 return dict->size(); | 923 return dict->size(); |
924 } | 924 } |
925 | 925 |
926 void UninstallExtension(const std::string& id, bool use_helper) { | 926 void UninstallExtension(const std::string& id, bool use_helper) { |
| 927 UninstallExtension(id, use_helper, Extension::ENABLED); |
| 928 } |
| 929 |
| 930 void UninstallExtension(const std::string& id, bool use_helper, |
| 931 Extension::State expected_state) { |
927 // Verify that the extension is installed. | 932 // Verify that the extension is installed. |
928 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); | 933 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); |
929 EXPECT_TRUE(base::PathExists(extension_path)); | 934 EXPECT_TRUE(base::PathExists(extension_path)); |
930 size_t pref_key_count = GetPrefKeyCount(); | 935 size_t pref_key_count = GetPrefKeyCount(); |
931 EXPECT_GT(pref_key_count, 0u); | 936 EXPECT_GT(pref_key_count, 0u); |
932 ValidateIntegerPref(id, "state", Extension::ENABLED); | 937 ValidateIntegerPref(id, "state", expected_state); |
933 | 938 |
934 // Uninstall it. | 939 // Uninstall it. |
935 if (use_helper) { | 940 if (use_helper) { |
936 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( | 941 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( |
937 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING)); | 942 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING)); |
938 } else { | 943 } else { |
939 EXPECT_TRUE(service()->UninstallExtension( | 944 EXPECT_TRUE(service()->UninstallExtension( |
940 id, | 945 id, |
941 extensions::UNINSTALL_REASON_FOR_TESTING, | 946 extensions::UNINSTALL_REASON_FOR_TESTING, |
942 base::Bind(&base::DoNothing), | 947 base::Bind(&base::DoNothing), |
(...skipping 4959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5902 | 5907 |
5903 service()->Init(); | 5908 service()->Init(); |
5904 ASSERT_TRUE(service()->is_ready()); | 5909 ASSERT_TRUE(service()->is_ready()); |
5905 | 5910 |
5906 ASSERT_EQ(3u, loaded_.size()); | 5911 ASSERT_EQ(3u, loaded_.size()); |
5907 | 5912 |
5908 // We start enabled. | 5913 // We start enabled. |
5909 const Extension* extension = service()->GetExtensionById(good0, true); | 5914 const Extension* extension = service()->GetExtensionById(good0, true); |
5910 ASSERT_TRUE(extension); | 5915 ASSERT_TRUE(extension); |
5911 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 5916 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5912 ExtensionSyncData disable_good_crx(*extension, false, false, false, | |
5913 ExtensionSyncData::BOOLEAN_UNSET); | |
5914 | 5917 |
5915 // Then sync data arrives telling us to disable |good0|. | 5918 // Then sync data arrives telling us to disable |good0|. |
| 5919 ExtensionSyncData disable_good_crx(*extension, false, |
| 5920 Extension::DISABLE_USER_ACTION, false, |
| 5921 false, ExtensionSyncData::BOOLEAN_UNSET); |
5916 syncer::SyncDataList sync_data; | 5922 syncer::SyncDataList sync_data; |
5917 sync_data.push_back(disable_good_crx.GetSyncData()); | 5923 sync_data.push_back(disable_good_crx.GetSyncData()); |
5918 extension_sync_service()->MergeDataAndStartSyncing( | 5924 extension_sync_service()->MergeDataAndStartSyncing( |
5919 syncer::EXTENSIONS, | 5925 syncer::EXTENSIONS, |
5920 sync_data, | 5926 sync_data, |
5921 scoped_ptr<syncer::SyncChangeProcessor>( | 5927 scoped_ptr<syncer::SyncChangeProcessor>( |
5922 new syncer::FakeSyncChangeProcessor), | 5928 new syncer::FakeSyncChangeProcessor), |
5923 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5929 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5924 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); | 5930 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
5925 } | 5931 } |
(...skipping 23 matching lines...) Expand all Loading... |
5949 // Disable extension before first sync data arrives. | 5955 // Disable extension before first sync data arrives. |
5950 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); | 5956 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); |
5951 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); | 5957 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
5952 | 5958 |
5953 // Enable extension - this is now the most recent state. | 5959 // Enable extension - this is now the most recent state. |
5954 service()->EnableExtension(good0); | 5960 service()->EnableExtension(good0); |
5955 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 5961 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5956 | 5962 |
5957 // Now sync data comes in that says to disable good0. This should be | 5963 // Now sync data comes in that says to disable good0. This should be |
5958 // ignored. | 5964 // ignored. |
5959 ExtensionSyncData disable_good_crx(*extension, false, false, false, | 5965 ExtensionSyncData disable_good_crx(*extension, false, |
5960 ExtensionSyncData::BOOLEAN_FALSE); | 5966 Extension::DISABLE_USER_ACTION, false, |
| 5967 false, ExtensionSyncData::BOOLEAN_UNSET); |
5961 syncer::SyncDataList sync_data; | 5968 syncer::SyncDataList sync_data; |
5962 sync_data.push_back(disable_good_crx.GetSyncData()); | 5969 sync_data.push_back(disable_good_crx.GetSyncData()); |
5963 extension_sync_service()->MergeDataAndStartSyncing( | 5970 extension_sync_service()->MergeDataAndStartSyncing( |
5964 syncer::EXTENSIONS, | 5971 syncer::EXTENSIONS, |
5965 sync_data, | 5972 sync_data, |
5966 scoped_ptr<syncer::SyncChangeProcessor>( | 5973 scoped_ptr<syncer::SyncChangeProcessor>( |
5967 new syncer::FakeSyncChangeProcessor), | 5974 new syncer::FakeSyncChangeProcessor), |
5968 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5975 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5969 | 5976 |
5970 // The extension was enabled locally before the sync data arrived, so it | 5977 // The extension was enabled locally before the sync data arrived, so it |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6507 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 6514 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6508 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 6515 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
6509 good_crx, profile())); | 6516 good_crx, profile())); |
6510 EXPECT_EQ(kDefaultAllowedScripting, | 6517 EXPECT_EQ(kDefaultAllowedScripting, |
6511 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 6518 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
6512 } | 6519 } |
6513 | 6520 |
6514 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 6521 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
6515 } | 6522 } |
6516 | 6523 |
| 6524 TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) { |
| 6525 InitializeEmptyExtensionService(); |
| 6526 InitializeExtensionSyncService(); |
| 6527 syncer::FakeSyncChangeProcessor processor; |
| 6528 extension_sync_service()->MergeDataAndStartSyncing( |
| 6529 syncer::EXTENSIONS, |
| 6530 syncer::SyncDataList(), |
| 6531 scoped_ptr<syncer::SyncChangeProcessor>( |
| 6532 new syncer::FakeSyncChangeProcessor), |
| 6533 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
| 6534 |
| 6535 sync_pb::EntitySpecifics specifics; |
| 6536 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 6537 ext_specifics->set_id(good_crx); |
| 6538 ext_specifics->set_version(base::Version("1").GetString()); |
| 6539 |
| 6540 const base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 6541 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 6542 |
| 6543 { |
| 6544 ext_specifics->set_enabled(true); |
| 6545 ext_specifics->set_disable_reasons(0); |
| 6546 |
| 6547 syncer::SyncData sync_data = |
| 6548 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
| 6549 syncer::SyncChange sync_change(FROM_HERE, |
| 6550 syncer::SyncChange::ACTION_UPDATE, |
| 6551 sync_data); |
| 6552 syncer::SyncChangeList list(1); |
| 6553 list[0] = sync_change; |
| 6554 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 6555 |
| 6556 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6557 UpdateExtension(good_crx, path, ENABLED); |
| 6558 EXPECT_EQ(0, prefs->GetDisableReasons(good_crx)); |
| 6559 // Permissions should have been granted during installation. |
| 6560 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); |
| 6561 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6562 } |
| 6563 UninstallExtension(good_crx, false); |
| 6564 { |
| 6565 ext_specifics->set_enabled(false); |
| 6566 ext_specifics->set_disable_reasons(Extension::DISABLE_USER_ACTION); |
| 6567 |
| 6568 syncer::SyncData sync_data = |
| 6569 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
| 6570 syncer::SyncChange sync_change(FROM_HERE, |
| 6571 syncer::SyncChange::ACTION_UPDATE, |
| 6572 sync_data); |
| 6573 syncer::SyncChangeList list(1); |
| 6574 list[0] = sync_change; |
| 6575 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 6576 |
| 6577 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6578 UpdateExtension(good_crx, path, DISABLED); |
| 6579 EXPECT_EQ(Extension::DISABLE_USER_ACTION, |
| 6580 prefs->GetDisableReasons(good_crx)); |
| 6581 // Even if the extension came in disabled, its permissions should have been |
| 6582 // granted (the user already approved them on another machine). |
| 6583 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); |
| 6584 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6585 } |
| 6586 UninstallExtension(good_crx, false, Extension::DISABLED); |
| 6587 { |
| 6588 ext_specifics->set_enabled(false); |
| 6589 // Legacy case (<M45): No disable reasons come in from Sync (see |
| 6590 // crbug.com/484214). After installation, the reason should be set to |
| 6591 // DISABLE_UNKNOWN_FROM_SYNC. |
| 6592 ext_specifics->set_disable_reasons(0); |
| 6593 |
| 6594 syncer::SyncData sync_data = |
| 6595 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
| 6596 syncer::SyncChange sync_change(FROM_HERE, |
| 6597 syncer::SyncChange::ACTION_UPDATE, |
| 6598 sync_data); |
| 6599 syncer::SyncChangeList list(1); |
| 6600 list[0] = sync_change; |
| 6601 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 6602 |
| 6603 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6604 UpdateExtension(good_crx, path, DISABLED); |
| 6605 EXPECT_EQ(Extension::DISABLE_UNKNOWN_FROM_SYNC, |
| 6606 prefs->GetDisableReasons(good_crx)); |
| 6607 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); |
| 6608 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 6609 } |
| 6610 UninstallExtension(good_crx, false, Extension::DISABLED); |
| 6611 } |
| 6612 |
6517 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { | 6613 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
6518 InitializeExtensionServiceWithUpdater(); | 6614 InitializeExtensionServiceWithUpdater(); |
6519 InitializeExtensionSyncService(); | 6615 InitializeExtensionSyncService(); |
6520 syncer::FakeSyncChangeProcessor processor; | 6616 syncer::FakeSyncChangeProcessor processor; |
6521 extension_sync_service()->MergeDataAndStartSyncing( | 6617 extension_sync_service()->MergeDataAndStartSyncing( |
6522 syncer::EXTENSIONS, | 6618 syncer::EXTENSIONS, |
6523 syncer::SyncDataList(), | 6619 syncer::SyncDataList(), |
6524 scoped_ptr<syncer::SyncChangeProcessor>( | 6620 scoped_ptr<syncer::SyncChangeProcessor>( |
6525 new syncer::FakeSyncChangeProcessor), | 6621 new syncer::FakeSyncChangeProcessor), |
6526 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 6622 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7803 | 7899 |
7804 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7900 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
7805 content::Source<Profile>(profile()), | 7901 content::Source<Profile>(profile()), |
7806 content::NotificationService::NoDetails()); | 7902 content::NotificationService::NoDetails()); |
7807 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7903 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7808 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7904 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
7809 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7905 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
7810 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7906 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
7811 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7907 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
7812 } | 7908 } |
OLD | NEW |