Index: chrome/browser/extensions/extension_service_unittest.cc |
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc |
index 3378d72db7de623b815975fe239e77b04c9079f1..1577828d182b11689f68625b2c8bac3f85b2b4ee 100644 |
--- a/chrome/browser/extensions/extension_service_unittest.cc |
+++ b/chrome/browser/extensions/extension_service_unittest.cc |
@@ -72,6 +72,7 @@ |
#include "chrome/common/extensions/api/plugins/plugins_handler.h" |
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
#include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
+#include "chrome/common/extensions/sync_helper.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/test/base/scoped_browser_locale.h" |
@@ -1148,11 +1149,6 @@ class ExtensionServiceTest : public extensions::ExtensionServiceTestBase, |
#endif |
} |
- void InitializeExtensionSyncService() { |
Marc Treib
2015/07/21 10:54:00
Not necessary anymore, now that the ExtensionSyncS
not at google - send to devlin
2015/07/21 13:43:30
wow...
|
- extension_sync_service_.reset(new ExtensionSyncService( |
- profile(), ExtensionPrefs::Get(browser_context()), service())); |
- } |
- |
void InitializeEmptyExtensionServiceWithTestingPrefs() { |
ExtensionServiceTestBase::ExtensionServiceInitParams params = |
CreateDefaultInitParams(); |
@@ -1165,13 +1161,12 @@ class ExtensionServiceTest : public extensions::ExtensionServiceTestBase, |
} |
ExtensionSyncService* extension_sync_service() { |
- return extension_sync_service_.get(); |
+ return ExtensionSyncService::Get(profile()); |
} |
protected: |
typedef extensions::ExtensionManagementPrefUpdater<TestingPrefServiceSyncable> |
ManagementPrefUpdater; |
- scoped_ptr<ExtensionSyncService> extension_sync_service_; |
extensions::ExtensionList loaded_; |
std::string unloaded_id_; |
UnloadedExtensionInfo::Reason unloaded_reason_; |
@@ -5796,7 +5791,6 @@ TEST_F(ExtensionServiceTest, ComponentExtensions) { |
TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledComponent) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
bool flare_was_called = false; |
syncer::ModelType triggered_type(syncer::UNSPECIFIED); |
@@ -5823,7 +5817,6 @@ TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledComponent) { |
TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledNormal) { |
InitializeGoodInstalledExtensionService(); |
- InitializeExtensionSyncService(); |
bool flare_was_called = false; |
syncer::ModelType triggered_type(syncer::UNSPECIFIED); |
@@ -5846,7 +5839,6 @@ TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledNormal) { |
TEST_F(ExtensionServiceTest, DeferredSyncStartupOnInstall) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
service()->Init(); |
ASSERT_TRUE(service()->is_ready()); |
@@ -5890,7 +5882,6 @@ TEST_F(ExtensionServiceTest, DisableExtensionFromSync) { |
source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
InitializeInstalledExtensionService(pref_path, source_install_dir); |
- InitializeExtensionSyncService(); |
// The user has enabled sync. |
ProfileSyncService* sync_service = |
@@ -5907,30 +5898,34 @@ TEST_F(ExtensionServiceTest, DisableExtensionFromSync) { |
ASSERT_TRUE(extension); |
ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
+ // Sync starts up. |
+ extension_sync_service()->MergeDataAndStartSyncing( |
+ syncer::EXTENSIONS, |
+ syncer::SyncDataList(), |
+ make_scoped_ptr(new syncer::FakeSyncChangeProcessor), |
+ scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ |
// Then sync data arrives telling us to disable |good0|. |
ExtensionSyncData disable_good_crx(*extension, false, |
Extension::DISABLE_USER_ACTION, false, |
false, ExtensionSyncData::BOOLEAN_UNSET); |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(disable_good_crx.GetSyncData()); |
- extension_sync_service()->MergeDataAndStartSyncing( |
- syncer::EXTENSIONS, |
- sync_data, |
- scoped_ptr<syncer::SyncChangeProcessor>( |
- new syncer::FakeSyncChangeProcessor), |
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ syncer::SyncChange sync_change(FROM_HERE, |
+ syncer::SyncChange::ACTION_UPDATE, |
+ disable_good_crx.GetSyncData()); |
+ syncer::SyncChangeList list(1, sync_change); |
+ extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
+ |
ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
} |
-TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { |
- // Start the extensions service with one external extension already installed. |
+TEST_F(ExtensionServiceTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) { |
+ // Start the extension service with three extensions already installed. |
base::FilePath source_install_dir = |
data_dir().AppendASCII("good").AppendASCII("Extensions"); |
base::FilePath pref_path = |
source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
InitializeInstalledExtensionService(pref_path, source_install_dir); |
- InitializeExtensionSyncService(); |
// The user has enabled sync. |
ProfileSyncService* sync_service = |
@@ -5941,39 +5936,48 @@ TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { |
ASSERT_TRUE(service()->is_ready()); |
ASSERT_EQ(3u, loaded_.size()); |
- const Extension* extension = service()->GetExtensionById(good0, true); |
ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
+ ASSERT_TRUE(service()->IsExtensionEnabled(good2)); |
- // Disable extension before first sync data arrives. |
+ // Disable and re-enable good0 before first sync data arrives. |
service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); |
ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
- |
- // Enable extension - this is now the most recent state. |
service()->EnableExtension(good0); |
ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
- |
- // Now sync data comes in that says to disable good0. This should be |
- // ignored. |
- ExtensionSyncData disable_good_crx(*extension, false, |
- Extension::DISABLE_USER_ACTION, false, |
- false, ExtensionSyncData::BOOLEAN_UNSET); |
+ // Disable good2 before first sync data arrives (good1 is considered |
+ // non-syncable because it has plugin permission). |
+ service()->DisableExtension(good2, Extension::DISABLE_USER_ACTION); |
+ ASSERT_FALSE(service()->IsExtensionEnabled(good2)); |
+ |
+ const Extension* extension0 = service()->GetExtensionById(good0, true); |
+ const Extension* extension2 = service()->GetExtensionById(good2, true); |
+ ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension0)); |
+ ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension2)); |
+ |
+ // Now sync data comes in that says to disable good0 and enable good2. |
+ ExtensionSyncData disable_good0(*extension0, false, |
+ Extension::DISABLE_USER_ACTION, false, false, |
+ ExtensionSyncData::BOOLEAN_UNSET); |
+ ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, |
+ false, false, |
+ ExtensionSyncData::BOOLEAN_UNSET); |
syncer::SyncDataList sync_data; |
- sync_data.push_back(disable_good_crx.GetSyncData()); |
+ sync_data.push_back(disable_good0.GetSyncData()); |
+ sync_data.push_back(enable_good2.GetSyncData()); |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
sync_data, |
- scoped_ptr<syncer::SyncChangeProcessor>( |
- new syncer::FakeSyncChangeProcessor), |
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ make_scoped_ptr(new syncer::FakeSyncChangeProcessor), |
+ make_scoped_ptr(new syncer::SyncErrorFactoryMock)); |
- // The extension was enabled locally before the sync data arrived, so it |
- // should still be enabled now. |
- ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
+ // Both sync changes should be ignored, since the local state was changed |
+ // before sync started, and so the local state is considered more recent. |
+ EXPECT_TRUE(service()->IsExtensionEnabled(good0)); |
+ EXPECT_FALSE(service()->IsExtensionEnabled(good2)); |
} |
TEST_F(ExtensionServiceTest, GetSyncData) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
const Extension* extension = service()->GetInstalledExtension(good_crx); |
ASSERT_TRUE(extension); |
@@ -6005,7 +6009,6 @@ TEST_F(ExtensionServiceTest, GetSyncData) { |
TEST_F(ExtensionServiceTest, GetSyncDataTerminated) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
TerminateExtension(good_crx); |
const Extension* extension = service()->GetInstalledExtension(good_crx); |
@@ -6039,7 +6042,6 @@ TEST_F(ExtensionServiceTest, GetSyncDataTerminated) { |
TEST_F(ExtensionServiceTest, GetSyncDataFilter) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
const Extension* extension = service()->GetInstalledExtension(good_crx); |
ASSERT_TRUE(extension); |
@@ -6059,7 +6061,6 @@ TEST_F(ExtensionServiceTest, GetSyncDataFilter) { |
TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
const Extension* extension = service()->GetInstalledExtension(good_crx); |
ASSERT_TRUE(extension); |
@@ -6130,7 +6131,6 @@ TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) { |
TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRXWithLocation( |
data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); |
const Extension* extension = service()->GetInstalledExtension(good_crx); |
@@ -6171,7 +6171,6 @@ TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { |
TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettings) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
const Extension* app = |
PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); |
ASSERT_TRUE(app); |
@@ -6232,7 +6231,6 @@ TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettings) { |
// PackAndInstallCRX(). When we clean up a bit more, this should move out. |
TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettingsOnExtensionMoved) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
const size_t kAppCount = 3; |
const Extension* apps[kAppCount]; |
apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
@@ -6283,7 +6281,6 @@ TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettingsOnExtensionMoved) { |
TEST_F(ExtensionServiceTest, GetSyncDataList) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); |
InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); |
@@ -6313,7 +6310,6 @@ TEST_F(ExtensionServiceTest, GetSyncDataList) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6354,7 +6350,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
// Install the extension. |
base::FilePath extension_path = data_dir().AppendASCII("good.crx"); |
@@ -6402,7 +6397,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6515,7 +6509,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6596,7 +6589,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
InitializeExtensionServiceWithUpdater(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6634,7 +6626,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { |
InitializeExtensionServiceWithUpdater(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6704,7 +6695,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { |
InitializeExtensionServiceWithUpdater(); |
- InitializeExtensionSyncService(); |
syncer::FakeSyncChangeProcessor processor; |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
@@ -6746,7 +6736,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { |
TEST_F(ExtensionServiceTest, ProcessSyncDataEnableDisable) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
syncer::SyncDataList(), |
@@ -6844,7 +6833,6 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataPermissionApproval) { |
"http://localhost/autoupdate/updates.xml"); |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
syncer::SyncDataList(), |
@@ -7132,7 +7120,6 @@ TEST_F(ExtensionServiceTest, SupervisedUser_UpdateWithPermissionIncrease) { |
TEST_F(ExtensionServiceTest, |
SupervisedUser_SyncUninstallByCustodianSkipsPolicy) { |
InitializeEmptyExtensionService(); |
- InitializeExtensionSyncService(); |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
syncer::SyncDataList(), |