Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 1136543003: Extensions: Store disable reasons in Sync (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review2 Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698