Chromium Code Reviews| 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 // Permissions should have been granted during installation. | |
| 6559 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); | |
| 6560 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
| 6561 } | |
| 6562 UninstallExtension(good_crx, false); | |
| 6563 { | |
| 6564 ext_specifics->set_enabled(false); | |
| 6565 ext_specifics->set_disable_reasons(Extension::DISABLE_USER_ACTION); | |
| 6566 | |
| 6567 syncer::SyncData sync_data = | |
| 6568 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | |
| 6569 syncer::SyncChange sync_change(FROM_HERE, | |
| 6570 syncer::SyncChange::ACTION_UPDATE, | |
| 6571 sync_data); | |
| 6572 syncer::SyncChangeList list(1); | |
| 6573 list[0] = sync_change; | |
| 6574 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | |
| 6575 | |
| 6576 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
| 6577 UpdateExtension(good_crx, path, DISABLED); | |
| 6578 // Even if the extension came in disabled, its permissions should have been | |
| 6579 // granted (the user already approved them on another machine). | |
| 6580 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); | |
| 6581 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
| 6582 } | |
| 6583 UninstallExtension(good_crx, false, Extension::DISABLED); | |
| 6584 { | |
| 6585 ext_specifics->set_enabled(false); | |
| 6586 // Legacy case: No disable reasons are set. | |
|
not at google - send to devlin
2015/05/19 14:32:10
"The disable reason should be set to "DISABLE_UNKN
Marc Treib
2015/05/19 15:30:56
Done.
| |
| 6587 ext_specifics->set_disable_reasons(0); | |
| 6588 | |
| 6589 syncer::SyncData sync_data = | |
| 6590 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | |
| 6591 syncer::SyncChange sync_change(FROM_HERE, | |
| 6592 syncer::SyncChange::ACTION_UPDATE, | |
| 6593 sync_data); | |
| 6594 syncer::SyncChangeList list(1); | |
| 6595 list[0] = sync_change; | |
| 6596 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | |
| 6597 | |
| 6598 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
| 6599 UpdateExtension(good_crx, path, DISABLED); | |
| 6600 EXPECT_EQ(Extension::DISABLE_UNKNOWN_FROM_SYNC, | |
| 6601 prefs->GetDisableReasons(good_crx)); | |
|
not at google - send to devlin
2015/05/19 14:32:10
Why is this the only place that GetDisableReasons
Marc Treib
2015/05/19 15:30:56
Good point; added.
| |
| 6602 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty()); | |
| 6603 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | |
| 6604 } | |
| 6605 UninstallExtension(good_crx, false, Extension::DISABLED); | |
| 6606 } | |
| 6607 | |
| 6517 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { | 6608 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
| 6518 InitializeExtensionServiceWithUpdater(); | 6609 InitializeExtensionServiceWithUpdater(); |
| 6519 InitializeExtensionSyncService(); | 6610 InitializeExtensionSyncService(); |
| 6520 syncer::FakeSyncChangeProcessor processor; | 6611 syncer::FakeSyncChangeProcessor processor; |
| 6521 extension_sync_service()->MergeDataAndStartSyncing( | 6612 extension_sync_service()->MergeDataAndStartSyncing( |
| 6522 syncer::EXTENSIONS, | 6613 syncer::EXTENSIONS, |
| 6523 syncer::SyncDataList(), | 6614 syncer::SyncDataList(), |
| 6524 scoped_ptr<syncer::SyncChangeProcessor>( | 6615 scoped_ptr<syncer::SyncChangeProcessor>( |
| 6525 new syncer::FakeSyncChangeProcessor), | 6616 new syncer::FakeSyncChangeProcessor), |
| 6526 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 6617 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
| (...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7803 | 7894 |
| 7804 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7895 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7805 content::Source<Profile>(profile()), | 7896 content::Source<Profile>(profile()), |
| 7806 content::NotificationService::NoDetails()); | 7897 content::NotificationService::NoDetails()); |
| 7807 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7898 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7808 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7899 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7809 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7900 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7810 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7901 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7811 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7902 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7812 } | 7903 } |
| OLD | NEW |