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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |