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

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: add test 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 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 const base::DictionaryValue* dict = 915 const base::DictionaryValue* dict =
916 profile()->GetPrefs()->GetDictionary("extensions.settings"); 916 profile()->GetPrefs()->GetDictionary("extensions.settings");
917 if (!dict) { 917 if (!dict) {
918 ADD_FAILURE(); 918 ADD_FAILURE();
919 return 0; 919 return 0;
920 } 920 }
921 return dict->size(); 921 return dict->size();
922 } 922 }
923 923
924 void UninstallExtension(const std::string& id, bool use_helper) { 924 void UninstallExtension(const std::string& id, bool use_helper) {
925 UninstallExtension(id, use_helper, Extension::ENABLED);
926 }
927
928 void UninstallExtension(const std::string& id, bool use_helper,
929 Extension::State expected_state) {
925 // Verify that the extension is installed. 930 // Verify that the extension is installed.
926 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); 931 base::FilePath extension_path = extensions_install_dir().AppendASCII(id);
927 EXPECT_TRUE(base::PathExists(extension_path)); 932 EXPECT_TRUE(base::PathExists(extension_path));
928 size_t pref_key_count = GetPrefKeyCount(); 933 size_t pref_key_count = GetPrefKeyCount();
929 EXPECT_GT(pref_key_count, 0u); 934 EXPECT_GT(pref_key_count, 0u);
930 ValidateIntegerPref(id, "state", Extension::ENABLED); 935 ValidateIntegerPref(id, "state", expected_state);
931 936
932 // Uninstall it. 937 // Uninstall it.
933 if (use_helper) { 938 if (use_helper) {
934 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper( 939 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper(
935 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING)); 940 service(), id, extensions::UNINSTALL_REASON_FOR_TESTING));
936 } else { 941 } else {
937 EXPECT_TRUE(service()->UninstallExtension( 942 EXPECT_TRUE(service()->UninstallExtension(
938 id, 943 id,
939 extensions::UNINSTALL_REASON_FOR_TESTING, 944 extensions::UNINSTALL_REASON_FOR_TESTING,
940 base::Bind(&base::DoNothing), 945 base::Bind(&base::DoNothing),
(...skipping 4929 matching lines...) Expand 10 before | Expand all | Expand 10 after
5870 5875
5871 service()->Init(); 5876 service()->Init();
5872 ASSERT_TRUE(service()->is_ready()); 5877 ASSERT_TRUE(service()->is_ready());
5873 5878
5874 ASSERT_EQ(3u, loaded_.size()); 5879 ASSERT_EQ(3u, loaded_.size());
5875 5880
5876 // We start enabled. 5881 // We start enabled.
5877 const Extension* extension = service()->GetExtensionById(good0, true); 5882 const Extension* extension = service()->GetExtensionById(good0, true);
5878 ASSERT_TRUE(extension); 5883 ASSERT_TRUE(extension);
5879 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5884 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
5880 ExtensionSyncData disable_good_crx(*extension, false, false, false,
5881 ExtensionSyncData::BOOLEAN_UNSET);
5882 5885
5883 // Then sync data arrives telling us to disable |good0|. 5886 // Then sync data arrives telling us to disable |good0|.
5887 ExtensionSyncData disable_good_crx(*extension, false,
5888 Extension::DISABLE_USER_ACTION, false,
5889 false, ExtensionSyncData::BOOLEAN_UNSET);
5884 syncer::SyncDataList sync_data; 5890 syncer::SyncDataList sync_data;
5885 sync_data.push_back(disable_good_crx.GetSyncData()); 5891 sync_data.push_back(disable_good_crx.GetSyncData());
5886 extension_sync_service()->MergeDataAndStartSyncing( 5892 extension_sync_service()->MergeDataAndStartSyncing(
5887 syncer::EXTENSIONS, 5893 syncer::EXTENSIONS,
5888 sync_data, 5894 sync_data,
5889 scoped_ptr<syncer::SyncChangeProcessor>( 5895 scoped_ptr<syncer::SyncChangeProcessor>(
5890 new syncer::FakeSyncChangeProcessor), 5896 new syncer::FakeSyncChangeProcessor),
5891 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 5897 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
5892 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); 5898 ASSERT_FALSE(service()->IsExtensionEnabled(good0));
5893 } 5899 }
(...skipping 23 matching lines...) Expand all
5917 // Disable extension before first sync data arrives. 5923 // Disable extension before first sync data arrives.
5918 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); 5924 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION);
5919 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); 5925 ASSERT_FALSE(service()->IsExtensionEnabled(good0));
5920 5926
5921 // Enable extension - this is now the most recent state. 5927 // Enable extension - this is now the most recent state.
5922 service()->EnableExtension(good0); 5928 service()->EnableExtension(good0);
5923 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5929 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
5924 5930
5925 // Now sync data comes in that says to disable good0. This should be 5931 // Now sync data comes in that says to disable good0. This should be
5926 // ignored. 5932 // ignored.
5927 ExtensionSyncData disable_good_crx(*extension, false, false, false, 5933 ExtensionSyncData disable_good_crx(*extension, false,
5928 ExtensionSyncData::BOOLEAN_FALSE); 5934 Extension::DISABLE_USER_ACTION, false,
5935 false, ExtensionSyncData::BOOLEAN_UNSET);
5929 syncer::SyncDataList sync_data; 5936 syncer::SyncDataList sync_data;
5930 sync_data.push_back(disable_good_crx.GetSyncData()); 5937 sync_data.push_back(disable_good_crx.GetSyncData());
5931 extension_sync_service()->MergeDataAndStartSyncing( 5938 extension_sync_service()->MergeDataAndStartSyncing(
5932 syncer::EXTENSIONS, 5939 syncer::EXTENSIONS,
5933 sync_data, 5940 sync_data,
5934 scoped_ptr<syncer::SyncChangeProcessor>( 5941 scoped_ptr<syncer::SyncChangeProcessor>(
5935 new syncer::FakeSyncChangeProcessor), 5942 new syncer::FakeSyncChangeProcessor),
5936 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 5943 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
5937 5944
5938 // The extension was enabled locally before the sync data arrived, so it 5945 // The extension was enabled locally before the sync data arrived, so it
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
6475 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 6482 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
6476 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( 6483 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(
6477 good_crx, profile())); 6484 good_crx, profile()));
6478 EXPECT_EQ(kDefaultAllowedScripting, 6485 EXPECT_EQ(kDefaultAllowedScripting,
6479 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); 6486 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile()));
6480 } 6487 }
6481 6488
6482 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); 6489 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
6483 } 6490 }
6484 6491
6492 TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) {
6493 InitializeEmptyExtensionService();
6494 InitializeExtensionSyncService();
6495 syncer::FakeSyncChangeProcessor processor;
6496 extension_sync_service()->MergeDataAndStartSyncing(
6497 syncer::EXTENSIONS,
6498 syncer::SyncDataList(),
6499 scoped_ptr<syncer::SyncChangeProcessor>(
6500 new syncer::FakeSyncChangeProcessor),
6501 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
6502
6503 sync_pb::EntitySpecifics specifics;
6504 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
6505 ext_specifics->set_id(good_crx);
6506 ext_specifics->set_version(base::Version("1").GetString());
6507
6508 const base::FilePath path = data_dir().AppendASCII("good.crx");
6509 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
6510
6511 {
6512 ext_specifics->set_enabled(true);
6513 ext_specifics->set_disable_reasons(0);
6514
6515 syncer::SyncData sync_data =
6516 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
6517 syncer::SyncChange sync_change(FROM_HERE,
6518 syncer::SyncChange::ACTION_UPDATE,
6519 sync_data);
6520 syncer::SyncChangeList list(1);
6521 list[0] = sync_change;
6522 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
6523
6524 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
6525 UpdateExtension(good_crx, path, ENABLED);
6526 // Permissions should have been granted during installation.
6527 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
6528 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
6529 }
6530 UninstallExtension(good_crx, false);
6531 {
6532 ext_specifics->set_enabled(false);
6533 ext_specifics->set_disable_reasons(Extension::DISABLE_USER_ACTION);
6534
6535 syncer::SyncData sync_data =
6536 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
6537 syncer::SyncChange sync_change(FROM_HERE,
6538 syncer::SyncChange::ACTION_UPDATE,
6539 sync_data);
6540 syncer::SyncChangeList list(1);
6541 list[0] = sync_change;
6542 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
6543
6544 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
6545 UpdateExtension(good_crx, path, DISABLED);
6546 // Even if the extension came in disabled, its permissions should have been
6547 // granted (the user already approved them on another machine).
6548 EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
6549 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
6550 }
6551 UninstallExtension(good_crx, false, Extension::DISABLED);
6552 {
6553 ext_specifics->set_enabled(false);
6554 ext_specifics->set_disable_reasons(Extension::DISABLE_PERMISSIONS_INCREASE);
6555
6556 syncer::SyncData sync_data =
6557 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
6558 syncer::SyncChange sync_change(FROM_HERE,
6559 syncer::SyncChange::ACTION_UPDATE,
6560 sync_data);
6561 syncer::SyncChangeList list(1);
6562 list[0] = sync_change;
6563 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
6564
6565 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
6566 UpdateExtension(good_crx, path, DISABLED);
6567 // If the extension came in disabled due to a permissions increase, then the
6568 // user has *not* approved the permissions, and they shouldn't be granted.
6569 // crbug.com/484214
6570 EXPECT_TRUE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
6571 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
6572 }
6573 UninstallExtension(good_crx, false, Extension::DISABLED);
6574 }
6575
6485 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { 6576 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) {
6486 InitializeExtensionServiceWithUpdater(); 6577 InitializeExtensionServiceWithUpdater();
6487 InitializeExtensionSyncService(); 6578 InitializeExtensionSyncService();
6488 syncer::FakeSyncChangeProcessor processor; 6579 syncer::FakeSyncChangeProcessor processor;
6489 extension_sync_service()->MergeDataAndStartSyncing( 6580 extension_sync_service()->MergeDataAndStartSyncing(
6490 syncer::EXTENSIONS, 6581 syncer::EXTENSIONS,
6491 syncer::SyncDataList(), 6582 syncer::SyncDataList(),
6492 scoped_ptr<syncer::SyncChangeProcessor>( 6583 scoped_ptr<syncer::SyncChangeProcessor>(
6493 new syncer::FakeSyncChangeProcessor), 6584 new syncer::FakeSyncChangeProcessor),
6494 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 6585 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after
7771 7862
7772 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, 7863 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED,
7773 content::Source<Profile>(profile()), 7864 content::Source<Profile>(profile()),
7774 content::NotificationService::NoDetails()); 7865 content::NotificationService::NoDetails());
7775 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); 7866 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_);
7776 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 7867 EXPECT_EQ(0u, registry()->enabled_extensions().size());
7777 EXPECT_EQ(0u, registry()->disabled_extensions().size()); 7868 EXPECT_EQ(0u, registry()->disabled_extensions().size());
7778 EXPECT_EQ(0u, registry()->terminated_extensions().size()); 7869 EXPECT_EQ(0u, registry()->terminated_extensions().size());
7779 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); 7870 EXPECT_EQ(0u, registry()->blacklisted_extensions().size());
7780 } 7871 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698