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 |