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

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

Issue 1871713002: Convert //chrome/browser/extensions from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698