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

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

Issue 1240573012: Extension syncing: Introduce a NeedsSync pref (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext_sync_uninstall
Patch Set: more cleanup; fix test Created 5 years, 5 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 #include "chrome/browser/policy/profile_policy_connector.h" 65 #include "chrome/browser/policy/profile_policy_connector.h"
66 #include "chrome/browser/policy/profile_policy_connector_factory.h" 66 #include "chrome/browser/policy/profile_policy_connector_factory.h"
67 #include "chrome/browser/prefs/pref_service_syncable.h" 67 #include "chrome/browser/prefs/pref_service_syncable.h"
68 #include "chrome/browser/sync/profile_sync_service.h" 68 #include "chrome/browser/sync/profile_sync_service.h"
69 #include "chrome/browser/sync/profile_sync_service_factory.h" 69 #include "chrome/browser/sync/profile_sync_service_factory.h"
70 #include "chrome/common/chrome_constants.h" 70 #include "chrome/common/chrome_constants.h"
71 #include "chrome/common/chrome_switches.h" 71 #include "chrome/common/chrome_switches.h"
72 #include "chrome/common/extensions/api/plugins/plugins_handler.h" 72 #include "chrome/common/extensions/api/plugins/plugins_handler.h"
73 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 73 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
74 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" 74 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h"
75 #include "chrome/common/extensions/sync_helper.h"
75 #include "chrome/common/pref_names.h" 76 #include "chrome/common/pref_names.h"
76 #include "chrome/common/url_constants.h" 77 #include "chrome/common/url_constants.h"
77 #include "chrome/test/base/scoped_browser_locale.h" 78 #include "chrome/test/base/scoped_browser_locale.h"
78 #include "chrome/test/base/testing_pref_service_syncable.h" 79 #include "chrome/test/base/testing_pref_service_syncable.h"
79 #include "chrome/test/base/testing_profile.h" 80 #include "chrome/test/base/testing_profile.h"
80 #include "components/crx_file/id_util.h" 81 #include "components/crx_file/id_util.h"
81 #include "components/pref_registry/pref_registry_syncable.h" 82 #include "components/pref_registry/pref_registry_syncable.h"
82 #include "content/public/browser/dom_storage_context.h" 83 #include "content/public/browser/dom_storage_context.h"
83 #include "content/public/browser/gpu_data_manager.h" 84 #include "content/public/browser/gpu_data_manager.h"
84 #include "content/public/browser/indexed_db_context.h" 85 #include "content/public/browser/indexed_db_context.h"
(...skipping 5815 matching lines...) Expand 10 before | Expand all | Expand 10 after
5900 service()->Init(); 5901 service()->Init();
5901 ASSERT_TRUE(service()->is_ready()); 5902 ASSERT_TRUE(service()->is_ready());
5902 5903
5903 ASSERT_EQ(3u, loaded_.size()); 5904 ASSERT_EQ(3u, loaded_.size());
5904 5905
5905 // We start enabled. 5906 // We start enabled.
5906 const Extension* extension = service()->GetExtensionById(good0, true); 5907 const Extension* extension = service()->GetExtensionById(good0, true);
5907 ASSERT_TRUE(extension); 5908 ASSERT_TRUE(extension);
5908 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5909 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
5909 5910
5911 // Sync starts up.
5912 extension_sync_service()->MergeDataAndStartSyncing(
5913 syncer::EXTENSIONS,
5914 syncer::SyncDataList(),
5915 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
5916 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
5917
5910 // Then sync data arrives telling us to disable |good0|. 5918 // Then sync data arrives telling us to disable |good0|.
5911 ExtensionSyncData disable_good_crx(*extension, false, 5919 ExtensionSyncData disable_good_crx(*extension, false,
5912 Extension::DISABLE_USER_ACTION, false, 5920 Extension::DISABLE_USER_ACTION, false,
5913 false, ExtensionSyncData::BOOLEAN_UNSET); 5921 false, ExtensionSyncData::BOOLEAN_UNSET);
5914 syncer::SyncDataList sync_data; 5922 syncer::SyncChange sync_change(FROM_HERE,
5915 sync_data.push_back(disable_good_crx.GetSyncData()); 5923 syncer::SyncChange::ACTION_UPDATE,
5916 extension_sync_service()->MergeDataAndStartSyncing( 5924 disable_good_crx.GetSyncData());
5917 syncer::EXTENSIONS, 5925 syncer::SyncChangeList list(1, sync_change);
5918 sync_data, 5926 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
5919 scoped_ptr<syncer::SyncChangeProcessor>( 5927
5920 new syncer::FakeSyncChangeProcessor),
5921 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
5922 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); 5928 ASSERT_FALSE(service()->IsExtensionEnabled(good0));
Marc Treib 2015/07/16 13:20:42 Turns out I broke this test: Installing the extens
5923 } 5929 }
5924 5930
5925 TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { 5931 TEST_F(ExtensionServiceTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) {
5926 // Start the extensions service with one external extension already installed. 5932 // Start the extension service with three extensions already installed.
5927 base::FilePath source_install_dir = 5933 base::FilePath source_install_dir =
5928 data_dir().AppendASCII("good").AppendASCII("Extensions"); 5934 data_dir().AppendASCII("good").AppendASCII("Extensions");
5929 base::FilePath pref_path = 5935 base::FilePath pref_path =
5930 source_install_dir.DirName().Append(chrome::kPreferencesFilename); 5936 source_install_dir.DirName().Append(chrome::kPreferencesFilename);
5931 5937
5932 InitializeInstalledExtensionService(pref_path, source_install_dir); 5938 InitializeInstalledExtensionService(pref_path, source_install_dir);
5933 InitializeExtensionSyncService(); 5939 InitializeExtensionSyncService();
5934 5940
5935 // The user has enabled sync. 5941 // The user has enabled sync.
5936 ProfileSyncService* sync_service = 5942 ProfileSyncService* sync_service =
5937 ProfileSyncServiceFactory::GetForProfile(profile()); 5943 ProfileSyncServiceFactory::GetForProfile(profile());
5938 sync_service->SetSyncSetupCompleted(); 5944 sync_service->SetSyncSetupCompleted();
5939 5945
5940 service()->Init(); 5946 service()->Init();
5941 ASSERT_TRUE(service()->is_ready()); 5947 ASSERT_TRUE(service()->is_ready());
5942 ASSERT_EQ(3u, loaded_.size()); 5948 ASSERT_EQ(3u, loaded_.size());
5943 5949
5944 const Extension* extension = service()->GetExtensionById(good0, true);
5945 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5950 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
5951 ASSERT_TRUE(service()->IsExtensionEnabled(good2));
5946 5952
5947 // Disable extension before first sync data arrives. 5953 // Disable and re-enable good0 before first sync data arrives.
5948 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); 5954 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION);
5949 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); 5955 ASSERT_FALSE(service()->IsExtensionEnabled(good0));
5950
5951 // Enable extension - this is now the most recent state.
5952 service()->EnableExtension(good0); 5956 service()->EnableExtension(good0);
5953 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5957 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
5958 // Disable good2 before first sync data arrives (good1 is considered
5959 // non-syncable because it has plugin permission).
5960 service()->DisableExtension(good2, Extension::DISABLE_USER_ACTION);
5961 ASSERT_FALSE(service()->IsExtensionEnabled(good2));
5954 5962
5955 // Now sync data comes in that says to disable good0. This should be 5963 const Extension* extension0 = service()->GetExtensionById(good0, true);
5956 // ignored. 5964 const Extension* extension2 = service()->GetExtensionById(good2, true);
5957 ExtensionSyncData disable_good_crx(*extension, false, 5965 ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension0));
5958 Extension::DISABLE_USER_ACTION, false, 5966 ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension2));
5959 false, ExtensionSyncData::BOOLEAN_UNSET); 5967
5968 // Now sync data comes in that says to disable good0 and enable good2.
5969 ExtensionSyncData disable_good0(*extension0, false,
5970 Extension::DISABLE_USER_ACTION, false, false,
5971 ExtensionSyncData::BOOLEAN_UNSET);
5972 ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE,
5973 false, false,
5974 ExtensionSyncData::BOOLEAN_UNSET);
5960 syncer::SyncDataList sync_data; 5975 syncer::SyncDataList sync_data;
5961 sync_data.push_back(disable_good_crx.GetSyncData()); 5976 sync_data.push_back(disable_good0.GetSyncData());
5977 sync_data.push_back(enable_good2.GetSyncData());
5962 extension_sync_service()->MergeDataAndStartSyncing( 5978 extension_sync_service()->MergeDataAndStartSyncing(
5963 syncer::EXTENSIONS, 5979 syncer::EXTENSIONS,
5964 sync_data, 5980 sync_data,
5965 scoped_ptr<syncer::SyncChangeProcessor>( 5981 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
5966 new syncer::FakeSyncChangeProcessor), 5982 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
5967 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
5968 5983
5969 // The extension was enabled locally before the sync data arrived, so it 5984 // Both sync changes should be ignored, since the local state was changed
5970 // should still be enabled now. 5985 // before sync started, and so the local state is considered more recent.
5971 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 5986 EXPECT_TRUE(service()->IsExtensionEnabled(good0));
5987 EXPECT_FALSE(service()->IsExtensionEnabled(good2));
5972 } 5988 }
5973 5989
5974 TEST_F(ExtensionServiceTest, GetSyncData) { 5990 TEST_F(ExtensionServiceTest, GetSyncData) {
5975 InitializeEmptyExtensionService(); 5991 InitializeEmptyExtensionService();
5976 InitializeExtensionSyncService(); 5992 InitializeExtensionSyncService();
5977 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 5993 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
5978 const Extension* extension = service()->GetInstalledExtension(good_crx); 5994 const Extension* extension = service()->GetInstalledExtension(good_crx);
5979 ASSERT_TRUE(extension); 5995 ASSERT_TRUE(extension);
5980 5996
5981 extension_sync_service()->MergeDataAndStartSyncing( 5997 extension_sync_service()->MergeDataAndStartSyncing(
(...skipping 2120 matching lines...) Expand 10 before | Expand all | Expand 10 after
8102 8118
8103 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, 8119 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED,
8104 content::Source<Profile>(profile()), 8120 content::Source<Profile>(profile()),
8105 content::NotificationService::NoDetails()); 8121 content::NotificationService::NoDetails());
8106 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); 8122 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_);
8107 EXPECT_EQ(0u, registry()->enabled_extensions().size()); 8123 EXPECT_EQ(0u, registry()->enabled_extensions().size());
8108 EXPECT_EQ(0u, registry()->disabled_extensions().size()); 8124 EXPECT_EQ(0u, registry()->disabled_extensions().size());
8109 EXPECT_EQ(0u, registry()->terminated_extensions().size()); 8125 EXPECT_EQ(0u, registry()->terminated_extensions().size());
8110 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); 8126 EXPECT_EQ(0u, registry()->blacklisted_extensions().size());
8111 } 8127 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698