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 scoped_refptr<PermissionSet> permissions( | |
6561 prefs->GetGrantedPermissions(good_crx)); | |
Marc Treib
2015/05/20 12:05:39
Ben, do you know a reason why ExtensionPrefs::GetG
| |
6562 EXPECT_FALSE(permissions->IsEmpty()); | |
6563 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
6564 } | |
6565 UninstallExtension(good_crx, false); | |
6566 { | |
6567 ext_specifics->set_enabled(false); | |
6568 ext_specifics->set_disable_reasons(Extension::DISABLE_USER_ACTION); | |
6569 | |
6570 syncer::SyncData sync_data = | |
6571 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | |
6572 syncer::SyncChange sync_change(FROM_HERE, | |
6573 syncer::SyncChange::ACTION_UPDATE, | |
6574 sync_data); | |
6575 syncer::SyncChangeList list(1); | |
6576 list[0] = sync_change; | |
6577 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | |
6578 | |
6579 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
6580 UpdateExtension(good_crx, path, DISABLED); | |
6581 EXPECT_EQ(Extension::DISABLE_USER_ACTION, | |
6582 prefs->GetDisableReasons(good_crx)); | |
6583 // Even if the extension came in disabled, its permissions should have been | |
6584 // granted (the user already approved them on another machine). | |
6585 scoped_refptr<PermissionSet> permissions( | |
6586 prefs->GetGrantedPermissions(good_crx)); | |
6587 EXPECT_FALSE(permissions->IsEmpty()); | |
6588 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
6589 } | |
6590 UninstallExtension(good_crx, false, Extension::DISABLED); | |
6591 { | |
6592 ext_specifics->set_enabled(false); | |
6593 // Legacy case (<M45): No disable reasons come in from Sync (see | |
6594 // crbug.com/484214). After installation, the reason should be set to | |
6595 // DISABLE_UNKNOWN_FROM_SYNC. | |
6596 ext_specifics->set_disable_reasons(0); | |
6597 | |
6598 syncer::SyncData sync_data = | |
6599 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | |
6600 syncer::SyncChange sync_change(FROM_HERE, | |
6601 syncer::SyncChange::ACTION_UPDATE, | |
6602 sync_data); | |
6603 syncer::SyncChangeList list(1); | |
6604 list[0] = sync_change; | |
6605 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | |
6606 | |
6607 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
6608 UpdateExtension(good_crx, path, DISABLED); | |
6609 EXPECT_EQ(Extension::DISABLE_UNKNOWN_FROM_SYNC, | |
6610 prefs->GetDisableReasons(good_crx)); | |
6611 scoped_refptr<PermissionSet> permissions( | |
6612 prefs->GetGrantedPermissions(good_crx)); | |
6613 EXPECT_FALSE(permissions->IsEmpty()); | |
6614 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
6615 } | |
6616 UninstallExtension(good_crx, false, Extension::DISABLED); | |
6617 } | |
6618 | |
6517 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { | 6619 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
6518 InitializeExtensionServiceWithUpdater(); | 6620 InitializeExtensionServiceWithUpdater(); |
6519 InitializeExtensionSyncService(); | 6621 InitializeExtensionSyncService(); |
6520 syncer::FakeSyncChangeProcessor processor; | 6622 syncer::FakeSyncChangeProcessor processor; |
6521 extension_sync_service()->MergeDataAndStartSyncing( | 6623 extension_sync_service()->MergeDataAndStartSyncing( |
6522 syncer::EXTENSIONS, | 6624 syncer::EXTENSIONS, |
6523 syncer::SyncDataList(), | 6625 syncer::SyncDataList(), |
6524 scoped_ptr<syncer::SyncChangeProcessor>( | 6626 scoped_ptr<syncer::SyncChangeProcessor>( |
6525 new syncer::FakeSyncChangeProcessor), | 6627 new syncer::FakeSyncChangeProcessor), |
6526 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 6628 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7803 | 7905 |
7804 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7906 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
7805 content::Source<Profile>(profile()), | 7907 content::Source<Profile>(profile()), |
7806 content::NotificationService::NoDetails()); | 7908 content::NotificationService::NoDetails()); |
7807 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7909 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7808 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7910 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
7809 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7911 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
7810 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7912 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
7811 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7913 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
7812 } | 7914 } |
OLD | NEW |