| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <memory> |
| 8 #include <string> | 9 #include <string> |
| 9 #include <utility> | 10 #include <utility> |
| 10 | 11 |
| 11 #include "base/bind.h" | 12 #include "base/bind.h" |
| 12 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 13 #include "base/files/file_util.h" | 14 #include "base/files/file_util.h" |
| 14 #include "base/macros.h" | 15 #include "base/macros.h" |
| 15 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/ptr_util.h" |
| 16 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
| 17 #include "base/metrics/field_trial.h" | 18 #include "base/metrics/field_trial.h" |
| 18 #include "base/test/mock_entropy_provider.h" | 19 #include "base/test/mock_entropy_provider.h" |
| 19 #include "chrome/browser/extensions/component_loader.h" | 20 #include "chrome/browser/extensions/component_loader.h" |
| 20 #include "chrome/browser/extensions/extension_service.h" | 21 #include "chrome/browser/extensions/extension_service.h" |
| 21 #include "chrome/browser/extensions/extension_service_test_with_install.h" | 22 #include "chrome/browser/extensions/extension_service_test_with_install.h" |
| 22 #include "chrome/browser/extensions/extension_sync_data.h" | 23 #include "chrome/browser/extensions/extension_sync_data.h" |
| 23 #include "chrome/browser/extensions/extension_sync_service.h" | 24 #include "chrome/browser/extensions/extension_sync_service.h" |
| 24 #include "chrome/browser/extensions/extension_util.h" | 25 #include "chrome/browser/extensions/extension_util.h" |
| 25 #include "chrome/browser/extensions/updater/extension_updater.h" | 26 #include "chrome/browser/extensions/updater/extension_updater.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 // the FakeSyncChangeProcessor's SyncDataList as a map keyed by extension | 102 // the FakeSyncChangeProcessor's SyncDataList as a map keyed by extension |
| 102 // id. | 103 // id. |
| 103 syncer::SyncError ProcessSyncChanges( | 104 syncer::SyncError ProcessSyncChanges( |
| 104 const tracked_objects::Location& from_here, | 105 const tracked_objects::Location& from_here, |
| 105 const syncer::SyncChangeList& change_list) override { | 106 const syncer::SyncChangeList& change_list) override { |
| 106 syncer::FakeSyncChangeProcessor::ProcessSyncChanges(from_here, change_list); | 107 syncer::FakeSyncChangeProcessor::ProcessSyncChanges(from_here, change_list); |
| 107 for (const auto& change : change_list) { | 108 for (const auto& change : change_list) { |
| 108 syncer::SyncData sync_data = change.sync_data(); | 109 syncer::SyncData sync_data = change.sync_data(); |
| 109 EXPECT_EQ(expected_type_, sync_data.GetDataType()); | 110 EXPECT_EQ(expected_type_, sync_data.GetDataType()); |
| 110 | 111 |
| 111 scoped_ptr<ExtensionSyncData> modified = | 112 std::unique_ptr<ExtensionSyncData> modified = |
| 112 ExtensionSyncData::CreateFromSyncData(sync_data); | 113 ExtensionSyncData::CreateFromSyncData(sync_data); |
| 113 | 114 |
| 114 // Start by removing any existing entry for this extension id. | 115 // Start by removing any existing entry for this extension id. |
| 115 syncer::SyncDataList& data_list = data(); | 116 syncer::SyncDataList& data_list = data(); |
| 116 for (auto iter = data_list.begin(); iter != data_list.end(); ++iter) { | 117 for (auto iter = data_list.begin(); iter != data_list.end(); ++iter) { |
| 117 scoped_ptr<ExtensionSyncData> existing = | 118 std::unique_ptr<ExtensionSyncData> existing = |
| 118 ExtensionSyncData::CreateFromSyncData(*iter); | 119 ExtensionSyncData::CreateFromSyncData(*iter); |
| 119 if (existing->id() == modified->id()) { | 120 if (existing->id() == modified->id()) { |
| 120 data_list.erase(iter); | 121 data_list.erase(iter); |
| 121 break; | 122 break; |
| 122 } | 123 } |
| 123 } | 124 } |
| 124 | 125 |
| 125 // Now add in the new data for this id, if appropriate. | 126 // Now add in the new data for this id, if appropriate. |
| 126 if (change.change_type() == SyncChange::ACTION_ADD || | 127 if (change.change_type() == SyncChange::ACTION_ADD || |
| 127 change.change_type() == SyncChange::ACTION_UPDATE) { | 128 change.change_type() == SyncChange::ACTION_UPDATE) { |
| 128 data_list.push_back(sync_data); | 129 data_list.push_back(sync_data); |
| 129 } else if (change.change_type() != SyncChange::ACTION_DELETE) { | 130 } else if (change.change_type() != SyncChange::ACTION_DELETE) { |
| 130 ADD_FAILURE() << "Unexpected change type " << change.change_type(); | 131 ADD_FAILURE() << "Unexpected change type " << change.change_type(); |
| 131 } | 132 } |
| 132 } | 133 } |
| 133 return syncer::SyncError(); | 134 return syncer::SyncError(); |
| 134 } | 135 } |
| 135 | 136 |
| 136 // We override this to help catch the error of trying to use a single | 137 // We override this to help catch the error of trying to use a single |
| 137 // StatefulChangeProcessor to process changes for both extensions and apps | 138 // StatefulChangeProcessor to process changes for both extensions and apps |
| 138 // sync data. | 139 // sync data. |
| 139 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { | 140 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { |
| 140 EXPECT_EQ(expected_type_, type); | 141 EXPECT_EQ(expected_type_, type); |
| 141 return FakeSyncChangeProcessor::GetAllSyncData(type); | 142 return FakeSyncChangeProcessor::GetAllSyncData(type); |
| 142 } | 143 } |
| 143 | 144 |
| 144 // This is a helper to vend a wrapped version of this object suitable for | 145 // This is a helper to vend a wrapped version of this object suitable for |
| 145 // passing in to MergeDataAndStartSyncing, which takes a | 146 // passing in to MergeDataAndStartSyncing, which takes a |
| 146 // scoped_ptr<SyncChangeProcessor>, since in tests we typically don't want to | 147 // std::unique_ptr<SyncChangeProcessor>, since in tests we typically don't |
| 148 // want to |
| 147 // give up ownership of a local change processor. | 149 // give up ownership of a local change processor. |
| 148 scoped_ptr<syncer::SyncChangeProcessor> GetWrapped() { | 150 std::unique_ptr<syncer::SyncChangeProcessor> GetWrapped() { |
| 149 return make_scoped_ptr(new syncer::SyncChangeProcessorWrapperForTest(this)); | 151 return base::WrapUnique( |
| 152 new syncer::SyncChangeProcessorWrapperForTest(this)); |
| 150 } | 153 } |
| 151 | 154 |
| 152 protected: | 155 protected: |
| 153 // The expected ModelType of changes that this processor will see. | 156 // The expected ModelType of changes that this processor will see. |
| 154 syncer::ModelType expected_type_; | 157 syncer::ModelType expected_type_; |
| 155 | 158 |
| 156 DISALLOW_COPY_AND_ASSIGN(StatefulChangeProcessor); | 159 DISALLOW_COPY_AND_ASSIGN(StatefulChangeProcessor); |
| 157 }; | 160 }; |
| 158 | 161 |
| 159 } // namespace | 162 } // namespace |
| 160 | 163 |
| 161 class ExtensionServiceSyncTest | 164 class ExtensionServiceSyncTest |
| 162 : public extensions::ExtensionServiceTestWithInstall { | 165 : public extensions::ExtensionServiceTestWithInstall { |
| 163 public: | 166 public: |
| 164 void MockSyncStartFlare(bool* was_called, | 167 void MockSyncStartFlare(bool* was_called, |
| 165 syncer::ModelType* model_type_passed_in, | 168 syncer::ModelType* model_type_passed_in, |
| 166 syncer::ModelType model_type) { | 169 syncer::ModelType model_type) { |
| 167 *was_called = true; | 170 *was_called = true; |
| 168 *model_type_passed_in = model_type; | 171 *model_type_passed_in = model_type; |
| 169 } | 172 } |
| 170 | 173 |
| 171 // Helper to call MergeDataAndStartSyncing with no server data and dummy | 174 // Helper to call MergeDataAndStartSyncing with no server data and dummy |
| 172 // change processor / error factory. | 175 // change processor / error factory. |
| 173 void StartSyncing(syncer::ModelType type) { | 176 void StartSyncing(syncer::ModelType type) { |
| 174 ASSERT_TRUE(type == syncer::EXTENSIONS || type == syncer::APPS); | 177 ASSERT_TRUE(type == syncer::EXTENSIONS || type == syncer::APPS); |
| 175 extension_sync_service()->MergeDataAndStartSyncing( | 178 extension_sync_service()->MergeDataAndStartSyncing( |
| 176 type, syncer::SyncDataList(), | 179 type, syncer::SyncDataList(), |
| 177 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 180 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 178 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 181 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 179 } | 182 } |
| 180 | 183 |
| 181 protected: | 184 protected: |
| 182 // Paths to some of the fake extensions. | 185 // Paths to some of the fake extensions. |
| 183 base::FilePath good0_path() { | 186 base::FilePath good0_path() { |
| 184 return data_dir() | 187 return data_dir() |
| 185 .AppendASCII("good") | 188 .AppendASCII("good") |
| 186 .AppendASCII("Extensions") | 189 .AppendASCII("Extensions") |
| 187 .AppendASCII(good0) | 190 .AppendASCII(good0) |
| 188 .AppendASCII("1.0.0.0"); | 191 .AppendASCII("1.0.0.0"); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 EXPECT_TRUE(flare_was_called); | 264 EXPECT_TRUE(flare_was_called); |
| 262 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); | 265 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); |
| 263 | 266 |
| 264 // Reset. | 267 // Reset. |
| 265 flare_was_called = false; | 268 flare_was_called = false; |
| 266 triggered_type = syncer::UNSPECIFIED; | 269 triggered_type = syncer::UNSPECIFIED; |
| 267 | 270 |
| 268 // Once sync starts, flare should no longer be invoked. | 271 // Once sync starts, flare should no longer be invoked. |
| 269 extension_sync_service()->MergeDataAndStartSyncing( | 272 extension_sync_service()->MergeDataAndStartSyncing( |
| 270 syncer::EXTENSIONS, syncer::SyncDataList(), | 273 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 271 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 274 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 272 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 275 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 273 path = data_dir().AppendASCII("page_action.crx"); | 276 path = data_dir().AppendASCII("page_action.crx"); |
| 274 InstallCRX(path, INSTALL_NEW); | 277 InstallCRX(path, INSTALL_NEW); |
| 275 EXPECT_FALSE(flare_was_called); | 278 EXPECT_FALSE(flare_was_called); |
| 276 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); | 279 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); |
| 277 } | 280 } |
| 278 | 281 |
| 279 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) { | 282 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) { |
| 280 // Start the extensions service with one external extension already installed. | 283 // Start the extensions service with one external extension already installed. |
| 281 base::FilePath source_install_dir = | 284 base::FilePath source_install_dir = |
| 282 data_dir().AppendASCII("good").AppendASCII("Extensions"); | 285 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 296 ASSERT_EQ(3u, loaded_.size()); | 299 ASSERT_EQ(3u, loaded_.size()); |
| 297 | 300 |
| 298 // We start enabled. | 301 // We start enabled. |
| 299 const Extension* extension = service()->GetExtensionById(good0, true); | 302 const Extension* extension = service()->GetExtensionById(good0, true); |
| 300 ASSERT_TRUE(extension); | 303 ASSERT_TRUE(extension); |
| 301 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 304 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
| 302 | 305 |
| 303 // Sync starts up. | 306 // Sync starts up. |
| 304 extension_sync_service()->MergeDataAndStartSyncing( | 307 extension_sync_service()->MergeDataAndStartSyncing( |
| 305 syncer::EXTENSIONS, syncer::SyncDataList(), | 308 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 306 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 309 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 307 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 310 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 308 | 311 |
| 309 // Then sync data arrives telling us to disable |good0|. | 312 // Then sync data arrives telling us to disable |good0|. |
| 310 ExtensionSyncData disable_good_crx(*extension, false, | 313 ExtensionSyncData disable_good_crx(*extension, false, |
| 311 Extension::DISABLE_USER_ACTION, false, | 314 Extension::DISABLE_USER_ACTION, false, |
| 312 false, ExtensionSyncData::BOOLEAN_UNSET); | 315 false, ExtensionSyncData::BOOLEAN_UNSET); |
| 313 SyncChangeList list( | 316 SyncChangeList list( |
| 314 1, disable_good_crx.GetSyncChange(SyncChange::ACTION_UPDATE)); | 317 1, disable_good_crx.GetSyncChange(SyncChange::ACTION_UPDATE)); |
| 315 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 318 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 316 | 319 |
| 317 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); | 320 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 ExtensionSyncData disable_good0(*extension0, false, | 362 ExtensionSyncData disable_good0(*extension0, false, |
| 360 Extension::DISABLE_USER_ACTION, false, false, | 363 Extension::DISABLE_USER_ACTION, false, false, |
| 361 ExtensionSyncData::BOOLEAN_UNSET); | 364 ExtensionSyncData::BOOLEAN_UNSET); |
| 362 ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, | 365 ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, |
| 363 false, false, | 366 false, false, |
| 364 ExtensionSyncData::BOOLEAN_UNSET); | 367 ExtensionSyncData::BOOLEAN_UNSET); |
| 365 syncer::SyncDataList sync_data; | 368 syncer::SyncDataList sync_data; |
| 366 sync_data.push_back(disable_good0.GetSyncData()); | 369 sync_data.push_back(disable_good0.GetSyncData()); |
| 367 sync_data.push_back(enable_good2.GetSyncData()); | 370 sync_data.push_back(enable_good2.GetSyncData()); |
| 368 extension_sync_service()->MergeDataAndStartSyncing( | 371 extension_sync_service()->MergeDataAndStartSyncing( |
| 369 syncer::EXTENSIONS, | 372 syncer::EXTENSIONS, sync_data, |
| 370 sync_data, | 373 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 371 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 374 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 372 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | |
| 373 | 375 |
| 374 // Both sync changes should be ignored, since the local state was changed | 376 // Both sync changes should be ignored, since the local state was changed |
| 375 // before sync started, and so the local state is considered more recent. | 377 // before sync started, and so the local state is considered more recent. |
| 376 EXPECT_TRUE(service()->IsExtensionEnabled(good0)); | 378 EXPECT_TRUE(service()->IsExtensionEnabled(good0)); |
| 377 EXPECT_FALSE(service()->IsExtensionEnabled(good2)); | 379 EXPECT_FALSE(service()->IsExtensionEnabled(good2)); |
| 378 } | 380 } |
| 379 | 381 |
| 380 TEST_F(ExtensionServiceSyncTest, DontSelfNotify) { | 382 TEST_F(ExtensionServiceSyncTest, DontSelfNotify) { |
| 381 // Start the extension service with three extensions already installed. | 383 // Start the extension service with three extensions already installed. |
| 382 base::FilePath source_install_dir = | 384 base::FilePath source_install_dir = |
| 383 data_dir().AppendASCII("good").AppendASCII("Extensions"); | 385 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
| 384 base::FilePath pref_path = | 386 base::FilePath pref_path = |
| 385 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 387 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
| 386 | 388 |
| 387 InitializeInstalledExtensionService(pref_path, source_install_dir); | 389 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 388 | 390 |
| 389 // The user has enabled sync. | 391 // The user has enabled sync. |
| 390 ProfileSyncServiceFactory::GetForProfile(profile())->SetFirstSetupComplete(); | 392 ProfileSyncServiceFactory::GetForProfile(profile())->SetFirstSetupComplete(); |
| 391 // Make sure ExtensionSyncService is created, so it'll be notified of changes. | 393 // Make sure ExtensionSyncService is created, so it'll be notified of changes. |
| 392 extension_sync_service(); | 394 extension_sync_service(); |
| 393 | 395 |
| 394 service()->Init(); | 396 service()->Init(); |
| 395 ASSERT_TRUE(service()->is_ready()); | 397 ASSERT_TRUE(service()->is_ready()); |
| 396 ASSERT_EQ(3u, loaded_.size()); | 398 ASSERT_EQ(3u, loaded_.size()); |
| 397 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 399 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
| 398 | 400 |
| 399 syncer::FakeSyncChangeProcessor* processor = | 401 syncer::FakeSyncChangeProcessor* processor = |
| 400 new syncer::FakeSyncChangeProcessor; | 402 new syncer::FakeSyncChangeProcessor; |
| 401 extension_sync_service()->MergeDataAndStartSyncing( | 403 extension_sync_service()->MergeDataAndStartSyncing( |
| 402 syncer::EXTENSIONS, | 404 syncer::EXTENSIONS, syncer::SyncDataList(), base::WrapUnique(processor), |
| 403 syncer::SyncDataList(), | 405 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 404 make_scoped_ptr(processor), | |
| 405 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | |
| 406 | 406 |
| 407 processor->changes().clear(); | 407 processor->changes().clear(); |
| 408 | 408 |
| 409 // Simulate various incoming sync changes, and make sure they don't result in | 409 // Simulate various incoming sync changes, and make sure they don't result in |
| 410 // any outgoing changes. | 410 // any outgoing changes. |
| 411 | 411 |
| 412 { | 412 { |
| 413 const Extension* extension = service()->GetExtensionById(good0, true); | 413 const Extension* extension = service()->GetExtensionById(good0, true); |
| 414 ASSERT_TRUE(extension); | 414 ASSERT_TRUE(extension); |
| 415 | 415 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 } | 471 } |
| 472 | 472 |
| 473 TEST_F(ExtensionServiceSyncTest, GetSyncData) { | 473 TEST_F(ExtensionServiceSyncTest, GetSyncData) { |
| 474 InitializeEmptyExtensionService(); | 474 InitializeEmptyExtensionService(); |
| 475 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 475 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 476 const Extension* extension = service()->GetInstalledExtension(good_crx); | 476 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 477 ASSERT_TRUE(extension); | 477 ASSERT_TRUE(extension); |
| 478 | 478 |
| 479 extension_sync_service()->MergeDataAndStartSyncing( | 479 extension_sync_service()->MergeDataAndStartSyncing( |
| 480 syncer::EXTENSIONS, syncer::SyncDataList(), | 480 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 481 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 481 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 482 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 482 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 483 | 483 |
| 484 syncer::SyncDataList list = | 484 syncer::SyncDataList list = |
| 485 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 485 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 486 ASSERT_EQ(list.size(), 1U); | 486 ASSERT_EQ(list.size(), 1U); |
| 487 scoped_ptr<ExtensionSyncData> data = | 487 std::unique_ptr<ExtensionSyncData> data = |
| 488 ExtensionSyncData::CreateFromSyncData(list[0]); | 488 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 489 ASSERT_TRUE(data.get()); | 489 ASSERT_TRUE(data.get()); |
| 490 EXPECT_EQ(extension->id(), data->id()); | 490 EXPECT_EQ(extension->id(), data->id()); |
| 491 EXPECT_FALSE(data->uninstalled()); | 491 EXPECT_FALSE(data->uninstalled()); |
| 492 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); | 492 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); |
| 493 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), | 493 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
| 494 data->incognito_enabled()); | 494 data->incognito_enabled()); |
| 495 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 495 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 496 EXPECT_EQ(data->version(), *extension->version()); | 496 EXPECT_EQ(data->version(), *extension->version()); |
| 497 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 497 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
| 498 data->update_url()); | 498 data->update_url()); |
| 499 EXPECT_EQ(extension->name(), data->name()); | 499 EXPECT_EQ(extension->name(), data->name()); |
| 500 } | 500 } |
| 501 | 501 |
| 502 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) { | 502 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) { |
| 503 InitializeEmptyExtensionService(); | 503 InitializeEmptyExtensionService(); |
| 504 const Extension* extension = | 504 const Extension* extension = |
| 505 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 505 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 506 ASSERT_TRUE(extension); | 506 ASSERT_TRUE(extension); |
| 507 | 507 |
| 508 extension_sync_service()->MergeDataAndStartSyncing( | 508 extension_sync_service()->MergeDataAndStartSyncing( |
| 509 syncer::EXTENSIONS, syncer::SyncDataList(), | 509 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 510 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 510 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 511 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 511 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 512 | 512 |
| 513 { | 513 { |
| 514 syncer::SyncDataList list = | 514 syncer::SyncDataList list = |
| 515 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 515 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 516 ASSERT_EQ(list.size(), 1U); | 516 ASSERT_EQ(list.size(), 1U); |
| 517 scoped_ptr<ExtensionSyncData> data = | 517 std::unique_ptr<ExtensionSyncData> data = |
| 518 ExtensionSyncData::CreateFromSyncData(list[0]); | 518 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 519 ASSERT_TRUE(data.get()); | 519 ASSERT_TRUE(data.get()); |
| 520 EXPECT_TRUE(data->enabled()); | 520 EXPECT_TRUE(data->enabled()); |
| 521 EXPECT_TRUE(data->supports_disable_reasons()); | 521 EXPECT_TRUE(data->supports_disable_reasons()); |
| 522 EXPECT_EQ(Extension::DISABLE_NONE, data->disable_reasons()); | 522 EXPECT_EQ(Extension::DISABLE_NONE, data->disable_reasons()); |
| 523 } | 523 } |
| 524 | 524 |
| 525 // Syncable disable reason, should propagate to sync. | 525 // Syncable disable reason, should propagate to sync. |
| 526 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 526 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
| 527 { | 527 { |
| 528 syncer::SyncDataList list = | 528 syncer::SyncDataList list = |
| 529 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 529 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 530 ASSERT_EQ(list.size(), 1U); | 530 ASSERT_EQ(list.size(), 1U); |
| 531 scoped_ptr<ExtensionSyncData> data = | 531 std::unique_ptr<ExtensionSyncData> data = |
| 532 ExtensionSyncData::CreateFromSyncData(list[0]); | 532 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 533 ASSERT_TRUE(data.get()); | 533 ASSERT_TRUE(data.get()); |
| 534 EXPECT_FALSE(data->enabled()); | 534 EXPECT_FALSE(data->enabled()); |
| 535 EXPECT_TRUE(data->supports_disable_reasons()); | 535 EXPECT_TRUE(data->supports_disable_reasons()); |
| 536 EXPECT_EQ(Extension::DISABLE_USER_ACTION, data->disable_reasons()); | 536 EXPECT_EQ(Extension::DISABLE_USER_ACTION, data->disable_reasons()); |
| 537 } | 537 } |
| 538 service()->EnableExtension(good_crx); | 538 service()->EnableExtension(good_crx); |
| 539 | 539 |
| 540 // Non-syncable disable reason. The sync data should still say "enabled". | 540 // Non-syncable disable reason. The sync data should still say "enabled". |
| 541 service()->DisableExtension(good_crx, Extension::DISABLE_RELOAD); | 541 service()->DisableExtension(good_crx, Extension::DISABLE_RELOAD); |
| 542 { | 542 { |
| 543 syncer::SyncDataList list = | 543 syncer::SyncDataList list = |
| 544 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 544 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 545 ASSERT_EQ(list.size(), 1U); | 545 ASSERT_EQ(list.size(), 1U); |
| 546 scoped_ptr<ExtensionSyncData> data = | 546 std::unique_ptr<ExtensionSyncData> data = |
| 547 ExtensionSyncData::CreateFromSyncData(list[0]); | 547 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 548 ASSERT_TRUE(data.get()); | 548 ASSERT_TRUE(data.get()); |
| 549 EXPECT_TRUE(data->enabled()); | 549 EXPECT_TRUE(data->enabled()); |
| 550 EXPECT_TRUE(data->supports_disable_reasons()); | 550 EXPECT_TRUE(data->supports_disable_reasons()); |
| 551 EXPECT_EQ(Extension::DISABLE_NONE, data->disable_reasons()); | 551 EXPECT_EQ(Extension::DISABLE_NONE, data->disable_reasons()); |
| 552 } | 552 } |
| 553 service()->EnableExtension(good_crx); | 553 service()->EnableExtension(good_crx); |
| 554 | 554 |
| 555 // Both a syncable and a non-syncable disable reason, only the former should | 555 // Both a syncable and a non-syncable disable reason, only the former should |
| 556 // propagate to sync. | 556 // propagate to sync. |
| 557 service()->DisableExtension( | 557 service()->DisableExtension( |
| 558 good_crx, Extension::DISABLE_USER_ACTION | Extension::DISABLE_RELOAD); | 558 good_crx, Extension::DISABLE_USER_ACTION | Extension::DISABLE_RELOAD); |
| 559 { | 559 { |
| 560 syncer::SyncDataList list = | 560 syncer::SyncDataList list = |
| 561 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 561 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 562 ASSERT_EQ(list.size(), 1U); | 562 ASSERT_EQ(list.size(), 1U); |
| 563 scoped_ptr<ExtensionSyncData> data = | 563 std::unique_ptr<ExtensionSyncData> data = |
| 564 ExtensionSyncData::CreateFromSyncData(list[0]); | 564 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 565 ASSERT_TRUE(data.get()); | 565 ASSERT_TRUE(data.get()); |
| 566 EXPECT_FALSE(data->enabled()); | 566 EXPECT_FALSE(data->enabled()); |
| 567 EXPECT_TRUE(data->supports_disable_reasons()); | 567 EXPECT_TRUE(data->supports_disable_reasons()); |
| 568 EXPECT_EQ(Extension::DISABLE_USER_ACTION, data->disable_reasons()); | 568 EXPECT_EQ(Extension::DISABLE_USER_ACTION, data->disable_reasons()); |
| 569 } | 569 } |
| 570 service()->EnableExtension(good_crx); | 570 service()->EnableExtension(good_crx); |
| 571 } | 571 } |
| 572 | 572 |
| 573 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) { | 573 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) { |
| 574 InitializeEmptyExtensionService(); | 574 InitializeEmptyExtensionService(); |
| 575 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 575 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 576 TerminateExtension(good_crx); | 576 TerminateExtension(good_crx); |
| 577 const Extension* extension = service()->GetInstalledExtension(good_crx); | 577 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 578 ASSERT_TRUE(extension); | 578 ASSERT_TRUE(extension); |
| 579 | 579 |
| 580 extension_sync_service()->MergeDataAndStartSyncing( | 580 extension_sync_service()->MergeDataAndStartSyncing( |
| 581 syncer::EXTENSIONS, syncer::SyncDataList(), | 581 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 582 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 582 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 583 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 583 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 584 | 584 |
| 585 syncer::SyncDataList list = | 585 syncer::SyncDataList list = |
| 586 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 586 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 587 ASSERT_EQ(list.size(), 1U); | 587 ASSERT_EQ(list.size(), 1U); |
| 588 scoped_ptr<ExtensionSyncData> data = | 588 std::unique_ptr<ExtensionSyncData> data = |
| 589 ExtensionSyncData::CreateFromSyncData(list[0]); | 589 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 590 ASSERT_TRUE(data.get()); | 590 ASSERT_TRUE(data.get()); |
| 591 EXPECT_EQ(extension->id(), data->id()); | 591 EXPECT_EQ(extension->id(), data->id()); |
| 592 EXPECT_FALSE(data->uninstalled()); | 592 EXPECT_FALSE(data->uninstalled()); |
| 593 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); | 593 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); |
| 594 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), | 594 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
| 595 data->incognito_enabled()); | 595 data->incognito_enabled()); |
| 596 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 596 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 597 EXPECT_EQ(data->version(), *extension->version()); | 597 EXPECT_EQ(data->version(), *extension->version()); |
| 598 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 598 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
| 599 data->update_url()); | 599 data->update_url()); |
| 600 EXPECT_EQ(extension->name(), data->name()); | 600 EXPECT_EQ(extension->name(), data->name()); |
| 601 } | 601 } |
| 602 | 602 |
| 603 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) { | 603 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) { |
| 604 InitializeEmptyExtensionService(); | 604 InitializeEmptyExtensionService(); |
| 605 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 605 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 606 const Extension* extension = service()->GetInstalledExtension(good_crx); | 606 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 607 ASSERT_TRUE(extension); | 607 ASSERT_TRUE(extension); |
| 608 | 608 |
| 609 extension_sync_service()->MergeDataAndStartSyncing( | 609 extension_sync_service()->MergeDataAndStartSyncing( |
| 610 syncer::APPS, syncer::SyncDataList(), | 610 syncer::APPS, syncer::SyncDataList(), |
| 611 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 611 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 612 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 612 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 613 | 613 |
| 614 syncer::SyncDataList list = | 614 syncer::SyncDataList list = |
| 615 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 615 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 616 ASSERT_EQ(list.size(), 0U); | 616 ASSERT_EQ(list.size(), 0U); |
| 617 } | 617 } |
| 618 | 618 |
| 619 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) { | 619 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) { |
| 620 InitializeEmptyExtensionService(); | 620 InitializeEmptyExtensionService(); |
| 621 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 621 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 622 const Extension* extension = service()->GetInstalledExtension(good_crx); | 622 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 623 ASSERT_TRUE(extension); | 623 ASSERT_TRUE(extension); |
| 624 | 624 |
| 625 extension_sync_service()->MergeDataAndStartSyncing( | 625 extension_sync_service()->MergeDataAndStartSyncing( |
| 626 syncer::EXTENSIONS, syncer::SyncDataList(), | 626 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 627 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 627 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 628 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 628 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 629 | 629 |
| 630 { | 630 { |
| 631 syncer::SyncDataList list = | 631 syncer::SyncDataList list = |
| 632 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 632 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 633 ASSERT_EQ(list.size(), 1U); | 633 ASSERT_EQ(list.size(), 1U); |
| 634 scoped_ptr<ExtensionSyncData> data = | 634 std::unique_ptr<ExtensionSyncData> data = |
| 635 ExtensionSyncData::CreateFromSyncData(list[0]); | 635 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 636 ASSERT_TRUE(data.get()); | 636 ASSERT_TRUE(data.get()); |
| 637 EXPECT_TRUE(data->enabled()); | 637 EXPECT_TRUE(data->enabled()); |
| 638 EXPECT_FALSE(data->incognito_enabled()); | 638 EXPECT_FALSE(data->incognito_enabled()); |
| 639 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 639 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 640 } | 640 } |
| 641 | 641 |
| 642 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 642 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
| 643 { | 643 { |
| 644 syncer::SyncDataList list = | 644 syncer::SyncDataList list = |
| 645 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 645 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 646 ASSERT_EQ(list.size(), 1U); | 646 ASSERT_EQ(list.size(), 1U); |
| 647 scoped_ptr<ExtensionSyncData> data = | 647 std::unique_ptr<ExtensionSyncData> data = |
| 648 ExtensionSyncData::CreateFromSyncData(list[0]); | 648 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 649 ASSERT_TRUE(data.get()); | 649 ASSERT_TRUE(data.get()); |
| 650 EXPECT_FALSE(data->enabled()); | 650 EXPECT_FALSE(data->enabled()); |
| 651 EXPECT_FALSE(data->incognito_enabled()); | 651 EXPECT_FALSE(data->incognito_enabled()); |
| 652 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 652 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 653 } | 653 } |
| 654 | 654 |
| 655 extensions::util::SetIsIncognitoEnabled(good_crx, profile(), true); | 655 extensions::util::SetIsIncognitoEnabled(good_crx, profile(), true); |
| 656 extensions::util::SetAllowedScriptingOnAllUrls( | 656 extensions::util::SetAllowedScriptingOnAllUrls( |
| 657 good_crx, profile(), false); | 657 good_crx, profile(), false); |
| 658 { | 658 { |
| 659 syncer::SyncDataList list = | 659 syncer::SyncDataList list = |
| 660 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 660 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 661 ASSERT_EQ(list.size(), 1U); | 661 ASSERT_EQ(list.size(), 1U); |
| 662 scoped_ptr<ExtensionSyncData> data = | 662 std::unique_ptr<ExtensionSyncData> data = |
| 663 ExtensionSyncData::CreateFromSyncData(list[0]); | 663 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 664 ASSERT_TRUE(data.get()); | 664 ASSERT_TRUE(data.get()); |
| 665 EXPECT_FALSE(data->enabled()); | 665 EXPECT_FALSE(data->enabled()); |
| 666 EXPECT_TRUE(data->incognito_enabled()); | 666 EXPECT_TRUE(data->incognito_enabled()); |
| 667 EXPECT_EQ(ExtensionSyncData::BOOLEAN_FALSE, data->all_urls_enabled()); | 667 EXPECT_EQ(ExtensionSyncData::BOOLEAN_FALSE, data->all_urls_enabled()); |
| 668 } | 668 } |
| 669 | 669 |
| 670 service()->EnableExtension(good_crx); | 670 service()->EnableExtension(good_crx); |
| 671 extensions::util::SetAllowedScriptingOnAllUrls( | 671 extensions::util::SetAllowedScriptingOnAllUrls( |
| 672 good_crx, profile(), true); | 672 good_crx, profile(), true); |
| 673 { | 673 { |
| 674 syncer::SyncDataList list = | 674 syncer::SyncDataList list = |
| 675 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 675 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 676 ASSERT_EQ(list.size(), 1U); | 676 ASSERT_EQ(list.size(), 1U); |
| 677 scoped_ptr<ExtensionSyncData> data = | 677 std::unique_ptr<ExtensionSyncData> data = |
| 678 ExtensionSyncData::CreateFromSyncData(list[0]); | 678 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 679 ASSERT_TRUE(data.get()); | 679 ASSERT_TRUE(data.get()); |
| 680 EXPECT_TRUE(data->enabled()); | 680 EXPECT_TRUE(data->enabled()); |
| 681 EXPECT_TRUE(data->incognito_enabled()); | 681 EXPECT_TRUE(data->incognito_enabled()); |
| 682 EXPECT_EQ(ExtensionSyncData::BOOLEAN_TRUE, data->all_urls_enabled()); | 682 EXPECT_EQ(ExtensionSyncData::BOOLEAN_TRUE, data->all_urls_enabled()); |
| 683 } | 683 } |
| 684 } | 684 } |
| 685 | 685 |
| 686 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) { | 686 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) { |
| 687 InitializeEmptyExtensionService(); | 687 InitializeEmptyExtensionService(); |
| 688 InstallCRXWithLocation( | 688 InstallCRXWithLocation( |
| 689 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); | 689 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); |
| 690 const Extension* extension = service()->GetInstalledExtension(good_crx); | 690 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 691 ASSERT_TRUE(extension); | 691 ASSERT_TRUE(extension); |
| 692 | 692 |
| 693 extension_sync_service()->MergeDataAndStartSyncing( | 693 extension_sync_service()->MergeDataAndStartSyncing( |
| 694 syncer::EXTENSIONS, syncer::SyncDataList(), | 694 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 695 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 695 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 696 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 696 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 697 StartSyncing(syncer::APPS); | 697 StartSyncing(syncer::APPS); |
| 698 | 698 |
| 699 UninstallExtension(good_crx, false); | 699 UninstallExtension(good_crx, false); |
| 700 EXPECT_TRUE( | 700 EXPECT_TRUE( |
| 701 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); | 701 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); |
| 702 | 702 |
| 703 sync_pb::EntitySpecifics specifics; | 703 sync_pb::EntitySpecifics specifics; |
| 704 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); | 704 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); |
| 705 sync_pb::ExtensionSpecifics* extension_specifics = | 705 sync_pb::ExtensionSpecifics* extension_specifics = |
| 706 app_specifics->mutable_extension(); | 706 app_specifics->mutable_extension(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 718 | 718 |
| 719 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) { | 719 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) { |
| 720 InitializeEmptyExtensionService(); | 720 InitializeEmptyExtensionService(); |
| 721 const Extension* app = | 721 const Extension* app = |
| 722 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); | 722 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); |
| 723 ASSERT_TRUE(app); | 723 ASSERT_TRUE(app); |
| 724 ASSERT_TRUE(app->is_app()); | 724 ASSERT_TRUE(app->is_app()); |
| 725 | 725 |
| 726 extension_sync_service()->MergeDataAndStartSyncing( | 726 extension_sync_service()->MergeDataAndStartSyncing( |
| 727 syncer::APPS, syncer::SyncDataList(), | 727 syncer::APPS, syncer::SyncDataList(), |
| 728 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 728 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 729 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 729 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 730 | 730 |
| 731 syncer::StringOrdinal initial_ordinal = | 731 syncer::StringOrdinal initial_ordinal = |
| 732 syncer::StringOrdinal::CreateInitialOrdinal(); | 732 syncer::StringOrdinal::CreateInitialOrdinal(); |
| 733 { | 733 { |
| 734 syncer::SyncDataList list = | 734 syncer::SyncDataList list = |
| 735 extension_sync_service()->GetAllSyncData(syncer::APPS); | 735 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 736 ASSERT_EQ(list.size(), 1U); | 736 ASSERT_EQ(list.size(), 1U); |
| 737 | 737 |
| 738 scoped_ptr<ExtensionSyncData> app_sync_data = | 738 std::unique_ptr<ExtensionSyncData> app_sync_data = |
| 739 ExtensionSyncData::CreateFromSyncData(list[0]); | 739 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 740 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->app_launch_ordinal())); | 740 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->app_launch_ordinal())); |
| 741 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->page_ordinal())); | 741 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->page_ordinal())); |
| 742 } | 742 } |
| 743 | 743 |
| 744 AppSorting* sorting = ExtensionSystem::Get(profile())->app_sorting(); | 744 AppSorting* sorting = ExtensionSystem::Get(profile())->app_sorting(); |
| 745 sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter()); | 745 sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter()); |
| 746 { | 746 { |
| 747 syncer::SyncDataList list = | 747 syncer::SyncDataList list = |
| 748 extension_sync_service()->GetAllSyncData(syncer::APPS); | 748 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 749 ASSERT_EQ(list.size(), 1U); | 749 ASSERT_EQ(list.size(), 1U); |
| 750 | 750 |
| 751 scoped_ptr<ExtensionSyncData> app_sync_data = | 751 std::unique_ptr<ExtensionSyncData> app_sync_data = |
| 752 ExtensionSyncData::CreateFromSyncData(list[0]); | 752 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 753 ASSERT_TRUE(app_sync_data.get()); | 753 ASSERT_TRUE(app_sync_data.get()); |
| 754 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->app_launch_ordinal())); | 754 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->app_launch_ordinal())); |
| 755 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->page_ordinal())); | 755 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data->page_ordinal())); |
| 756 } | 756 } |
| 757 | 757 |
| 758 sorting->SetPageOrdinal(app->id(), initial_ordinal.CreateAfter()); | 758 sorting->SetPageOrdinal(app->id(), initial_ordinal.CreateAfter()); |
| 759 { | 759 { |
| 760 syncer::SyncDataList list = | 760 syncer::SyncDataList list = |
| 761 extension_sync_service()->GetAllSyncData(syncer::APPS); | 761 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 762 ASSERT_EQ(list.size(), 1U); | 762 ASSERT_EQ(list.size(), 1U); |
| 763 | 763 |
| 764 scoped_ptr<ExtensionSyncData> app_sync_data = | 764 std::unique_ptr<ExtensionSyncData> app_sync_data = |
| 765 ExtensionSyncData::CreateFromSyncData(list[0]); | 765 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 766 ASSERT_TRUE(app_sync_data.get()); | 766 ASSERT_TRUE(app_sync_data.get()); |
| 767 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->app_launch_ordinal())); | 767 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->app_launch_ordinal())); |
| 768 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->page_ordinal())); | 768 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data->page_ordinal())); |
| 769 } | 769 } |
| 770 } | 770 } |
| 771 | 771 |
| 772 // TODO (rdevlin.cronin): The OnExtensionMoved() method has been removed from | 772 // TODO (rdevlin.cronin): The OnExtensionMoved() method has been removed from |
| 773 // ExtensionService, so this test probably needs a new home. Unfortunately, it | 773 // ExtensionService, so this test probably needs a new home. Unfortunately, it |
| 774 // relies pretty heavily on things like InitializeExtension[Sync]Service() and | 774 // relies pretty heavily on things like InitializeExtension[Sync]Service() and |
| 775 // PackAndInstallCRX(). When we clean up a bit more, this should move out. | 775 // PackAndInstallCRX(). When we clean up a bit more, this should move out. |
| 776 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettingsOnExtensionMoved) { | 776 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettingsOnExtensionMoved) { |
| 777 InitializeEmptyExtensionService(); | 777 InitializeEmptyExtensionService(); |
| 778 const size_t kAppCount = 3; | 778 const size_t kAppCount = 3; |
| 779 const Extension* apps[kAppCount]; | 779 const Extension* apps[kAppCount]; |
| 780 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); | 780 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
| 781 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); | 781 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
| 782 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); | 782 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); |
| 783 for (size_t i = 0; i < kAppCount; ++i) { | 783 for (size_t i = 0; i < kAppCount; ++i) { |
| 784 ASSERT_TRUE(apps[i]); | 784 ASSERT_TRUE(apps[i]); |
| 785 ASSERT_TRUE(apps[i]->is_app()); | 785 ASSERT_TRUE(apps[i]->is_app()); |
| 786 } | 786 } |
| 787 | 787 |
| 788 extension_sync_service()->MergeDataAndStartSyncing( | 788 extension_sync_service()->MergeDataAndStartSyncing( |
| 789 syncer::APPS, syncer::SyncDataList(), | 789 syncer::APPS, syncer::SyncDataList(), |
| 790 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 790 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 791 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 791 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 792 | 792 |
| 793 ExtensionSystem::Get(service()->GetBrowserContext()) | 793 ExtensionSystem::Get(service()->GetBrowserContext()) |
| 794 ->app_sorting() | 794 ->app_sorting() |
| 795 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); | 795 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); |
| 796 { | 796 { |
| 797 syncer::SyncDataList list = | 797 syncer::SyncDataList list = |
| 798 extension_sync_service()->GetAllSyncData(syncer::APPS); | 798 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 799 ASSERT_EQ(list.size(), 3U); | 799 ASSERT_EQ(list.size(), 3U); |
| 800 | 800 |
| 801 scoped_ptr<ExtensionSyncData> data[kAppCount]; | 801 std::unique_ptr<ExtensionSyncData> data[kAppCount]; |
| 802 for (size_t i = 0; i < kAppCount; ++i) { | 802 for (size_t i = 0; i < kAppCount; ++i) { |
| 803 data[i] = ExtensionSyncData::CreateFromSyncData(list[i]); | 803 data[i] = ExtensionSyncData::CreateFromSyncData(list[i]); |
| 804 ASSERT_TRUE(data[i].get()); | 804 ASSERT_TRUE(data[i].get()); |
| 805 } | 805 } |
| 806 | 806 |
| 807 // The sync data is not always in the same order our apps were installed in, | 807 // The sync data is not always in the same order our apps were installed in, |
| 808 // so we do that sorting here so we can make sure the values are changed as | 808 // so we do that sorting here so we can make sure the values are changed as |
| 809 // expected. | 809 // expected. |
| 810 syncer::StringOrdinal app_launch_ordinals[kAppCount]; | 810 syncer::StringOrdinal app_launch_ordinals[kAppCount]; |
| 811 for (size_t i = 0; i < kAppCount; ++i) { | 811 for (size_t i = 0; i < kAppCount; ++i) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 822 | 822 |
| 823 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) { | 823 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) { |
| 824 InitializeEmptyExtensionService(); | 824 InitializeEmptyExtensionService(); |
| 825 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 825 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 826 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); | 826 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); |
| 827 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); | 827 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); |
| 828 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); | 828 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); |
| 829 | 829 |
| 830 extension_sync_service()->MergeDataAndStartSyncing( | 830 extension_sync_service()->MergeDataAndStartSyncing( |
| 831 syncer::APPS, syncer::SyncDataList(), | 831 syncer::APPS, syncer::SyncDataList(), |
| 832 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 832 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 833 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 833 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 834 extension_sync_service()->MergeDataAndStartSyncing( | 834 extension_sync_service()->MergeDataAndStartSyncing( |
| 835 syncer::EXTENSIONS, syncer::SyncDataList(), | 835 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 836 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 836 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 837 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 837 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 838 | 838 |
| 839 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); | 839 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); |
| 840 TerminateExtension(theme2_crx); | 840 TerminateExtension(theme2_crx); |
| 841 | 841 |
| 842 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); | 842 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); |
| 843 EXPECT_EQ( | 843 EXPECT_EQ( |
| 844 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); | 844 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); |
| 845 } | 845 } |
| 846 | 846 |
| 847 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) { | 847 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) { |
| 848 InitializeEmptyExtensionService(); | 848 InitializeEmptyExtensionService(); |
| 849 extension_sync_service()->MergeDataAndStartSyncing( | 849 extension_sync_service()->MergeDataAndStartSyncing( |
| 850 syncer::EXTENSIONS, syncer::SyncDataList(), | 850 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 851 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 851 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 852 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 852 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 853 | 853 |
| 854 sync_pb::EntitySpecifics specifics; | 854 sync_pb::EntitySpecifics specifics; |
| 855 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 855 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 856 ext_specifics->set_id(good_crx); | 856 ext_specifics->set_id(good_crx); |
| 857 ext_specifics->set_version("1.0"); | 857 ext_specifics->set_version("1.0"); |
| 858 | 858 |
| 859 SyncChangeList list = | 859 SyncChangeList list = |
| 860 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE); | 860 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE); |
| 861 | 861 |
| 862 // Should do nothing. | 862 // Should do nothing. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 // Should again do nothing. | 915 // Should again do nothing. |
| 916 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 916 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 917 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 917 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 918 } | 918 } |
| 919 } | 919 } |
| 920 | 920 |
| 921 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) { | 921 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) { |
| 922 InitializeEmptyExtensionService(); | 922 InitializeEmptyExtensionService(); |
| 923 extension_sync_service()->MergeDataAndStartSyncing( | 923 extension_sync_service()->MergeDataAndStartSyncing( |
| 924 syncer::EXTENSIONS, syncer::SyncDataList(), | 924 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 925 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 925 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 926 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 926 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 927 | 927 |
| 928 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 928 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 929 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 929 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 930 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 930 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 931 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 931 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
| 932 good_crx, profile())); | 932 good_crx, profile())); |
| 933 const bool kDefaultAllowedScripting = | 933 const bool kDefaultAllowedScripting = |
| 934 extensions::util::DefaultAllowedScriptingOnAllUrls(); | 934 extensions::util::DefaultAllowedScriptingOnAllUrls(); |
| 935 EXPECT_EQ(kDefaultAllowedScripting, | 935 EXPECT_EQ(kDefaultAllowedScripting, |
| 936 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 936 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 1008 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| 1009 } | 1009 } |
| 1010 | 1010 |
| 1011 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1011 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1012 } | 1012 } |
| 1013 | 1013 |
| 1014 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) { | 1014 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) { |
| 1015 InitializeEmptyExtensionService(); | 1015 InitializeEmptyExtensionService(); |
| 1016 extension_sync_service()->MergeDataAndStartSyncing( | 1016 extension_sync_service()->MergeDataAndStartSyncing( |
| 1017 syncer::EXTENSIONS, syncer::SyncDataList(), | 1017 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1018 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1018 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1019 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1019 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1020 | 1020 |
| 1021 const base::FilePath path = data_dir().AppendASCII("good.crx"); | 1021 const base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 1022 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 1022 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 1023 | 1023 |
| 1024 struct TestCase { | 1024 struct TestCase { |
| 1025 const char* name; // For failure output only. | 1025 const char* name; // For failure output only. |
| 1026 bool sync_enabled; // The "enabled" flag coming in from Sync. | 1026 bool sync_enabled; // The "enabled" flag coming in from Sync. |
| 1027 // The disable reason(s) coming in from Sync, or -1 for "not set". | 1027 // The disable reason(s) coming in from Sync, or -1 for "not set". |
| 1028 int sync_disable_reasons; | 1028 int sync_disable_reasons; |
| 1029 // The disable reason(s) that should be set on the installed extension. | 1029 // The disable reason(s) that should be set on the installed extension. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 SyncChangeList list = | 1066 SyncChangeList list = |
| 1067 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1067 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1068 | 1068 |
| 1069 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1069 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1070 | 1070 |
| 1071 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1071 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1072 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED | 1072 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED |
| 1073 : DISABLED); | 1073 : DISABLED); |
| 1074 EXPECT_EQ(test_case.expect_disable_reasons, | 1074 EXPECT_EQ(test_case.expect_disable_reasons, |
| 1075 prefs->GetDisableReasons(good_crx)); | 1075 prefs->GetDisableReasons(good_crx)); |
| 1076 scoped_ptr<const PermissionSet> permissions = | 1076 std::unique_ptr<const PermissionSet> permissions = |
| 1077 prefs->GetGrantedPermissions(good_crx); | 1077 prefs->GetGrantedPermissions(good_crx); |
| 1078 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty()); | 1078 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty()); |
| 1079 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1079 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1080 | 1080 |
| 1081 // Remove the extension again, so we can install it again for the next case. | 1081 // Remove the extension again, so we can install it again for the next case. |
| 1082 UninstallExtension(good_crx, false, | 1082 UninstallExtension(good_crx, false, |
| 1083 test_case.sync_enabled ? Extension::ENABLED | 1083 test_case.sync_enabled ? Extension::ENABLED |
| 1084 : Extension::DISABLED); | 1084 : Extension::DISABLED); |
| 1085 } | 1085 } |
| 1086 } | 1086 } |
| 1087 | 1087 |
| 1088 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) { | 1088 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) { |
| 1089 InitializeExtensionServiceWithUpdater(); | 1089 InitializeExtensionServiceWithUpdater(); |
| 1090 extension_sync_service()->MergeDataAndStartSyncing( | 1090 extension_sync_service()->MergeDataAndStartSyncing( |
| 1091 syncer::EXTENSIONS, syncer::SyncDataList(), | 1091 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1092 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1092 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1093 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1093 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1094 | 1094 |
| 1095 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 1095 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 1096 TerminateExtension(good_crx); | 1096 TerminateExtension(good_crx); |
| 1097 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 1097 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 1098 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1098 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1099 | 1099 |
| 1100 sync_pb::EntitySpecifics specifics; | 1100 sync_pb::EntitySpecifics specifics; |
| 1101 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1101 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1102 ext_specifics->set_id(good_crx); | 1102 ext_specifics->set_id(good_crx); |
| 1103 ext_specifics->set_version( | 1103 ext_specifics->set_version( |
| 1104 service()->GetInstalledExtension(good_crx)->version()->GetString()); | 1104 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
| 1105 ext_specifics->set_enabled(false); | 1105 ext_specifics->set_enabled(false); |
| 1106 ext_specifics->set_incognito_enabled(true); | 1106 ext_specifics->set_incognito_enabled(true); |
| 1107 | 1107 |
| 1108 SyncChangeList list = | 1108 SyncChangeList list = |
| 1109 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1109 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1110 | 1110 |
| 1111 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1111 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1112 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 1112 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 1113 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1113 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1114 | 1114 |
| 1115 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1115 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1116 } | 1116 } |
| 1117 | 1117 |
| 1118 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) { | 1118 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) { |
| 1119 InitializeExtensionServiceWithUpdater(); | 1119 InitializeExtensionServiceWithUpdater(); |
| 1120 extension_sync_service()->MergeDataAndStartSyncing( | 1120 extension_sync_service()->MergeDataAndStartSyncing( |
| 1121 syncer::EXTENSIONS, syncer::SyncDataList(), | 1121 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1122 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1122 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1123 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1123 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1124 | 1124 |
| 1125 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 1125 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 1126 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 1126 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 1127 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1127 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1128 | 1128 |
| 1129 sync_pb::EntitySpecifics specifics; | 1129 sync_pb::EntitySpecifics specifics; |
| 1130 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1130 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1131 ext_specifics->set_id(good_crx); | 1131 ext_specifics->set_id(good_crx); |
| 1132 ext_specifics->set_enabled(true); | 1132 ext_specifics->set_enabled(true); |
| 1133 | 1133 |
| 1134 const base::Version installed_version = | 1134 const base::Version installed_version = |
| 1135 *service()->GetInstalledExtension(good_crx)->version(); | 1135 *service()->GetInstalledExtension(good_crx)->version(); |
| 1136 | 1136 |
| 1137 { | 1137 { |
| 1138 ext_specifics->set_version(installed_version.GetString()); | 1138 ext_specifics->set_version(installed_version.GetString()); |
| 1139 | 1139 |
| 1140 SyncChangeList list = | 1140 SyncChangeList list = |
| 1141 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1141 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1142 | 1142 |
| 1143 // Should do nothing if extension version == sync version. | 1143 // Should do nothing if extension version == sync version. |
| 1144 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1144 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1145 EXPECT_FALSE(service()->updater()->WillCheckSoon()); | 1145 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
| 1146 // Make sure the version we'll send back to sync didn't change. | 1146 // Make sure the version we'll send back to sync didn't change. |
| 1147 syncer::SyncDataList data = | 1147 syncer::SyncDataList data = |
| 1148 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1148 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1149 ASSERT_EQ(1u, data.size()); | 1149 ASSERT_EQ(1u, data.size()); |
| 1150 scoped_ptr<ExtensionSyncData> extension_data = | 1150 std::unique_ptr<ExtensionSyncData> extension_data = |
| 1151 ExtensionSyncData::CreateFromSyncData(data[0]); | 1151 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1152 ASSERT_TRUE(extension_data); | 1152 ASSERT_TRUE(extension_data); |
| 1153 EXPECT_EQ(installed_version, extension_data->version()); | 1153 EXPECT_EQ(installed_version, extension_data->version()); |
| 1154 } | 1154 } |
| 1155 | 1155 |
| 1156 // Should do nothing if extension version > sync version. | 1156 // Should do nothing if extension version > sync version. |
| 1157 { | 1157 { |
| 1158 ext_specifics->set_version("0.0.0.0"); | 1158 ext_specifics->set_version("0.0.0.0"); |
| 1159 | 1159 |
| 1160 SyncChangeList list = | 1160 SyncChangeList list = |
| 1161 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1161 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1162 | 1162 |
| 1163 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1163 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1164 EXPECT_FALSE(service()->updater()->WillCheckSoon()); | 1164 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
| 1165 // Make sure the version we'll send back to sync didn't change. | 1165 // Make sure the version we'll send back to sync didn't change. |
| 1166 syncer::SyncDataList data = | 1166 syncer::SyncDataList data = |
| 1167 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1167 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1168 ASSERT_EQ(1u, data.size()); | 1168 ASSERT_EQ(1u, data.size()); |
| 1169 scoped_ptr<ExtensionSyncData> extension_data = | 1169 std::unique_ptr<ExtensionSyncData> extension_data = |
| 1170 ExtensionSyncData::CreateFromSyncData(data[0]); | 1170 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1171 ASSERT_TRUE(extension_data); | 1171 ASSERT_TRUE(extension_data); |
| 1172 EXPECT_EQ(installed_version, extension_data->version()); | 1172 EXPECT_EQ(installed_version, extension_data->version()); |
| 1173 } | 1173 } |
| 1174 | 1174 |
| 1175 // Should kick off an update if extension version < sync version. | 1175 // Should kick off an update if extension version < sync version. |
| 1176 { | 1176 { |
| 1177 const base::Version new_version("9.9.9.9"); | 1177 const base::Version new_version("9.9.9.9"); |
| 1178 ext_specifics->set_version(new_version.GetString()); | 1178 ext_specifics->set_version(new_version.GetString()); |
| 1179 | 1179 |
| 1180 SyncChangeList list = | 1180 SyncChangeList list = |
| 1181 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1181 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1182 | 1182 |
| 1183 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1183 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1184 EXPECT_TRUE(service()->updater()->WillCheckSoon()); | 1184 EXPECT_TRUE(service()->updater()->WillCheckSoon()); |
| 1185 // Make sure that we'll send the NEW version back to sync, even though we | 1185 // Make sure that we'll send the NEW version back to sync, even though we |
| 1186 // haven't actually updated yet. This is to prevent the data in sync from | 1186 // haven't actually updated yet. This is to prevent the data in sync from |
| 1187 // flip-flopping back and forth until all clients are up to date. | 1187 // flip-flopping back and forth until all clients are up to date. |
| 1188 syncer::SyncDataList data = | 1188 syncer::SyncDataList data = |
| 1189 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1189 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1190 ASSERT_EQ(1u, data.size()); | 1190 ASSERT_EQ(1u, data.size()); |
| 1191 scoped_ptr<ExtensionSyncData> extension_data = | 1191 std::unique_ptr<ExtensionSyncData> extension_data = |
| 1192 ExtensionSyncData::CreateFromSyncData(data[0]); | 1192 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1193 ASSERT_TRUE(extension_data); | 1193 ASSERT_TRUE(extension_data); |
| 1194 EXPECT_EQ(new_version, extension_data->version()); | 1194 EXPECT_EQ(new_version, extension_data->version()); |
| 1195 } | 1195 } |
| 1196 | 1196 |
| 1197 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1197 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1198 } | 1198 } |
| 1199 | 1199 |
| 1200 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) { | 1200 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) { |
| 1201 InitializeExtensionServiceWithUpdater(); | 1201 InitializeExtensionServiceWithUpdater(); |
| 1202 extension_sync_service()->MergeDataAndStartSyncing( | 1202 extension_sync_service()->MergeDataAndStartSyncing( |
| 1203 syncer::EXTENSIONS, syncer::SyncDataList(), | 1203 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1204 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1204 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1205 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1205 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1206 | 1206 |
| 1207 sync_pb::EntitySpecifics specifics; | 1207 sync_pb::EntitySpecifics specifics; |
| 1208 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1208 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1209 ext_specifics->set_id(good_crx); | 1209 ext_specifics->set_id(good_crx); |
| 1210 ext_specifics->set_enabled(false); | 1210 ext_specifics->set_enabled(false); |
| 1211 ext_specifics->set_incognito_enabled(true); | 1211 ext_specifics->set_incognito_enabled(true); |
| 1212 ext_specifics->set_update_url("http://www.google.com/"); | 1212 ext_specifics->set_update_url("http://www.google.com/"); |
| 1213 ext_specifics->set_version("1.2.3.4"); | 1213 ext_specifics->set_version("1.2.3.4"); |
| 1214 | 1214 |
| 1215 SyncChangeList list = | 1215 SyncChangeList list = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1228 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); | 1228 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); |
| 1229 EXPECT_TRUE(info->is_from_sync()); | 1229 EXPECT_TRUE(info->is_from_sync()); |
| 1230 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); | 1230 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); |
| 1231 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. | 1231 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
| 1232 } | 1232 } |
| 1233 | 1233 |
| 1234 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) { | 1234 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) { |
| 1235 InitializeEmptyExtensionService(); | 1235 InitializeEmptyExtensionService(); |
| 1236 extension_sync_service()->MergeDataAndStartSyncing( | 1236 extension_sync_service()->MergeDataAndStartSyncing( |
| 1237 syncer::EXTENSIONS, syncer::SyncDataList(), | 1237 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1238 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1238 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1239 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1239 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1240 | 1240 |
| 1241 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 1241 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 1242 | 1242 |
| 1243 struct TestCase { | 1243 struct TestCase { |
| 1244 const char* name; // For failure output only. | 1244 const char* name; // For failure output only. |
| 1245 // Set of disable reasons before any Sync data comes in. If this is != 0, | 1245 // Set of disable reasons before any Sync data comes in. If this is != 0, |
| 1246 // the extension is disabled. | 1246 // the extension is disabled. |
| 1247 int previous_disable_reasons; | 1247 int previous_disable_reasons; |
| 1248 bool sync_enable; // The enabled flag coming in from Sync. | 1248 bool sync_enable; // The enabled flag coming in from Sync. |
| 1249 // The disable reason(s) coming in from Sync, or -1 for "not set". | 1249 // The disable reason(s) coming in from Sync, or -1 for "not set". |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1330 // Remove the extension again, so we can install it again for the next case. | 1330 // Remove the extension again, so we can install it again for the next case. |
| 1331 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED | 1331 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED |
| 1332 : Extension::DISABLED); | 1332 : Extension::DISABLED); |
| 1333 } | 1333 } |
| 1334 } | 1334 } |
| 1335 | 1335 |
| 1336 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) { | 1336 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) { |
| 1337 InitializeEmptyExtensionService(); | 1337 InitializeEmptyExtensionService(); |
| 1338 extension_sync_service()->MergeDataAndStartSyncing( | 1338 extension_sync_service()->MergeDataAndStartSyncing( |
| 1339 syncer::EXTENSIONS, syncer::SyncDataList(), | 1339 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1340 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1340 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1341 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1341 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1342 | 1342 |
| 1343 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); | 1343 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); |
| 1344 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); | 1344 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); |
| 1345 | 1345 |
| 1346 base::FilePath path = base_path.AppendASCII("v1"); | 1346 base::FilePath path = base_path.AppendASCII("v1"); |
| 1347 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); | 1347 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); |
| 1348 // The extension must now be installed and enabled. | 1348 // The extension must now be installed and enabled. |
| 1349 ASSERT_TRUE(extension); | 1349 ASSERT_TRUE(extension); |
| 1350 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id())); | 1350 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id())); |
| 1351 | 1351 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1380 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) { | 1380 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) { |
| 1381 // This is the update URL specified in the test extension. Setting it here is | 1381 // This is the update URL specified in the test extension. Setting it here is |
| 1382 // necessary to make it considered syncable. | 1382 // necessary to make it considered syncable. |
| 1383 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1383 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1384 switches::kAppsGalleryUpdateURL, | 1384 switches::kAppsGalleryUpdateURL, |
| 1385 "http://localhost/autoupdate/updates.xml"); | 1385 "http://localhost/autoupdate/updates.xml"); |
| 1386 | 1386 |
| 1387 InitializeEmptyExtensionService(); | 1387 InitializeEmptyExtensionService(); |
| 1388 extension_sync_service()->MergeDataAndStartSyncing( | 1388 extension_sync_service()->MergeDataAndStartSyncing( |
| 1389 syncer::EXTENSIONS, syncer::SyncDataList(), | 1389 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1390 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1390 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1391 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1391 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1392 | 1392 |
| 1393 const base::FilePath base_path = | 1393 const base::FilePath base_path = |
| 1394 data_dir().AppendASCII("permissions_increase"); | 1394 data_dir().AppendASCII("permissions_increase"); |
| 1395 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); | 1395 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); |
| 1396 const base::FilePath path_v1 = base_path.AppendASCII("v1"); | 1396 const base::FilePath path_v1 = base_path.AppendASCII("v1"); |
| 1397 const base::FilePath path_v2 = base_path.AppendASCII("v2"); | 1397 const base::FilePath path_v2 = base_path.AppendASCII("v2"); |
| 1398 | 1398 |
| 1399 base::ScopedTempDir crx_dir; | 1399 base::ScopedTempDir crx_dir; |
| 1400 ASSERT_TRUE(crx_dir.CreateUniqueTempDir()); | 1400 ASSERT_TRUE(crx_dir.CreateUniqueTempDir()); |
| 1401 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx"); | 1401 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx"); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 // during updating). | 1439 // during updating). |
| 1440 { | 1440 { |
| 1441 const Extension* extension = InstallCRX(crx_path_v1, INSTALL_NEW); | 1441 const Extension* extension = InstallCRX(crx_path_v1, INSTALL_NEW); |
| 1442 // The extension should now be installed and enabled. | 1442 // The extension should now be installed and enabled. |
| 1443 ASSERT_TRUE(extension); | 1443 ASSERT_TRUE(extension); |
| 1444 ASSERT_EQ(v1, extension->VersionString()); | 1444 ASSERT_EQ(v1, extension->VersionString()); |
| 1445 id = extension->id(); | 1445 id = extension->id(); |
| 1446 } | 1446 } |
| 1447 ASSERT_TRUE(registry()->enabled_extensions().Contains(id)); | 1447 ASSERT_TRUE(registry()->enabled_extensions().Contains(id)); |
| 1448 | 1448 |
| 1449 scoped_ptr<const PermissionSet> granted_permissions_v1 = | 1449 std::unique_ptr<const PermissionSet> granted_permissions_v1 = |
| 1450 prefs->GetGrantedPermissions(id); | 1450 prefs->GetGrantedPermissions(id); |
| 1451 | 1451 |
| 1452 // Update to a new version with increased permissions. | 1452 // Update to a new version with increased permissions. |
| 1453 UpdateExtension(id, crx_path_v2, DISABLED); | 1453 UpdateExtension(id, crx_path_v2, DISABLED); |
| 1454 | 1454 |
| 1455 // Now the extension should be disabled due to a permissions increase. | 1455 // Now the extension should be disabled due to a permissions increase. |
| 1456 { | 1456 { |
| 1457 const Extension* extension = | 1457 const Extension* extension = |
| 1458 registry()->disabled_extensions().GetByID(id); | 1458 registry()->disabled_extensions().GetByID(id); |
| 1459 ASSERT_TRUE(extension); | 1459 ASSERT_TRUE(extension); |
| 1460 ASSERT_EQ(v2, extension->VersionString()); | 1460 ASSERT_EQ(v2, extension->VersionString()); |
| 1461 } | 1461 } |
| 1462 ASSERT_TRUE(prefs->HasDisableReason( | 1462 ASSERT_TRUE(prefs->HasDisableReason( |
| 1463 id, Extension::DISABLE_PERMISSIONS_INCREASE)); | 1463 id, Extension::DISABLE_PERMISSIONS_INCREASE)); |
| 1464 | 1464 |
| 1465 // No new permissions should have been granted. | 1465 // No new permissions should have been granted. |
| 1466 scoped_ptr<const PermissionSet> granted_permissions_v2 = | 1466 std::unique_ptr<const PermissionSet> granted_permissions_v2 = |
| 1467 prefs->GetGrantedPermissions(id); | 1467 prefs->GetGrantedPermissions(id); |
| 1468 ASSERT_EQ(*granted_permissions_v1, *granted_permissions_v2); | 1468 ASSERT_EQ(*granted_permissions_v1, *granted_permissions_v2); |
| 1469 | 1469 |
| 1470 // Now a sync update comes in. | 1470 // Now a sync update comes in. |
| 1471 sync_pb::EntitySpecifics specifics; | 1471 sync_pb::EntitySpecifics specifics; |
| 1472 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1472 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1473 ext_specifics->set_id(id); | 1473 ext_specifics->set_id(id); |
| 1474 ext_specifics->set_enabled(true); | 1474 ext_specifics->set_enabled(true); |
| 1475 ext_specifics->set_version(test_case.sync_version); | 1475 ext_specifics->set_version(test_case.sync_version); |
| 1476 if (test_case.sync_disable_reasons != -1) | 1476 if (test_case.sync_disable_reasons != -1) |
| 1477 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); | 1477 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); |
| 1478 | 1478 |
| 1479 SyncChangeList list = | 1479 SyncChangeList list = |
| 1480 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); | 1480 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1481 | 1481 |
| 1482 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1482 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1483 | 1483 |
| 1484 // Check expectations. | 1484 // Check expectations. |
| 1485 const bool expect_enabled = !test_case.expect_disable_reasons; | 1485 const bool expect_enabled = !test_case.expect_disable_reasons; |
| 1486 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); | 1486 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); |
| 1487 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); | 1487 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); |
| 1488 scoped_ptr<const PermissionSet> granted_permissions = | 1488 std::unique_ptr<const PermissionSet> granted_permissions = |
| 1489 prefs->GetGrantedPermissions(id); | 1489 prefs->GetGrantedPermissions(id); |
| 1490 if (test_case.expect_permissions_granted) { | 1490 if (test_case.expect_permissions_granted) { |
| 1491 scoped_ptr<const PermissionSet> active_permissions = | 1491 std::unique_ptr<const PermissionSet> active_permissions = |
| 1492 prefs->GetActivePermissions(id); | 1492 prefs->GetActivePermissions(id); |
| 1493 EXPECT_EQ(*granted_permissions, *active_permissions); | 1493 EXPECT_EQ(*granted_permissions, *active_permissions); |
| 1494 } else { | 1494 } else { |
| 1495 EXPECT_EQ(*granted_permissions, *granted_permissions_v1); | 1495 EXPECT_EQ(*granted_permissions, *granted_permissions_v1); |
| 1496 } | 1496 } |
| 1497 | 1497 |
| 1498 // Remove the extension again, so we can install it again for the next case. | 1498 // Remove the extension again, so we can install it again for the next case. |
| 1499 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED | 1499 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED |
| 1500 : Extension::DISABLED); | 1500 : Extension::DISABLED); |
| 1501 } | 1501 } |
| 1502 } | 1502 } |
| 1503 | 1503 |
| 1504 // Regression test for crbug.com/558299 | 1504 // Regression test for crbug.com/558299 |
| 1505 TEST_F(ExtensionServiceSyncTest, DontSyncThemes) { | 1505 TEST_F(ExtensionServiceSyncTest, DontSyncThemes) { |
| 1506 InitializeEmptyExtensionService(); | 1506 InitializeEmptyExtensionService(); |
| 1507 | 1507 |
| 1508 // The user has enabled sync. | 1508 // The user has enabled sync. |
| 1509 ProfileSyncServiceFactory::GetForProfile(profile())->SetFirstSetupComplete(); | 1509 ProfileSyncServiceFactory::GetForProfile(profile())->SetFirstSetupComplete(); |
| 1510 // Make sure ExtensionSyncService is created, so it'll be notified of changes. | 1510 // Make sure ExtensionSyncService is created, so it'll be notified of changes. |
| 1511 extension_sync_service(); | 1511 extension_sync_service(); |
| 1512 | 1512 |
| 1513 service()->Init(); | 1513 service()->Init(); |
| 1514 ASSERT_TRUE(service()->is_ready()); | 1514 ASSERT_TRUE(service()->is_ready()); |
| 1515 | 1515 |
| 1516 syncer::FakeSyncChangeProcessor* processor = | 1516 syncer::FakeSyncChangeProcessor* processor = |
| 1517 new syncer::FakeSyncChangeProcessor; | 1517 new syncer::FakeSyncChangeProcessor; |
| 1518 extension_sync_service()->MergeDataAndStartSyncing( | 1518 extension_sync_service()->MergeDataAndStartSyncing( |
| 1519 syncer::EXTENSIONS, | 1519 syncer::EXTENSIONS, syncer::SyncDataList(), base::WrapUnique(processor), |
| 1520 syncer::SyncDataList(), | 1520 base::WrapUnique(new syncer::SyncErrorFactoryMock)); |
| 1521 make_scoped_ptr(processor), | |
| 1522 make_scoped_ptr(new syncer::SyncErrorFactoryMock)); | |
| 1523 | 1521 |
| 1524 processor->changes().clear(); | 1522 processor->changes().clear(); |
| 1525 | 1523 |
| 1526 // Sanity check: Installing an extension should result in a sync change. | 1524 // Sanity check: Installing an extension should result in a sync change. |
| 1527 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 1525 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 1528 EXPECT_EQ(1u, processor->changes().size()); | 1526 EXPECT_EQ(1u, processor->changes().size()); |
| 1529 | 1527 |
| 1530 processor->changes().clear(); | 1528 processor->changes().clear(); |
| 1531 | 1529 |
| 1532 // Installing a theme should not result in a sync change (themes are handled | 1530 // Installing a theme should not result in a sync change (themes are handled |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1714 EXPECT_NE(extension->VersionString(), old_version); | 1712 EXPECT_NE(extension->VersionString(), old_version); |
| 1715 } | 1713 } |
| 1716 | 1714 |
| 1717 TEST_F(ExtensionServiceTestSupervised, UpdateWithPermissionIncreaseNoApproval) { | 1715 TEST_F(ExtensionServiceTestSupervised, UpdateWithPermissionIncreaseNoApproval) { |
| 1718 InitNeedCustodianApprovalFieldTrial(false); | 1716 InitNeedCustodianApprovalFieldTrial(false); |
| 1719 | 1717 |
| 1720 InitServices(true /* profile_is_supervised */); | 1718 InitServices(true /* profile_is_supervised */); |
| 1721 | 1719 |
| 1722 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; | 1720 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; |
| 1723 supervised_user_service()->AddPermissionRequestCreator( | 1721 supervised_user_service()->AddPermissionRequestCreator( |
| 1724 make_scoped_ptr(creator)); | 1722 base::WrapUnique(creator)); |
| 1725 | 1723 |
| 1726 std::string id = InstallPermissionsTestExtension(); | 1724 std::string id = InstallPermissionsTestExtension(); |
| 1727 | 1725 |
| 1728 // Update to a new version with increased permissions. | 1726 // Update to a new version with increased permissions. |
| 1729 // Since we don't require the custodian's approval, no permission request | 1727 // Since we don't require the custodian's approval, no permission request |
| 1730 // should be created. | 1728 // should be created. |
| 1731 const std::string version2("2"); | 1729 const std::string version2("2"); |
| 1732 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1730 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1733 UpdateRequestId(id, version2), testing::_)) | 1731 UpdateRequestId(id, version2), testing::_)) |
| 1734 .Times(0); | 1732 .Times(0); |
| 1735 UpdatePermissionsTestExtension(id, version2, DISABLED); | 1733 UpdatePermissionsTestExtension(id, version2, DISABLED); |
| 1736 } | 1734 } |
| 1737 | 1735 |
| 1738 TEST_F(ExtensionServiceTestSupervised, | 1736 TEST_F(ExtensionServiceTestSupervised, |
| 1739 UpdateWithPermissionIncreaseApprovalOldVersion) { | 1737 UpdateWithPermissionIncreaseApprovalOldVersion) { |
| 1740 InitNeedCustodianApprovalFieldTrial(true); | 1738 InitNeedCustodianApprovalFieldTrial(true); |
| 1741 | 1739 |
| 1742 InitServices(true /* profile_is_supervised */); | 1740 InitServices(true /* profile_is_supervised */); |
| 1743 | 1741 |
| 1744 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; | 1742 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; |
| 1745 supervised_user_service()->AddPermissionRequestCreator( | 1743 supervised_user_service()->AddPermissionRequestCreator( |
| 1746 make_scoped_ptr(creator)); | 1744 base::WrapUnique(creator)); |
| 1747 | 1745 |
| 1748 const std::string version1("1"); | 1746 const std::string version1("1"); |
| 1749 const std::string version2("2"); | 1747 const std::string version2("2"); |
| 1750 | 1748 |
| 1751 std::string id = InstallPermissionsTestExtension(); | 1749 std::string id = InstallPermissionsTestExtension(); |
| 1752 | 1750 |
| 1753 // Update to a new version with increased permissions. | 1751 // Update to a new version with increased permissions. |
| 1754 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1752 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1755 UpdateRequestId(id, version2), testing::_)); | 1753 UpdateRequestId(id, version2), testing::_)); |
| 1756 UpdatePermissionsTestExtension(id, version2, DISABLED); | 1754 UpdatePermissionsTestExtension(id, version2, DISABLED); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1784 } | 1782 } |
| 1785 | 1783 |
| 1786 TEST_F(ExtensionServiceTestSupervised, | 1784 TEST_F(ExtensionServiceTestSupervised, |
| 1787 UpdateWithPermissionIncreaseApprovalMatchingVersion) { | 1785 UpdateWithPermissionIncreaseApprovalMatchingVersion) { |
| 1788 InitNeedCustodianApprovalFieldTrial(true); | 1786 InitNeedCustodianApprovalFieldTrial(true); |
| 1789 | 1787 |
| 1790 InitServices(true /* profile_is_supervised */); | 1788 InitServices(true /* profile_is_supervised */); |
| 1791 | 1789 |
| 1792 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; | 1790 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; |
| 1793 supervised_user_service()->AddPermissionRequestCreator( | 1791 supervised_user_service()->AddPermissionRequestCreator( |
| 1794 make_scoped_ptr(creator)); | 1792 base::WrapUnique(creator)); |
| 1795 | 1793 |
| 1796 std::string id = InstallPermissionsTestExtension(); | 1794 std::string id = InstallPermissionsTestExtension(); |
| 1797 | 1795 |
| 1798 // Update to a new version with increased permissions. | 1796 // Update to a new version with increased permissions. |
| 1799 const std::string version2("2"); | 1797 const std::string version2("2"); |
| 1800 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1798 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1801 UpdateRequestId(id, version2), testing::_)); | 1799 UpdateRequestId(id, version2), testing::_)); |
| 1802 UpdatePermissionsTestExtension(id, version2, DISABLED); | 1800 UpdatePermissionsTestExtension(id, version2, DISABLED); |
| 1803 | 1801 |
| 1804 // Simulate a custodian approval for re-enabling the extension coming in | 1802 // Simulate a custodian approval for re-enabling the extension coming in |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1820 } | 1818 } |
| 1821 | 1819 |
| 1822 TEST_F(ExtensionServiceTestSupervised, | 1820 TEST_F(ExtensionServiceTestSupervised, |
| 1823 UpdateWithPermissionIncreaseApprovalNewVersion) { | 1821 UpdateWithPermissionIncreaseApprovalNewVersion) { |
| 1824 InitNeedCustodianApprovalFieldTrial(true); | 1822 InitNeedCustodianApprovalFieldTrial(true); |
| 1825 | 1823 |
| 1826 InitServices(true /* profile_is_supervised */); | 1824 InitServices(true /* profile_is_supervised */); |
| 1827 | 1825 |
| 1828 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; | 1826 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; |
| 1829 supervised_user_service()->AddPermissionRequestCreator( | 1827 supervised_user_service()->AddPermissionRequestCreator( |
| 1830 make_scoped_ptr(creator)); | 1828 base::WrapUnique(creator)); |
| 1831 | 1829 |
| 1832 std::string id = InstallPermissionsTestExtension(); | 1830 std::string id = InstallPermissionsTestExtension(); |
| 1833 | 1831 |
| 1834 // Update to a new version with increased permissions. | 1832 // Update to a new version with increased permissions. |
| 1835 const std::string version2("2"); | 1833 const std::string version2("2"); |
| 1836 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1834 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1837 UpdateRequestId(id, version2), testing::_)); | 1835 UpdateRequestId(id, version2), testing::_)); |
| 1838 UpdatePermissionsTestExtension(id, version2, DISABLED); | 1836 UpdatePermissionsTestExtension(id, version2, DISABLED); |
| 1839 | 1837 |
| 1840 // Simulate a custodian approval for re-enabling the extension coming in | 1838 // Simulate a custodian approval for re-enabling the extension coming in |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1864 id, base::Version(version3))); | 1862 id, base::Version(version3))); |
| 1865 | 1863 |
| 1866 // Update to the matching version. Now the extension should get enabled. | 1864 // Update to the matching version. Now the extension should get enabled. |
| 1867 UpdatePermissionsTestExtension(id, version3, ENABLED); | 1865 UpdatePermissionsTestExtension(id, version3, ENABLED); |
| 1868 } | 1866 } |
| 1869 | 1867 |
| 1870 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) { | 1868 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) { |
| 1871 InitializeEmptyExtensionService(); | 1869 InitializeEmptyExtensionService(); |
| 1872 extension_sync_service()->MergeDataAndStartSyncing( | 1870 extension_sync_service()->MergeDataAndStartSyncing( |
| 1873 syncer::EXTENSIONS, syncer::SyncDataList(), | 1871 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1874 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), | 1872 base::WrapUnique(new syncer::FakeSyncChangeProcessor()), |
| 1875 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1873 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1876 | 1874 |
| 1877 // Install two extensions. | 1875 // Install two extensions. |
| 1878 base::FilePath path1 = data_dir().AppendASCII("good.crx"); | 1876 base::FilePath path1 = data_dir().AppendASCII("good.crx"); |
| 1879 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); | 1877 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); |
| 1880 const Extension* extensions[] = { | 1878 const Extension* extensions[] = { |
| 1881 InstallCRX(path1, INSTALL_NEW), | 1879 InstallCRX(path1, INSTALL_NEW), |
| 1882 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) | 1880 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) |
| 1883 }; | 1881 }; |
| 1884 | 1882 |
| 1885 // Add a policy provider that will disallow any changes. | 1883 // Add a policy provider that will disallow any changes. |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1984 INSTALL_NEW); | 1982 INSTALL_NEW); |
| 1985 EXPECT_TRUE(v1->is_app()); | 1983 EXPECT_TRUE(v1->is_app()); |
| 1986 EXPECT_FALSE(v1->is_extension()); | 1984 EXPECT_FALSE(v1->is_extension()); |
| 1987 std::string id = v1->id(); | 1985 std::string id = v1->id(); |
| 1988 | 1986 |
| 1989 StatefulChangeProcessor extensions_processor(syncer::ModelType::EXTENSIONS); | 1987 StatefulChangeProcessor extensions_processor(syncer::ModelType::EXTENSIONS); |
| 1990 StatefulChangeProcessor apps_processor(syncer::ModelType::APPS); | 1988 StatefulChangeProcessor apps_processor(syncer::ModelType::APPS); |
| 1991 extension_sync_service()->MergeDataAndStartSyncing( | 1989 extension_sync_service()->MergeDataAndStartSyncing( |
| 1992 syncer::EXTENSIONS, syncer::SyncDataList(), | 1990 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1993 extensions_processor.GetWrapped(), | 1991 extensions_processor.GetWrapped(), |
| 1994 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1992 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1995 extension_sync_service()->MergeDataAndStartSyncing( | 1993 extension_sync_service()->MergeDataAndStartSyncing( |
| 1996 syncer::APPS, syncer::SyncDataList(), apps_processor.GetWrapped(), | 1994 syncer::APPS, syncer::SyncDataList(), apps_processor.GetWrapped(), |
| 1997 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 1995 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 1998 | 1996 |
| 1999 // Check the app/extension change processors to be sure the right data was | 1997 // Check the app/extension change processors to be sure the right data was |
| 2000 // added. | 1998 // added. |
| 2001 EXPECT_TRUE(extensions_processor.changes().empty()); | 1999 EXPECT_TRUE(extensions_processor.changes().empty()); |
| 2002 EXPECT_TRUE(extensions_processor.data().empty()); | 2000 EXPECT_TRUE(extensions_processor.data().empty()); |
| 2003 EXPECT_EQ(1u, apps_processor.data().size()); | 2001 EXPECT_EQ(1u, apps_processor.data().size()); |
| 2004 ASSERT_EQ(1u, apps_processor.changes().size()); | 2002 ASSERT_EQ(1u, apps_processor.changes().size()); |
| 2005 const SyncChange& app_change = apps_processor.changes()[0]; | 2003 const SyncChange& app_change = apps_processor.changes()[0]; |
| 2006 EXPECT_EQ(SyncChange::ACTION_ADD, app_change.change_type()); | 2004 EXPECT_EQ(SyncChange::ACTION_ADD, app_change.change_type()); |
| 2007 scoped_ptr<ExtensionSyncData> app_data = | 2005 std::unique_ptr<ExtensionSyncData> app_data = |
| 2008 ExtensionSyncData::CreateFromSyncData(app_change.sync_data()); | 2006 ExtensionSyncData::CreateFromSyncData(app_change.sync_data()); |
| 2009 EXPECT_TRUE(app_data->is_app()); | 2007 EXPECT_TRUE(app_data->is_app()); |
| 2010 EXPECT_EQ(id, app_data->id()); | 2008 EXPECT_EQ(id, app_data->id()); |
| 2011 EXPECT_EQ(*v1->version(), app_data->version()); | 2009 EXPECT_EQ(*v1->version(), app_data->version()); |
| 2012 | 2010 |
| 2013 // Update the app to v2, which is an extension. | 2011 // Update the app to v2, which is an extension. |
| 2014 const Extension* v2 = | 2012 const Extension* v2 = |
| 2015 InstallCRX(data_dir().AppendASCII("sync_datatypes").AppendASCII("v2.crx"), | 2013 InstallCRX(data_dir().AppendASCII("sync_datatypes").AppendASCII("v2.crx"), |
| 2016 INSTALL_UPDATED); | 2014 INSTALL_UPDATED); |
| 2017 EXPECT_FALSE(v2->is_app()); | 2015 EXPECT_FALSE(v2->is_app()); |
| 2018 EXPECT_TRUE(v2->is_extension()); | 2016 EXPECT_TRUE(v2->is_extension()); |
| 2019 EXPECT_EQ(id, v2->id()); | 2017 EXPECT_EQ(id, v2->id()); |
| 2020 | 2018 |
| 2021 // Make sure we saw an extension item added. | 2019 // Make sure we saw an extension item added. |
| 2022 ASSERT_EQ(1u, extensions_processor.changes().size()); | 2020 ASSERT_EQ(1u, extensions_processor.changes().size()); |
| 2023 const SyncChange& extension_change = extensions_processor.changes()[0]; | 2021 const SyncChange& extension_change = extensions_processor.changes()[0]; |
| 2024 EXPECT_EQ(SyncChange::ACTION_ADD, extension_change.change_type()); | 2022 EXPECT_EQ(SyncChange::ACTION_ADD, extension_change.change_type()); |
| 2025 scoped_ptr<ExtensionSyncData> extension_data = | 2023 std::unique_ptr<ExtensionSyncData> extension_data = |
| 2026 ExtensionSyncData::CreateFromSyncData(extension_change.sync_data()); | 2024 ExtensionSyncData::CreateFromSyncData(extension_change.sync_data()); |
| 2027 EXPECT_FALSE(extension_data->is_app()); | 2025 EXPECT_FALSE(extension_data->is_app()); |
| 2028 EXPECT_EQ(id, extension_data->id()); | 2026 EXPECT_EQ(id, extension_data->id()); |
| 2029 EXPECT_EQ(*v2->version(), extension_data->version()); | 2027 EXPECT_EQ(*v2->version(), extension_data->version()); |
| 2030 | 2028 |
| 2031 // Get the current data from the change processors to use as the input to | 2029 // Get the current data from the change processors to use as the input to |
| 2032 // the following call to MergeDataAndStartSyncing. This simulates what should | 2030 // the following call to MergeDataAndStartSyncing. This simulates what should |
| 2033 // happen with sync. | 2031 // happen with sync. |
| 2034 syncer::SyncDataList extensions_data = | 2032 syncer::SyncDataList extensions_data = |
| 2035 extensions_processor.GetAllSyncData(syncer::EXTENSIONS); | 2033 extensions_processor.GetAllSyncData(syncer::EXTENSIONS); |
| 2036 syncer::SyncDataList apps_data = apps_processor.GetAllSyncData(syncer::APPS); | 2034 syncer::SyncDataList apps_data = apps_processor.GetAllSyncData(syncer::APPS); |
| 2037 | 2035 |
| 2038 // Stop syncing, then start again. | 2036 // Stop syncing, then start again. |
| 2039 extension_sync_service()->StopSyncing(syncer::EXTENSIONS); | 2037 extension_sync_service()->StopSyncing(syncer::EXTENSIONS); |
| 2040 extension_sync_service()->StopSyncing(syncer::APPS); | 2038 extension_sync_service()->StopSyncing(syncer::APPS); |
| 2041 extension_sync_service()->MergeDataAndStartSyncing( | 2039 extension_sync_service()->MergeDataAndStartSyncing( |
| 2042 syncer::EXTENSIONS, extensions_data, extensions_processor.GetWrapped(), | 2040 syncer::EXTENSIONS, extensions_data, extensions_processor.GetWrapped(), |
| 2043 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 2041 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 2044 extension_sync_service()->MergeDataAndStartSyncing( | 2042 extension_sync_service()->MergeDataAndStartSyncing( |
| 2045 syncer::APPS, apps_data, apps_processor.GetWrapped(), | 2043 syncer::APPS, apps_data, apps_processor.GetWrapped(), |
| 2046 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); | 2044 base::WrapUnique(new syncer::SyncErrorFactoryMock())); |
| 2047 | 2045 |
| 2048 // Make sure we saw an app item deleted. | 2046 // Make sure we saw an app item deleted. |
| 2049 bool found_delete = false; | 2047 bool found_delete = false; |
| 2050 for (const auto& change : apps_processor.changes()) { | 2048 for (const auto& change : apps_processor.changes()) { |
| 2051 if (change.change_type() == SyncChange::ACTION_DELETE) { | 2049 if (change.change_type() == SyncChange::ACTION_DELETE) { |
| 2052 scoped_ptr<ExtensionSyncData> data = | 2050 std::unique_ptr<ExtensionSyncData> data = |
| 2053 ExtensionSyncData::CreateFromSyncChange(change); | 2051 ExtensionSyncData::CreateFromSyncChange(change); |
| 2054 if (data->id() == id) { | 2052 if (data->id() == id) { |
| 2055 found_delete = true; | 2053 found_delete = true; |
| 2056 break; | 2054 break; |
| 2057 } | 2055 } |
| 2058 } | 2056 } |
| 2059 } | 2057 } |
| 2060 EXPECT_TRUE(found_delete); | 2058 EXPECT_TRUE(found_delete); |
| 2061 | 2059 |
| 2062 // Make sure there is one extension, and there are no more apps. | 2060 // Make sure there is one extension, and there are no more apps. |
| 2063 EXPECT_EQ(1u, extensions_processor.data().size()); | 2061 EXPECT_EQ(1u, extensions_processor.data().size()); |
| 2064 EXPECT_TRUE(apps_processor.data().empty()); | 2062 EXPECT_TRUE(apps_processor.data().empty()); |
| 2065 } | 2063 } |
| OLD | NEW |