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

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

Issue 1486603002: ExtensionServiceSyncTest cleanup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext_dont_selfnotify
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" 48 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
49 #endif 49 #endif
50 50
51 using extensions::AppSorting; 51 using extensions::AppSorting;
52 using extensions::Extension; 52 using extensions::Extension;
53 using extensions::ExtensionPrefs; 53 using extensions::ExtensionPrefs;
54 using extensions::ExtensionSyncData; 54 using extensions::ExtensionSyncData;
55 using extensions::ExtensionSystem; 55 using extensions::ExtensionSystem;
56 using extensions::Manifest; 56 using extensions::Manifest;
57 using extensions::PermissionSet; 57 using extensions::PermissionSet;
58 using syncer::SyncChange;
59 using syncer::SyncChangeList;
60
61 namespace {
58 62
59 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj"; 63 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj";
60 const char good2[] = "bjafgdebaacbbbecmhlhpofkepfkgcpa"; 64 const char good2[] = "bjafgdebaacbbbecmhlhpofkepfkgcpa";
61 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; 65 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
62 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln"; 66 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln";
63 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; 67 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf";
64 68
69 SyncChangeList MakeSyncChangeList(const std::string& id,
Devlin 2015/12/02 17:24:50 Doesn't bother me much, but isn't the id in the sp
Marc Treib 2015/12/03 09:29:41 Hm. Yes, but it's in the ExtensionSpecifics, so we
70 const sync_pb::EntitySpecifics& specifics,
71 SyncChange::SyncChangeType change_type) {
72 syncer::SyncData sync_data =
73 syncer::SyncData::CreateLocalData(id, "Name", specifics);
74 SyncChange sync_change(FROM_HERE, change_type, sync_data);
75 return SyncChangeList(1, sync_change);
Devlin 2015/12/02 17:24:50 nit: could even inline sync_change here.
Marc Treib 2015/12/03 09:29:41 Done.
76 }
77
78 } // namespace
79
65 class ExtensionServiceSyncTest 80 class ExtensionServiceSyncTest
66 : public extensions::ExtensionServiceTestWithInstall { 81 : public extensions::ExtensionServiceTestWithInstall {
67 public: 82 public:
68 void MockSyncStartFlare(bool* was_called, 83 void MockSyncStartFlare(bool* was_called,
69 syncer::ModelType* model_type_passed_in, 84 syncer::ModelType* model_type_passed_in,
70 syncer::ModelType model_type) { 85 syncer::ModelType model_type) {
71 *was_called = true; 86 *was_called = true;
72 *model_type_passed_in = model_type; 87 *model_type_passed_in = model_type;
73 } 88 }
74 89
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 169
155 EXPECT_TRUE(flare_was_called); 170 EXPECT_TRUE(flare_was_called);
156 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); 171 EXPECT_EQ(syncer::EXTENSIONS, triggered_type);
157 172
158 // Reset. 173 // Reset.
159 flare_was_called = false; 174 flare_was_called = false;
160 triggered_type = syncer::UNSPECIFIED; 175 triggered_type = syncer::UNSPECIFIED;
161 176
162 // Once sync starts, flare should no longer be invoked. 177 // Once sync starts, flare should no longer be invoked.
163 extension_sync_service()->MergeDataAndStartSyncing( 178 extension_sync_service()->MergeDataAndStartSyncing(
164 syncer::EXTENSIONS, 179 syncer::EXTENSIONS, syncer::SyncDataList(),
165 syncer::SyncDataList(), 180 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
Devlin 2015/12/02 17:24:50 nitty nit: even though it doesn't matter, prefer e
Marc Treib 2015/12/03 09:29:41 Done. (Is there anything in the style guide about
Devlin 2015/12/03 16:55:27 Probably not, except as it pertains to POD structs
166 scoped_ptr<syncer::SyncChangeProcessor>( 181 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
167 new syncer::FakeSyncChangeProcessor),
168 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
169 path = data_dir().AppendASCII("page_action.crx"); 182 path = data_dir().AppendASCII("page_action.crx");
170 InstallCRX(path, INSTALL_NEW); 183 InstallCRX(path, INSTALL_NEW);
171 EXPECT_FALSE(flare_was_called); 184 EXPECT_FALSE(flare_was_called);
172 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); 185 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type);
173 } 186 }
174 187
175 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) { 188 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) {
176 // Start the extensions service with one external extension already installed. 189 // Start the extensions service with one external extension already installed.
177 base::FilePath source_install_dir = 190 base::FilePath source_install_dir =
178 data_dir().AppendASCII("good").AppendASCII("Extensions"); 191 data_dir().AppendASCII("good").AppendASCII("Extensions");
(...skipping 12 matching lines...) Expand all
191 204
192 ASSERT_EQ(3u, loaded_.size()); 205 ASSERT_EQ(3u, loaded_.size());
193 206
194 // We start enabled. 207 // We start enabled.
195 const Extension* extension = service()->GetExtensionById(good0, true); 208 const Extension* extension = service()->GetExtensionById(good0, true);
196 ASSERT_TRUE(extension); 209 ASSERT_TRUE(extension);
197 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); 210 ASSERT_TRUE(service()->IsExtensionEnabled(good0));
198 211
199 // Sync starts up. 212 // Sync starts up.
200 extension_sync_service()->MergeDataAndStartSyncing( 213 extension_sync_service()->MergeDataAndStartSyncing(
201 syncer::EXTENSIONS, 214 syncer::EXTENSIONS, syncer::SyncDataList(),
202 syncer::SyncDataList(),
203 make_scoped_ptr(new syncer::FakeSyncChangeProcessor), 215 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
204 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 216 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
205 217
206 // Then sync data arrives telling us to disable |good0|. 218 // Then sync data arrives telling us to disable |good0|.
207 ExtensionSyncData disable_good_crx(*extension, false, 219 ExtensionSyncData disable_good_crx(*extension, false,
208 Extension::DISABLE_USER_ACTION, false, 220 Extension::DISABLE_USER_ACTION, false,
209 false, ExtensionSyncData::BOOLEAN_UNSET); 221 false, ExtensionSyncData::BOOLEAN_UNSET);
210 syncer::SyncChange sync_change(FROM_HERE, 222 SyncChangeList list(
211 syncer::SyncChange::ACTION_UPDATE, 223 1, disable_good_crx.GetSyncChange(SyncChange::ACTION_UPDATE));
212 disable_good_crx.GetSyncData());
213 syncer::SyncChangeList list(1, sync_change);
214 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 224 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
215 225
216 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); 226 ASSERT_FALSE(service()->IsExtensionEnabled(good0));
217 } 227 }
218 228
219 TEST_F(ExtensionServiceSyncTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) { 229 TEST_F(ExtensionServiceSyncTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) {
220 // Start the extension service with three extensions already installed. 230 // Start the extension service with three extensions already installed.
221 base::FilePath source_install_dir = 231 base::FilePath source_install_dir =
222 data_dir().AppendASCII("good").AppendASCII("Extensions"); 232 data_dir().AppendASCII("good").AppendASCII("Extensions");
223 base::FilePath pref_path = 233 base::FilePath pref_path =
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // Simulate various incoming sync changes, and make sure they don't result in 318 // Simulate various incoming sync changes, and make sure they don't result in
309 // any outgoing changes. 319 // any outgoing changes.
310 320
311 { 321 {
312 const Extension* extension = service()->GetExtensionById(good0, true); 322 const Extension* extension = service()->GetExtensionById(good0, true);
313 ASSERT_TRUE(extension); 323 ASSERT_TRUE(extension);
314 324
315 // Disable the extension. 325 // Disable the extension.
316 ExtensionSyncData data(*extension, false, Extension::DISABLE_USER_ACTION, 326 ExtensionSyncData data(*extension, false, Extension::DISABLE_USER_ACTION,
317 false, false, ExtensionSyncData::BOOLEAN_UNSET); 327 false, false, ExtensionSyncData::BOOLEAN_UNSET);
318 syncer::SyncChangeList list( 328 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE));
319 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE));
320 329
321 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 330 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
322 331
323 EXPECT_TRUE(processor->changes().empty()); 332 EXPECT_TRUE(processor->changes().empty());
324 } 333 }
325 334
326 { 335 {
327 const Extension* extension = service()->GetExtensionById(good0, true); 336 const Extension* extension = service()->GetExtensionById(good0, true);
328 ASSERT_TRUE(extension); 337 ASSERT_TRUE(extension);
329 338
330 // Set incognito enabled to true. 339 // Set incognito enabled to true.
331 ExtensionSyncData data(*extension, false, Extension::DISABLE_NONE, true, 340 ExtensionSyncData data(*extension, false, Extension::DISABLE_NONE, true,
332 false, ExtensionSyncData::BOOLEAN_UNSET); 341 false, ExtensionSyncData::BOOLEAN_UNSET);
333 syncer::SyncChangeList list( 342 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE));
334 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE));
335 343
336 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 344 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
337 345
338 EXPECT_TRUE(processor->changes().empty()); 346 EXPECT_TRUE(processor->changes().empty());
339 } 347 }
340 348
341 { 349 {
342 const Extension* extension = service()->GetExtensionById(good0, true); 350 const Extension* extension = service()->GetExtensionById(good0, true);
343 ASSERT_TRUE(extension); 351 ASSERT_TRUE(extension);
344 352
345 // Add another disable reason. 353 // Add another disable reason.
346 ExtensionSyncData data(*extension, false, 354 ExtensionSyncData data(*extension, false,
347 Extension::DISABLE_USER_ACTION | 355 Extension::DISABLE_USER_ACTION |
348 Extension::DISABLE_PERMISSIONS_INCREASE, 356 Extension::DISABLE_PERMISSIONS_INCREASE,
349 false, false, ExtensionSyncData::BOOLEAN_UNSET); 357 false, false, ExtensionSyncData::BOOLEAN_UNSET);
350 syncer::SyncChangeList list( 358 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE));
351 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE));
352 359
353 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 360 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
354 361
355 EXPECT_TRUE(processor->changes().empty()); 362 EXPECT_TRUE(processor->changes().empty());
356 } 363 }
357 364
358 { 365 {
359 const Extension* extension = service()->GetExtensionById(good0, true); 366 const Extension* extension = service()->GetExtensionById(good0, true);
360 ASSERT_TRUE(extension); 367 ASSERT_TRUE(extension);
361 368
362 // Uninstall the extension. 369 // Uninstall the extension.
363 ExtensionSyncData data(*extension, false, 370 ExtensionSyncData data(*extension, false,
364 Extension::DISABLE_USER_ACTION | 371 Extension::DISABLE_USER_ACTION |
365 Extension::DISABLE_PERMISSIONS_INCREASE, 372 Extension::DISABLE_PERMISSIONS_INCREASE,
366 false, false, ExtensionSyncData::BOOLEAN_UNSET); 373 false, false, ExtensionSyncData::BOOLEAN_UNSET);
367 syncer::SyncChangeList list( 374 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_DELETE));
368 1, data.GetSyncChange(syncer::SyncChange::ACTION_DELETE));
369 375
370 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 376 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
371 377
372 EXPECT_TRUE(processor->changes().empty()); 378 EXPECT_TRUE(processor->changes().empty());
373 } 379 }
374 } 380 }
375 381
376 TEST_F(ExtensionServiceSyncTest, GetSyncData) { 382 TEST_F(ExtensionServiceSyncTest, GetSyncData) {
377 InitializeEmptyExtensionService(); 383 InitializeEmptyExtensionService();
378 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 384 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
379 const Extension* extension = service()->GetInstalledExtension(good_crx); 385 const Extension* extension = service()->GetInstalledExtension(good_crx);
380 ASSERT_TRUE(extension); 386 ASSERT_TRUE(extension);
381 387
382 extension_sync_service()->MergeDataAndStartSyncing( 388 extension_sync_service()->MergeDataAndStartSyncing(
383 syncer::EXTENSIONS, 389 syncer::EXTENSIONS, syncer::SyncDataList(),
384 syncer::SyncDataList(), 390 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
385 scoped_ptr<syncer::SyncChangeProcessor>( 391 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
386 new syncer::FakeSyncChangeProcessor),
387 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
388 392
389 syncer::SyncDataList list = 393 syncer::SyncDataList list =
390 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 394 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
391 ASSERT_EQ(list.size(), 1U); 395 ASSERT_EQ(list.size(), 1U);
392 scoped_ptr<ExtensionSyncData> data = 396 scoped_ptr<ExtensionSyncData> data =
393 ExtensionSyncData::CreateFromSyncData(list[0]); 397 ExtensionSyncData::CreateFromSyncData(list[0]);
394 ASSERT_TRUE(data.get()); 398 ASSERT_TRUE(data.get());
395 EXPECT_EQ(extension->id(), data->id()); 399 EXPECT_EQ(extension->id(), data->id());
396 EXPECT_FALSE(data->uninstalled()); 400 EXPECT_FALSE(data->uninstalled());
397 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); 401 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled());
398 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), 402 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()),
399 data->incognito_enabled()); 403 data->incognito_enabled());
400 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); 404 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled());
401 EXPECT_TRUE(data->version().Equals(*extension->version())); 405 EXPECT_TRUE(data->version().Equals(*extension->version()));
402 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), 406 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension),
403 data->update_url()); 407 data->update_url());
404 EXPECT_EQ(extension->name(), data->name()); 408 EXPECT_EQ(extension->name(), data->name());
405 } 409 }
406 410
407 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) { 411 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) {
408 InitializeEmptyExtensionService(); 412 InitializeEmptyExtensionService();
409 const Extension* extension = 413 const Extension* extension =
410 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 414 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
411 ASSERT_TRUE(extension); 415 ASSERT_TRUE(extension);
412 416
413 syncer::FakeSyncChangeProcessor processor;
414 extension_sync_service()->MergeDataAndStartSyncing( 417 extension_sync_service()->MergeDataAndStartSyncing(
415 syncer::EXTENSIONS, 418 syncer::EXTENSIONS, syncer::SyncDataList(),
416 syncer::SyncDataList(), 419 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
417 scoped_ptr<syncer::SyncChangeProcessor>( 420 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
418 new syncer::FakeSyncChangeProcessor),
419 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
420 421
421 { 422 {
422 syncer::SyncDataList list = 423 syncer::SyncDataList list =
423 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 424 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
424 ASSERT_EQ(list.size(), 1U); 425 ASSERT_EQ(list.size(), 1U);
425 scoped_ptr<ExtensionSyncData> data = 426 scoped_ptr<ExtensionSyncData> data =
426 ExtensionSyncData::CreateFromSyncData(list[0]); 427 ExtensionSyncData::CreateFromSyncData(list[0]);
427 ASSERT_TRUE(data.get()); 428 ASSERT_TRUE(data.get());
428 EXPECT_TRUE(data->enabled()); 429 EXPECT_TRUE(data->enabled());
429 EXPECT_TRUE(data->supports_disable_reasons()); 430 EXPECT_TRUE(data->supports_disable_reasons());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 service()->EnableExtension(good_crx); 479 service()->EnableExtension(good_crx);
479 } 480 }
480 481
481 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) { 482 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) {
482 InitializeEmptyExtensionService(); 483 InitializeEmptyExtensionService();
483 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 484 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
484 TerminateExtension(good_crx); 485 TerminateExtension(good_crx);
485 const Extension* extension = service()->GetInstalledExtension(good_crx); 486 const Extension* extension = service()->GetInstalledExtension(good_crx);
486 ASSERT_TRUE(extension); 487 ASSERT_TRUE(extension);
487 488
488 syncer::FakeSyncChangeProcessor processor;
489 extension_sync_service()->MergeDataAndStartSyncing( 489 extension_sync_service()->MergeDataAndStartSyncing(
490 syncer::EXTENSIONS, 490 syncer::EXTENSIONS, syncer::SyncDataList(),
491 syncer::SyncDataList(), 491 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
492 scoped_ptr<syncer::SyncChangeProcessor>( 492 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
493 new syncer::FakeSyncChangeProcessor),
494 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
495 493
496 syncer::SyncDataList list = 494 syncer::SyncDataList list =
497 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 495 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
498 ASSERT_EQ(list.size(), 1U); 496 ASSERT_EQ(list.size(), 1U);
499 scoped_ptr<ExtensionSyncData> data = 497 scoped_ptr<ExtensionSyncData> data =
500 ExtensionSyncData::CreateFromSyncData(list[0]); 498 ExtensionSyncData::CreateFromSyncData(list[0]);
501 ASSERT_TRUE(data.get()); 499 ASSERT_TRUE(data.get());
502 EXPECT_EQ(extension->id(), data->id()); 500 EXPECT_EQ(extension->id(), data->id());
503 EXPECT_FALSE(data->uninstalled()); 501 EXPECT_FALSE(data->uninstalled());
504 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); 502 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled());
505 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), 503 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()),
506 data->incognito_enabled()); 504 data->incognito_enabled());
507 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); 505 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled());
508 EXPECT_TRUE(data->version().Equals(*extension->version())); 506 EXPECT_TRUE(data->version().Equals(*extension->version()));
509 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), 507 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension),
510 data->update_url()); 508 data->update_url());
511 EXPECT_EQ(extension->name(), data->name()); 509 EXPECT_EQ(extension->name(), data->name());
512 } 510 }
513 511
514 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) { 512 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) {
515 InitializeEmptyExtensionService(); 513 InitializeEmptyExtensionService();
516 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 514 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
517 const Extension* extension = service()->GetInstalledExtension(good_crx); 515 const Extension* extension = service()->GetInstalledExtension(good_crx);
518 ASSERT_TRUE(extension); 516 ASSERT_TRUE(extension);
519 517
520 syncer::FakeSyncChangeProcessor processor;
521 extension_sync_service()->MergeDataAndStartSyncing( 518 extension_sync_service()->MergeDataAndStartSyncing(
522 syncer::APPS, 519 syncer::APPS, syncer::SyncDataList(),
523 syncer::SyncDataList(), 520 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
524 scoped_ptr<syncer::SyncChangeProcessor>( 521 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
525 new syncer::FakeSyncChangeProcessor),
526 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
527 522
528 syncer::SyncDataList list = 523 syncer::SyncDataList list =
529 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 524 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
530 ASSERT_EQ(list.size(), 0U); 525 ASSERT_EQ(list.size(), 0U);
531 } 526 }
532 527
533 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) { 528 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) {
534 InitializeEmptyExtensionService(); 529 InitializeEmptyExtensionService();
535 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 530 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
536 const Extension* extension = service()->GetInstalledExtension(good_crx); 531 const Extension* extension = service()->GetInstalledExtension(good_crx);
537 ASSERT_TRUE(extension); 532 ASSERT_TRUE(extension);
538 533
539 syncer::FakeSyncChangeProcessor processor;
540 extension_sync_service()->MergeDataAndStartSyncing( 534 extension_sync_service()->MergeDataAndStartSyncing(
541 syncer::EXTENSIONS, 535 syncer::EXTENSIONS, syncer::SyncDataList(),
542 syncer::SyncDataList(), 536 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
543 scoped_ptr<syncer::SyncChangeProcessor>( 537 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
544 new syncer::FakeSyncChangeProcessor),
545 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
546 538
547 { 539 {
548 syncer::SyncDataList list = 540 syncer::SyncDataList list =
549 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 541 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
550 ASSERT_EQ(list.size(), 1U); 542 ASSERT_EQ(list.size(), 1U);
551 scoped_ptr<ExtensionSyncData> data = 543 scoped_ptr<ExtensionSyncData> data =
552 ExtensionSyncData::CreateFromSyncData(list[0]); 544 ExtensionSyncData::CreateFromSyncData(list[0]);
553 ASSERT_TRUE(data.get()); 545 ASSERT_TRUE(data.get());
554 EXPECT_TRUE(data->enabled()); 546 EXPECT_TRUE(data->enabled());
555 EXPECT_FALSE(data->incognito_enabled()); 547 EXPECT_FALSE(data->incognito_enabled());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 } 592 }
601 } 593 }
602 594
603 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) { 595 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) {
604 InitializeEmptyExtensionService(); 596 InitializeEmptyExtensionService();
605 InstallCRXWithLocation( 597 InstallCRXWithLocation(
606 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); 598 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW);
607 const Extension* extension = service()->GetInstalledExtension(good_crx); 599 const Extension* extension = service()->GetInstalledExtension(good_crx);
608 ASSERT_TRUE(extension); 600 ASSERT_TRUE(extension);
609 601
610 syncer::FakeSyncChangeProcessor processor;
611 extension_sync_service()->MergeDataAndStartSyncing( 602 extension_sync_service()->MergeDataAndStartSyncing(
612 syncer::EXTENSIONS, 603 syncer::EXTENSIONS, syncer::SyncDataList(),
613 syncer::SyncDataList(), 604 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
614 scoped_ptr<syncer::SyncChangeProcessor>( 605 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
615 new syncer::FakeSyncChangeProcessor),
616 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
617 606
618 UninstallExtension(good_crx, false); 607 UninstallExtension(good_crx, false);
619 EXPECT_TRUE( 608 EXPECT_TRUE(
620 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); 609 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx));
621 610
622 sync_pb::EntitySpecifics specifics; 611 sync_pb::EntitySpecifics specifics;
623 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); 612 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app();
624 sync_pb::ExtensionSpecifics* extension_specifics = 613 sync_pb::ExtensionSpecifics* extension_specifics =
625 app_specifics->mutable_extension(); 614 app_specifics->mutable_extension();
626 extension_specifics->set_id(good_crx); 615 extension_specifics->set_id(good_crx);
627 extension_specifics->set_version("1.0"); 616 extension_specifics->set_version("1.0");
628 extension_specifics->set_enabled(true); 617 extension_specifics->set_enabled(true);
629 618
630 syncer::SyncData sync_data = 619 SyncChangeList list =
631 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 620 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
632 syncer::SyncChange sync_change(FROM_HERE,
633 syncer::SyncChange::ACTION_UPDATE,
634 sync_data);
635 syncer::SyncChangeList list(1);
636 list[0] = sync_change;
637 621
638 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 622 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
639 EXPECT_TRUE( 623 EXPECT_TRUE(
640 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); 624 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx));
641 } 625 }
642 626
643 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) { 627 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) {
644 InitializeEmptyExtensionService(); 628 InitializeEmptyExtensionService();
645 const Extension* app = 629 const Extension* app =
646 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); 630 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW);
647 ASSERT_TRUE(app); 631 ASSERT_TRUE(app);
648 ASSERT_TRUE(app->is_app()); 632 ASSERT_TRUE(app->is_app());
649 633
650 syncer::FakeSyncChangeProcessor processor;
651 extension_sync_service()->MergeDataAndStartSyncing( 634 extension_sync_service()->MergeDataAndStartSyncing(
652 syncer::APPS, 635 syncer::APPS, syncer::SyncDataList(),
653 syncer::SyncDataList(), 636 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
654 scoped_ptr<syncer::SyncChangeProcessor>( 637 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
655 new syncer::FakeSyncChangeProcessor),
656 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
657 638
658 syncer::StringOrdinal initial_ordinal = 639 syncer::StringOrdinal initial_ordinal =
659 syncer::StringOrdinal::CreateInitialOrdinal(); 640 syncer::StringOrdinal::CreateInitialOrdinal();
660 { 641 {
661 syncer::SyncDataList list = 642 syncer::SyncDataList list =
662 extension_sync_service()->GetAllSyncData(syncer::APPS); 643 extension_sync_service()->GetAllSyncData(syncer::APPS);
663 ASSERT_EQ(list.size(), 1U); 644 ASSERT_EQ(list.size(), 1U);
664 645
665 scoped_ptr<ExtensionSyncData> app_sync_data = 646 scoped_ptr<ExtensionSyncData> app_sync_data =
666 ExtensionSyncData::CreateFromSyncData(list[0]); 647 ExtensionSyncData::CreateFromSyncData(list[0]);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 const size_t kAppCount = 3; 686 const size_t kAppCount = 3;
706 const Extension* apps[kAppCount]; 687 const Extension* apps[kAppCount];
707 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); 688 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW);
708 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); 689 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW);
709 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); 690 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW);
710 for (size_t i = 0; i < kAppCount; ++i) { 691 for (size_t i = 0; i < kAppCount; ++i) {
711 ASSERT_TRUE(apps[i]); 692 ASSERT_TRUE(apps[i]);
712 ASSERT_TRUE(apps[i]->is_app()); 693 ASSERT_TRUE(apps[i]->is_app());
713 } 694 }
714 695
715 syncer::FakeSyncChangeProcessor processor;
716 extension_sync_service()->MergeDataAndStartSyncing( 696 extension_sync_service()->MergeDataAndStartSyncing(
717 syncer::APPS, 697 syncer::APPS, syncer::SyncDataList(),
718 syncer::SyncDataList(), 698 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
719 scoped_ptr<syncer::SyncChangeProcessor>( 699 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
720 new syncer::FakeSyncChangeProcessor),
721 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
722 700
723 ExtensionSystem::Get(service()->GetBrowserContext()) 701 ExtensionSystem::Get(service()->GetBrowserContext())
724 ->app_sorting() 702 ->app_sorting()
725 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); 703 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id());
726 { 704 {
727 syncer::SyncDataList list = 705 syncer::SyncDataList list =
728 extension_sync_service()->GetAllSyncData(syncer::APPS); 706 extension_sync_service()->GetAllSyncData(syncer::APPS);
729 ASSERT_EQ(list.size(), 3U); 707 ASSERT_EQ(list.size(), 3U);
730 708
731 scoped_ptr<ExtensionSyncData> data[kAppCount]; 709 scoped_ptr<ExtensionSyncData> data[kAppCount];
(...skipping 18 matching lines...) Expand all
750 } 728 }
751 } 729 }
752 730
753 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) { 731 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) {
754 InitializeEmptyExtensionService(); 732 InitializeEmptyExtensionService();
755 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 733 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
756 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); 734 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW);
757 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); 735 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW);
758 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); 736 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW);
759 737
760 syncer::FakeSyncChangeProcessor processor;
761 extension_sync_service()->MergeDataAndStartSyncing( 738 extension_sync_service()->MergeDataAndStartSyncing(
762 syncer::APPS, 739 syncer::APPS, syncer::SyncDataList(),
763 syncer::SyncDataList(), 740 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
764 scoped_ptr<syncer::SyncChangeProcessor>( 741 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
765 new syncer::FakeSyncChangeProcessor),
766 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
767 extension_sync_service()->MergeDataAndStartSyncing( 742 extension_sync_service()->MergeDataAndStartSyncing(
768 syncer::EXTENSIONS, 743 syncer::EXTENSIONS, syncer::SyncDataList(),
769 syncer::SyncDataList(), 744 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
770 scoped_ptr<syncer::SyncChangeProcessor>( 745 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
771 new syncer::FakeSyncChangeProcessor),
772 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
773 746
774 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); 747 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION);
775 TerminateExtension(theme2_crx); 748 TerminateExtension(theme2_crx);
776 749
777 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); 750 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size());
778 EXPECT_EQ( 751 EXPECT_EQ(
779 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); 752 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size());
780 } 753 }
781 754
782 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) { 755 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) {
783 InitializeEmptyExtensionService(); 756 InitializeEmptyExtensionService();
784 syncer::FakeSyncChangeProcessor processor;
785 extension_sync_service()->MergeDataAndStartSyncing( 757 extension_sync_service()->MergeDataAndStartSyncing(
786 syncer::EXTENSIONS, 758 syncer::EXTENSIONS, syncer::SyncDataList(),
787 syncer::SyncDataList(), 759 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
788 scoped_ptr<syncer::SyncChangeProcessor>( 760 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
789 new syncer::FakeSyncChangeProcessor),
790 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
791 761
792 sync_pb::EntitySpecifics specifics; 762 sync_pb::EntitySpecifics specifics;
793 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 763 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
794 ext_specifics->set_id(good_crx); 764 ext_specifics->set_id(good_crx);
795 ext_specifics->set_version("1.0"); 765 ext_specifics->set_version("1.0");
796 syncer::SyncData sync_data = 766
797 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 767 SyncChangeList list =
798 syncer::SyncChange sync_change(FROM_HERE, 768 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE);
799 syncer::SyncChange::ACTION_DELETE,
800 sync_data);
801 syncer::SyncChangeList list(1);
802 list[0] = sync_change;
803 769
804 // Should do nothing. 770 // Should do nothing.
805 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 771 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
806 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); 772 EXPECT_FALSE(service()->GetExtensionById(good_crx, true));
807 773
808 // Install the extension. 774 // Install the extension.
809 base::FilePath extension_path = data_dir().AppendASCII("good.crx"); 775 base::FilePath extension_path = data_dir().AppendASCII("good.crx");
810 InstallCRX(extension_path, INSTALL_NEW); 776 InstallCRX(extension_path, INSTALL_NEW);
811 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); 777 EXPECT_TRUE(service()->GetExtensionById(good_crx, true));
812 778
(...skipping 17 matching lines...) Expand all
830 sync_pb::EntitySpecifics specifics; 796 sync_pb::EntitySpecifics specifics;
831 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); 797 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app();
832 sync_pb::ExtensionSpecifics* extension_specifics = 798 sync_pb::ExtensionSpecifics* extension_specifics =
833 app_specifics->mutable_extension(); 799 app_specifics->mutable_extension();
834 extension_specifics->set_id(good_crx); 800 extension_specifics->set_id(good_crx);
835 extension_specifics->set_version( 801 extension_specifics->set_version(
836 service()->GetInstalledExtension(good_crx)->version()->GetString()); 802 service()->GetInstalledExtension(good_crx)->version()->GetString());
837 803
838 { 804 {
839 extension_specifics->set_enabled(true); 805 extension_specifics->set_enabled(true);
840 syncer::SyncData sync_data = 806
841 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 807 SyncChangeList list =
842 syncer::SyncChange sync_change(FROM_HERE, 808 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE);
843 syncer::SyncChange::ACTION_DELETE,
844 sync_data);
845 syncer::SyncChangeList list(1);
846 list[0] = sync_change;
847 809
848 // Should do nothing 810 // Should do nothing
849 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 811 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
850 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); 812 EXPECT_TRUE(service()->GetExtensionById(good_crx, true));
851 } 813 }
852 814
853 { 815 {
854 extension_specifics->set_enabled(false); 816 extension_specifics->set_enabled(false);
855 syncer::SyncData sync_data = 817
856 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 818 SyncChangeList list =
857 syncer::SyncChange sync_change(FROM_HERE, 819 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
858 syncer::SyncChange::ACTION_UPDATE,
859 sync_data);
860 syncer::SyncChangeList list(1);
861 list[0] = sync_change;
862 820
863 // Should again do nothing. 821 // Should again do nothing.
864 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 822 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
865 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); 823 EXPECT_TRUE(service()->GetExtensionById(good_crx, false));
866 } 824 }
867 } 825 }
868 826
869 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) { 827 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) {
870 InitializeEmptyExtensionService(); 828 InitializeEmptyExtensionService();
871 syncer::FakeSyncChangeProcessor processor;
872 extension_sync_service()->MergeDataAndStartSyncing( 829 extension_sync_service()->MergeDataAndStartSyncing(
873 syncer::EXTENSIONS, 830 syncer::EXTENSIONS, syncer::SyncDataList(),
874 syncer::SyncDataList(), 831 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
875 scoped_ptr<syncer::SyncChangeProcessor>( 832 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
876 new syncer::FakeSyncChangeProcessor),
877 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
878 833
879 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 834 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
880 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 835 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
881 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 836 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
882 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( 837 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls(
883 good_crx, profile())); 838 good_crx, profile()));
884 const bool kDefaultAllowedScripting = 839 const bool kDefaultAllowedScripting =
885 extensions::util::DefaultAllowedScriptingOnAllUrls(); 840 extensions::util::DefaultAllowedScriptingOnAllUrls();
886 EXPECT_EQ(kDefaultAllowedScripting, 841 EXPECT_EQ(kDefaultAllowedScripting,
887 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); 842 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile()));
888 843
889 sync_pb::EntitySpecifics specifics; 844 sync_pb::EntitySpecifics specifics;
890 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 845 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
891 ext_specifics->set_id(good_crx); 846 ext_specifics->set_id(good_crx);
892 ext_specifics->set_version( 847 ext_specifics->set_version(
893 service()->GetInstalledExtension(good_crx)->version()->GetString()); 848 service()->GetInstalledExtension(good_crx)->version()->GetString());
894 ext_specifics->set_enabled(false); 849 ext_specifics->set_enabled(false);
895 850
896 { 851 {
897 syncer::SyncData sync_data = 852 SyncChangeList list =
898 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 853 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
899 syncer::SyncChange sync_change(FROM_HERE, 854
900 syncer::SyncChange::ACTION_UPDATE,
901 sync_data);
902 syncer::SyncChangeList list(1);
903 list[0] = sync_change;
904 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 855 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
905 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); 856 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx));
906 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 857 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
907 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( 858 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls(
908 good_crx, profile())); 859 good_crx, profile()));
909 EXPECT_EQ(kDefaultAllowedScripting, 860 EXPECT_EQ(kDefaultAllowedScripting,
910 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); 861 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile()));
911 } 862 }
912 863
913 { 864 {
914 ext_specifics->set_enabled(true); 865 ext_specifics->set_enabled(true);
915 ext_specifics->set_incognito_enabled(true); 866 ext_specifics->set_incognito_enabled(true);
916 syncer::SyncData sync_data = 867
917 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 868 SyncChangeList list =
918 syncer::SyncChange sync_change(FROM_HERE, 869 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
919 syncer::SyncChange::ACTION_UPDATE, 870
920 sync_data);
921 syncer::SyncChangeList list(1);
922 list[0] = sync_change;
923 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 871 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
924 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 872 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
925 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 873 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
926 } 874 }
927 875
928 { 876 {
929 ext_specifics->set_enabled(false); 877 ext_specifics->set_enabled(false);
930 ext_specifics->set_incognito_enabled(true); 878 ext_specifics->set_incognito_enabled(true);
931 syncer::SyncData sync_data = 879
932 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 880 SyncChangeList list =
933 syncer::SyncChange sync_change(FROM_HERE, 881 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
934 syncer::SyncChange::ACTION_UPDATE, 882
935 sync_data);
936 syncer::SyncChangeList list(1);
937 list[0] = sync_change;
938 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 883 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
939 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); 884 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx));
940 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 885 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
941 } 886 }
942 887
943 { 888 {
944 ext_specifics->set_enabled(true); 889 ext_specifics->set_enabled(true);
945 ext_specifics->set_all_urls_enabled(!kDefaultAllowedScripting); 890 ext_specifics->set_all_urls_enabled(!kDefaultAllowedScripting);
946 syncer::SyncData sync_data = 891
947 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 892 SyncChangeList list =
948 syncer::SyncChange sync_change(FROM_HERE, 893 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
949 syncer::SyncChange::ACTION_UPDATE, 894
950 sync_data);
951 syncer::SyncChangeList list(1);
952 list[0] = sync_change;
953 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 895 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
954 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 896 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
955 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( 897 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(
956 good_crx, profile())); 898 good_crx, profile()));
957 EXPECT_EQ(!kDefaultAllowedScripting, 899 EXPECT_EQ(!kDefaultAllowedScripting,
958 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); 900 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile()));
959 } 901 }
960 902
961 { 903 {
962 ext_specifics->set_all_urls_enabled(kDefaultAllowedScripting); 904 ext_specifics->set_all_urls_enabled(kDefaultAllowedScripting);
963 syncer::SyncData sync_data = 905
964 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 906 SyncChangeList list =
965 syncer::SyncChange sync_change(FROM_HERE, 907 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
966 syncer::SyncChange::ACTION_UPDATE, 908
967 sync_data);
968 syncer::SyncChangeList list(1);
969 list[0] = sync_change;
970 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 909 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
971 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 910 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
972 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( 911 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(
973 good_crx, profile())); 912 good_crx, profile()));
974 EXPECT_EQ(kDefaultAllowedScripting, 913 EXPECT_EQ(kDefaultAllowedScripting,
975 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); 914 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile()));
976 } 915 }
977 916
978 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); 917 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
979 } 918 }
980 919
981 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) { 920 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) {
982 InitializeEmptyExtensionService(); 921 InitializeEmptyExtensionService();
983 syncer::FakeSyncChangeProcessor processor;
984 extension_sync_service()->MergeDataAndStartSyncing( 922 extension_sync_service()->MergeDataAndStartSyncing(
985 syncer::EXTENSIONS, 923 syncer::EXTENSIONS, syncer::SyncDataList(),
986 syncer::SyncDataList(), 924 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
987 scoped_ptr<syncer::SyncChangeProcessor>( 925 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
988 new syncer::FakeSyncChangeProcessor),
989 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
990 926
991 const base::FilePath path = data_dir().AppendASCII("good.crx"); 927 const base::FilePath path = data_dir().AppendASCII("good.crx");
992 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); 928 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
993 929
994 struct TestCase { 930 struct TestCase {
995 const char* name; // For failure output only. 931 const char* name; // For failure output only.
996 bool sync_enabled; // The "enabled" flag coming in from Sync. 932 bool sync_enabled; // The "enabled" flag coming in from Sync.
997 // The disable reason(s) coming in from Sync, or -1 for "not set". 933 // The disable reason(s) coming in from Sync, or -1 for "not set".
998 int sync_disable_reasons; 934 int sync_disable_reasons;
999 // The disable reason(s) that should be set on the installed extension. 935 // The disable reason(s) that should be set on the installed extension.
(...skipping 26 matching lines...) Expand all
1026 SCOPED_TRACE(test_case.name); 962 SCOPED_TRACE(test_case.name);
1027 963
1028 sync_pb::EntitySpecifics specifics; 964 sync_pb::EntitySpecifics specifics;
1029 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 965 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1030 ext_specifics->set_id(good_crx); 966 ext_specifics->set_id(good_crx);
1031 ext_specifics->set_version(base::Version("1").GetString()); 967 ext_specifics->set_version(base::Version("1").GetString());
1032 ext_specifics->set_enabled(test_case.sync_enabled); 968 ext_specifics->set_enabled(test_case.sync_enabled);
1033 if (test_case.sync_disable_reasons != -1) 969 if (test_case.sync_disable_reasons != -1)
1034 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); 970 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons);
1035 971
1036 syncer::SyncData sync_data = 972 SyncChangeList list =
1037 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 973 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1038 syncer::SyncChange sync_change(FROM_HERE, 974
1039 syncer::SyncChange::ACTION_UPDATE,
1040 sync_data);
1041 syncer::SyncChangeList list(1, sync_change);
1042 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 975 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1043 976
1044 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); 977 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
1045 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED 978 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED
1046 : DISABLED); 979 : DISABLED);
1047 EXPECT_EQ(test_case.expect_disable_reasons, 980 EXPECT_EQ(test_case.expect_disable_reasons,
1048 prefs->GetDisableReasons(good_crx)); 981 prefs->GetDisableReasons(good_crx));
1049 scoped_ptr<const PermissionSet> permissions = 982 scoped_ptr<const PermissionSet> permissions =
1050 prefs->GetGrantedPermissions(good_crx); 983 prefs->GetGrantedPermissions(good_crx);
1051 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty()); 984 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty());
1052 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); 985 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
1053 986
1054 // Remove the extension again, so we can install it again for the next case. 987 // Remove the extension again, so we can install it again for the next case.
1055 UninstallExtension(good_crx, false, 988 UninstallExtension(good_crx, false,
1056 test_case.sync_enabled ? Extension::ENABLED 989 test_case.sync_enabled ? Extension::ENABLED
1057 : Extension::DISABLED); 990 : Extension::DISABLED);
1058 } 991 }
1059 } 992 }
1060 993
1061 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) { 994 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) {
1062 InitializeExtensionServiceWithUpdater(); 995 InitializeExtensionServiceWithUpdater();
1063 syncer::FakeSyncChangeProcessor processor;
1064 extension_sync_service()->MergeDataAndStartSyncing( 996 extension_sync_service()->MergeDataAndStartSyncing(
1065 syncer::EXTENSIONS, 997 syncer::EXTENSIONS, syncer::SyncDataList(),
1066 syncer::SyncDataList(), 998 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1067 scoped_ptr<syncer::SyncChangeProcessor>( 999 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1068 new syncer::FakeSyncChangeProcessor),
1069 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1070 1000
1071 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 1001 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
1072 TerminateExtension(good_crx); 1002 TerminateExtension(good_crx);
1073 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 1003 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
1074 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 1004 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
1075 1005
1076 sync_pb::EntitySpecifics specifics; 1006 sync_pb::EntitySpecifics specifics;
1077 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1007 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1078 ext_specifics->set_id(good_crx); 1008 ext_specifics->set_id(good_crx);
1079 ext_specifics->set_version( 1009 ext_specifics->set_version(
1080 service()->GetInstalledExtension(good_crx)->version()->GetString()); 1010 service()->GetInstalledExtension(good_crx)->version()->GetString());
1081 ext_specifics->set_enabled(false); 1011 ext_specifics->set_enabled(false);
1082 ext_specifics->set_incognito_enabled(true); 1012 ext_specifics->set_incognito_enabled(true);
1083 syncer::SyncData sync_data = 1013
1084 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1014 SyncChangeList list =
1085 syncer::SyncChange sync_change(FROM_HERE, 1015 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1086 syncer::SyncChange::ACTION_UPDATE,
1087 sync_data);
1088 syncer::SyncChangeList list(1);
1089 list[0] = sync_change;
1090 1016
1091 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1017 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1092 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); 1018 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx));
1093 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 1019 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
1094 1020
1095 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); 1021 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
1096 } 1022 }
1097 1023
1098 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) { 1024 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) {
1099 InitializeExtensionServiceWithUpdater(); 1025 InitializeExtensionServiceWithUpdater();
1100 syncer::FakeSyncChangeProcessor processor;
1101 extension_sync_service()->MergeDataAndStartSyncing( 1026 extension_sync_service()->MergeDataAndStartSyncing(
1102 syncer::EXTENSIONS, 1027 syncer::EXTENSIONS, syncer::SyncDataList(),
1103 syncer::SyncDataList(), 1028 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1104 scoped_ptr<syncer::SyncChangeProcessor>( 1029 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1105 new syncer::FakeSyncChangeProcessor),
1106 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1107 1030
1108 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); 1031 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW);
1109 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 1032 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
1110 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 1033 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
1111 1034
1112 sync_pb::EntitySpecifics specifics; 1035 sync_pb::EntitySpecifics specifics;
1113 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1036 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1114 ext_specifics->set_id(good_crx); 1037 ext_specifics->set_id(good_crx);
1115 ext_specifics->set_enabled(true); 1038 ext_specifics->set_enabled(true);
1116 1039
1117 const base::Version installed_version = 1040 const base::Version installed_version =
1118 *service()->GetInstalledExtension(good_crx)->version(); 1041 *service()->GetInstalledExtension(good_crx)->version();
1119 1042
1120 { 1043 {
1121 ext_specifics->set_version(installed_version.GetString()); 1044 ext_specifics->set_version(installed_version.GetString());
1122 syncer::SyncData sync_data = 1045
1123 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1046 SyncChangeList list =
1124 syncer::SyncChange sync_change(FROM_HERE, 1047 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1125 syncer::SyncChange::ACTION_UPDATE,
1126 sync_data);
1127 syncer::SyncChangeList list(1, sync_change);
1128 1048
1129 // Should do nothing if extension version == sync version. 1049 // Should do nothing if extension version == sync version.
1130 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1050 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1131 EXPECT_FALSE(service()->updater()->WillCheckSoon()); 1051 EXPECT_FALSE(service()->updater()->WillCheckSoon());
1132 // Make sure the version we'll send back to sync didn't change. 1052 // Make sure the version we'll send back to sync didn't change.
1133 syncer::SyncDataList data = 1053 syncer::SyncDataList data =
1134 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 1054 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
1135 ASSERT_EQ(1u, data.size()); 1055 ASSERT_EQ(1u, data.size());
1136 scoped_ptr<ExtensionSyncData> extension_data = 1056 scoped_ptr<ExtensionSyncData> extension_data =
1137 ExtensionSyncData::CreateFromSyncData(data[0]); 1057 ExtensionSyncData::CreateFromSyncData(data[0]);
1138 ASSERT_TRUE(extension_data); 1058 ASSERT_TRUE(extension_data);
1139 EXPECT_TRUE(installed_version.Equals(extension_data->version())); 1059 EXPECT_TRUE(installed_version.Equals(extension_data->version()));
1140 } 1060 }
1141 1061
1142 // Should do nothing if extension version > sync version. 1062 // Should do nothing if extension version > sync version.
1143 { 1063 {
1144 ext_specifics->set_version("0.0.0.0"); 1064 ext_specifics->set_version("0.0.0.0");
1145 syncer::SyncData sync_data = 1065
1146 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1066 SyncChangeList list =
1147 syncer::SyncChange sync_change(FROM_HERE, 1067 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1148 syncer::SyncChange::ACTION_UPDATE,
1149 sync_data);
1150 syncer::SyncChangeList list(1, sync_change);
1151 1068
1152 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1069 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1153 EXPECT_FALSE(service()->updater()->WillCheckSoon()); 1070 EXPECT_FALSE(service()->updater()->WillCheckSoon());
1154 // Make sure the version we'll send back to sync didn't change. 1071 // Make sure the version we'll send back to sync didn't change.
1155 syncer::SyncDataList data = 1072 syncer::SyncDataList data =
1156 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 1073 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
1157 ASSERT_EQ(1u, data.size()); 1074 ASSERT_EQ(1u, data.size());
1158 scoped_ptr<ExtensionSyncData> extension_data = 1075 scoped_ptr<ExtensionSyncData> extension_data =
1159 ExtensionSyncData::CreateFromSyncData(data[0]); 1076 ExtensionSyncData::CreateFromSyncData(data[0]);
1160 ASSERT_TRUE(extension_data); 1077 ASSERT_TRUE(extension_data);
1161 EXPECT_TRUE(installed_version.Equals(extension_data->version())); 1078 EXPECT_TRUE(installed_version.Equals(extension_data->version()));
1162 } 1079 }
1163 1080
1164 // Should kick off an update if extension version < sync version. 1081 // Should kick off an update if extension version < sync version.
1165 { 1082 {
1166 const base::Version new_version("9.9.9.9"); 1083 const base::Version new_version("9.9.9.9");
1167 ext_specifics->set_version(new_version.GetString()); 1084 ext_specifics->set_version(new_version.GetString());
1168 syncer::SyncData sync_data = 1085
1169 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1086 SyncChangeList list =
1170 syncer::SyncChange sync_change(FROM_HERE, 1087 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1171 syncer::SyncChange::ACTION_UPDATE,
1172 sync_data);
1173 syncer::SyncChangeList list(1, sync_change);
1174 1088
1175 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1089 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1176 EXPECT_TRUE(service()->updater()->WillCheckSoon()); 1090 EXPECT_TRUE(service()->updater()->WillCheckSoon());
1177 // Make sure that we'll send the NEW version back to sync, even though we 1091 // Make sure that we'll send the NEW version back to sync, even though we
1178 // haven't actually updated yet. This is to prevent the data in sync from 1092 // haven't actually updated yet. This is to prevent the data in sync from
1179 // flip-flopping back and forth until all clients are up to date. 1093 // flip-flopping back and forth until all clients are up to date.
1180 syncer::SyncDataList data = 1094 syncer::SyncDataList data =
1181 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); 1095 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS);
1182 ASSERT_EQ(1u, data.size()); 1096 ASSERT_EQ(1u, data.size());
1183 scoped_ptr<ExtensionSyncData> extension_data = 1097 scoped_ptr<ExtensionSyncData> extension_data =
1184 ExtensionSyncData::CreateFromSyncData(data[0]); 1098 ExtensionSyncData::CreateFromSyncData(data[0]);
1185 ASSERT_TRUE(extension_data); 1099 ASSERT_TRUE(extension_data);
1186 EXPECT_TRUE(new_version.Equals(extension_data->version())); 1100 EXPECT_TRUE(new_version.Equals(extension_data->version()));
1187 } 1101 }
1188 1102
1189 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); 1103 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
1190 } 1104 }
1191 1105
1192 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) { 1106 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) {
1193 InitializeExtensionServiceWithUpdater(); 1107 InitializeExtensionServiceWithUpdater();
1194 syncer::FakeSyncChangeProcessor processor;
1195 extension_sync_service()->MergeDataAndStartSyncing( 1108 extension_sync_service()->MergeDataAndStartSyncing(
1196 syncer::EXTENSIONS, 1109 syncer::EXTENSIONS, syncer::SyncDataList(),
1197 syncer::SyncDataList(), 1110 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1198 scoped_ptr<syncer::SyncChangeProcessor>( 1111 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1199 new syncer::FakeSyncChangeProcessor),
1200 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1201 1112
1202 sync_pb::EntitySpecifics specifics; 1113 sync_pb::EntitySpecifics specifics;
1203 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1114 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1204 ext_specifics->set_id(good_crx); 1115 ext_specifics->set_id(good_crx);
1205 ext_specifics->set_enabled(false); 1116 ext_specifics->set_enabled(false);
1206 ext_specifics->set_incognito_enabled(true); 1117 ext_specifics->set_incognito_enabled(true);
1207 ext_specifics->set_update_url("http://www.google.com/"); 1118 ext_specifics->set_update_url("http://www.google.com/");
1208 ext_specifics->set_version("1.2.3.4"); 1119 ext_specifics->set_version("1.2.3.4");
1209 syncer::SyncData sync_data = 1120
1210 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1121 SyncChangeList list =
1211 syncer::SyncChange sync_change(FROM_HERE, 1122 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1212 syncer::SyncChange::ACTION_UPDATE,
1213 sync_data);
1214 syncer::SyncChangeList list(1);
1215 list[0] = sync_change;
1216 1123
1217 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); 1124 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx));
1218 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 1125 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
1219 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1126 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1220 EXPECT_TRUE(service()->updater()->WillCheckSoon()); 1127 EXPECT_TRUE(service()->updater()->WillCheckSoon());
1221 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); 1128 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx));
1222 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); 1129 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile()));
1223 1130
1224 const extensions::PendingExtensionInfo* info; 1131 const extensions::PendingExtensionInfo* info;
1225 EXPECT_TRUE( 1132 EXPECT_TRUE(
1226 (info = service()->pending_extension_manager()->GetById(good_crx))); 1133 (info = service()->pending_extension_manager()->GetById(good_crx)));
1227 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); 1134 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec());
1228 EXPECT_TRUE(info->is_from_sync()); 1135 EXPECT_TRUE(info->is_from_sync());
1229 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); 1136 EXPECT_EQ(Manifest::INTERNAL, info->install_source());
1230 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. 1137 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|.
1231 } 1138 }
1232 1139
1233 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) { 1140 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) {
1234 InitializeEmptyExtensionService(); 1141 InitializeEmptyExtensionService();
1235 extension_sync_service()->MergeDataAndStartSyncing( 1142 extension_sync_service()->MergeDataAndStartSyncing(
1236 syncer::EXTENSIONS, 1143 syncer::EXTENSIONS, syncer::SyncDataList(),
1237 syncer::SyncDataList(), 1144 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1238 scoped_ptr<syncer::SyncChangeProcessor>( 1145 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1239 new syncer::FakeSyncChangeProcessor),
1240 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1241 1146
1242 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); 1147 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
1243 1148
1244 struct TestCase { 1149 struct TestCase {
1245 const char* name; // For failure output only. 1150 const char* name; // For failure output only.
1246 // Set of disable reasons before any Sync data comes in. If this is != 0, 1151 // Set of disable reasons before any Sync data comes in. If this is != 0,
1247 // the extension is disabled. 1152 // the extension is disabled.
1248 int previous_disable_reasons; 1153 int previous_disable_reasons;
1249 bool sync_enable; // The enabled flag coming in from Sync. 1154 bool sync_enable; // The enabled flag coming in from Sync.
1250 // The disable reason(s) coming in from Sync, or -1 for "not set". 1155 // The disable reason(s) coming in from Sync, or -1 for "not set".
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 1216
1312 // Now a sync update comes in. 1217 // Now a sync update comes in.
1313 sync_pb::EntitySpecifics specifics; 1218 sync_pb::EntitySpecifics specifics;
1314 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1219 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1315 ext_specifics->set_id(id); 1220 ext_specifics->set_id(id);
1316 ext_specifics->set_enabled(test_case.sync_enable); 1221 ext_specifics->set_enabled(test_case.sync_enable);
1317 ext_specifics->set_version(version); 1222 ext_specifics->set_version(version);
1318 if (test_case.sync_disable_reasons != -1) 1223 if (test_case.sync_disable_reasons != -1)
1319 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); 1224 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons);
1320 1225
1321 syncer::SyncData sync_data = 1226 SyncChangeList list =
1322 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1227 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1323 syncer::SyncChange sync_change(FROM_HERE, 1228
1324 syncer::SyncChange::ACTION_UPDATE,
1325 sync_data);
1326 syncer::SyncChangeList list(1, sync_change);
1327 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1229 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1328 1230
1329 // Check expectations. 1231 // Check expectations.
1330 const bool expect_enabled = !test_case.expect_disable_reasons; 1232 const bool expect_enabled = !test_case.expect_disable_reasons;
1331 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); 1233 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id));
1332 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); 1234 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id));
1333 1235
1334 // Remove the extension again, so we can install it again for the next case. 1236 // Remove the extension again, so we can install it again for the next case.
1335 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED 1237 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED
1336 : Extension::DISABLED); 1238 : Extension::DISABLED);
1337 } 1239 }
1338 } 1240 }
1339 1241
1340 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) { 1242 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) {
1341 InitializeEmptyExtensionService(); 1243 InitializeEmptyExtensionService();
1342 extension_sync_service()->MergeDataAndStartSyncing( 1244 extension_sync_service()->MergeDataAndStartSyncing(
1343 syncer::EXTENSIONS, 1245 syncer::EXTENSIONS, syncer::SyncDataList(),
1344 syncer::SyncDataList(), 1246 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1345 scoped_ptr<syncer::SyncChangeProcessor>( 1247 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1346 new syncer::FakeSyncChangeProcessor),
1347 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1348 1248
1349 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); 1249 base::FilePath base_path = data_dir().AppendASCII("permissions_increase");
1350 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); 1250 base::FilePath pem_path = base_path.AppendASCII("permissions.pem");
1351 1251
1352 base::FilePath path = base_path.AppendASCII("v1"); 1252 base::FilePath path = base_path.AppendASCII("v1");
1353 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); 1253 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW);
1354 // The extension must now be installed and enabled. 1254 // The extension must now be installed and enabled.
1355 ASSERT_TRUE(extension); 1255 ASSERT_TRUE(extension);
1356 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id())); 1256 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
1357 1257
1358 // Save the id, as the extension object will be destroyed during updating. 1258 // Save the id, as the extension object will be destroyed during updating.
1359 std::string id = extension->id(); 1259 std::string id = extension->id();
1360 1260
1361 // Update to a new version with increased permissions. 1261 // Update to a new version with increased permissions.
1362 path = base_path.AppendASCII("v2"); 1262 path = base_path.AppendASCII("v2");
1363 PackCRXAndUpdateExtension(id, path, pem_path, DISABLED); 1263 PackCRXAndUpdateExtension(id, path, pem_path, DISABLED);
1364 1264
1365 // Now a sync update comes in, telling us to re-enable a *newer* version. 1265 // Now a sync update comes in, telling us to re-enable a *newer* version.
1366 sync_pb::EntitySpecifics specifics; 1266 sync_pb::EntitySpecifics specifics;
1367 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1267 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1368 ext_specifics->set_id(id); 1268 ext_specifics->set_id(id);
1369 ext_specifics->set_version("3"); 1269 ext_specifics->set_version("3");
1370 ext_specifics->set_enabled(true); 1270 ext_specifics->set_enabled(true);
1371 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); 1271 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE);
1372 1272
1373 syncer::SyncData sync_data = 1273 SyncChangeList list =
1374 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1274 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1375 syncer::SyncChange sync_change(FROM_HERE, 1275
1376 syncer::SyncChange::ACTION_UPDATE,
1377 sync_data);
1378 syncer::SyncChangeList list(1, sync_change);
1379 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1276 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1380 1277
1381 // Since the version didn't match, the extension should still be disabled. 1278 // Since the version didn't match, the extension should still be disabled.
1382 EXPECT_TRUE(registry()->disabled_extensions().Contains(id)); 1279 EXPECT_TRUE(registry()->disabled_extensions().Contains(id));
1383 1280
1384 // After we update to the matching version, the extension should get enabled. 1281 // After we update to the matching version, the extension should get enabled.
1385 path = base_path.AppendASCII("v3"); 1282 path = base_path.AppendASCII("v3");
1386 PackCRXAndUpdateExtension(id, path, pem_path, ENABLED); 1283 PackCRXAndUpdateExtension(id, path, pem_path, ENABLED);
1387 } 1284 }
1388 1285
1389 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) { 1286 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) {
1390 // This is the update URL specified in the test extension. Setting it here is 1287 // This is the update URL specified in the test extension. Setting it here is
1391 // necessary to make it considered syncable. 1288 // necessary to make it considered syncable.
1392 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1289 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
1393 switches::kAppsGalleryUpdateURL, 1290 switches::kAppsGalleryUpdateURL,
1394 "http://localhost/autoupdate/updates.xml"); 1291 "http://localhost/autoupdate/updates.xml");
1395 1292
1396 InitializeEmptyExtensionService(); 1293 InitializeEmptyExtensionService();
1397 extension_sync_service()->MergeDataAndStartSyncing( 1294 extension_sync_service()->MergeDataAndStartSyncing(
1398 syncer::EXTENSIONS, 1295 syncer::EXTENSIONS, syncer::SyncDataList(),
1399 syncer::SyncDataList(), 1296 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1400 scoped_ptr<syncer::SyncChangeProcessor>( 1297 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1401 new syncer::FakeSyncChangeProcessor),
1402 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1403 1298
1404 const base::FilePath base_path = 1299 const base::FilePath base_path =
1405 data_dir().AppendASCII("permissions_increase"); 1300 data_dir().AppendASCII("permissions_increase");
1406 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); 1301 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem");
1407 const base::FilePath path_v1 = base_path.AppendASCII("v1"); 1302 const base::FilePath path_v1 = base_path.AppendASCII("v1");
1408 const base::FilePath path_v2 = base_path.AppendASCII("v2"); 1303 const base::FilePath path_v2 = base_path.AppendASCII("v2");
1409 1304
1410 base::ScopedTempDir crx_dir; 1305 base::ScopedTempDir crx_dir;
1411 ASSERT_TRUE(crx_dir.CreateUniqueTempDir()); 1306 ASSERT_TRUE(crx_dir.CreateUniqueTempDir());
1412 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx"); 1307 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx");
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 1375
1481 // Now a sync update comes in. 1376 // Now a sync update comes in.
1482 sync_pb::EntitySpecifics specifics; 1377 sync_pb::EntitySpecifics specifics;
1483 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1378 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1484 ext_specifics->set_id(id); 1379 ext_specifics->set_id(id);
1485 ext_specifics->set_enabled(true); 1380 ext_specifics->set_enabled(true);
1486 ext_specifics->set_version(test_case.sync_version); 1381 ext_specifics->set_version(test_case.sync_version);
1487 if (test_case.sync_disable_reasons != -1) 1382 if (test_case.sync_disable_reasons != -1)
1488 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); 1383 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons);
1489 1384
1490 syncer::SyncData sync_data = 1385 SyncChangeList list =
1491 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); 1386 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE);
1492 syncer::SyncChange sync_change(FROM_HERE, 1387
1493 syncer::SyncChange::ACTION_UPDATE,
1494 sync_data);
1495 syncer::SyncChangeList list(1, sync_change);
1496 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); 1388 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1497 1389
1498 // Check expectations. 1390 // Check expectations.
1499 const bool expect_enabled = !test_case.expect_disable_reasons; 1391 const bool expect_enabled = !test_case.expect_disable_reasons;
1500 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); 1392 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id));
1501 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); 1393 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id));
1502 scoped_ptr<const PermissionSet> granted_permissions = 1394 scoped_ptr<const PermissionSet> granted_permissions =
1503 prefs->GetGrantedPermissions(id); 1395 prefs->GetGrantedPermissions(id);
1504 if (test_case.expect_permissions_granted) { 1396 if (test_case.expect_permissions_granted) {
1505 scoped_ptr<const PermissionSet> active_permissions = 1397 scoped_ptr<const PermissionSet> active_permissions =
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1733 ext_specifics->set_enabled(true); 1625 ext_specifics->set_enabled(true);
1734 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); 1626 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE);
1735 ext_specifics->set_installed_by_custodian(true); 1627 ext_specifics->set_installed_by_custodian(true);
1736 ext_specifics->set_version(version1); 1628 ext_specifics->set_version(version1);
1737 1629
1738 // Attempting to re-enable an old version should result in a permission 1630 // Attempting to re-enable an old version should result in a permission
1739 // request for the current version. 1631 // request for the current version.
1740 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( 1632 EXPECT_CALL(*creator, CreateExtensionUpdateRequest(
1741 UpdateRequestId(id, version2), testing::_)); 1633 UpdateRequestId(id, version2), testing::_));
1742 1634
1743 syncer::SyncData sync_data = 1635 SyncChangeList list =
1744 syncer::SyncData::CreateLocalData(id, "Name", specifics); 1636 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE);
1745 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, 1637
1746 sync_data); 1638 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1747 syncer::SyncChangeList change_list(1, sync_change);
1748 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list);
1749 // The re-enable should be ignored, since the version doesn't match. 1639 // The re-enable should be ignored, since the version doesn't match.
1750 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); 1640 EXPECT_FALSE(registry()->enabled_extensions().Contains(id));
1751 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( 1641 EXPECT_FALSE(extension_sync_service()->HasPendingReenable(
1752 id, base::Version(version1))); 1642 id, base::Version(version1)));
1753 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( 1643 EXPECT_FALSE(extension_sync_service()->HasPendingReenable(
1754 id, base::Version(version2))); 1644 id, base::Version(version2)));
1755 } 1645 }
1756 1646
1757 TEST_F(ExtensionServiceTestSupervised, 1647 TEST_F(ExtensionServiceTestSupervised,
1758 UpdateWithPermissionIncreaseApprovalMatchingVersion) { 1648 UpdateWithPermissionIncreaseApprovalMatchingVersion) {
(...skipping 19 matching lines...) Expand all
1778 // Simulate a custodian approval for re-enabling the extension coming in 1668 // Simulate a custodian approval for re-enabling the extension coming in
1779 // through Sync. 1669 // through Sync.
1780 sync_pb::EntitySpecifics specifics; 1670 sync_pb::EntitySpecifics specifics;
1781 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1671 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1782 ext_specifics->set_id(id); 1672 ext_specifics->set_id(id);
1783 ext_specifics->set_enabled(true); 1673 ext_specifics->set_enabled(true);
1784 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); 1674 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE);
1785 ext_specifics->set_installed_by_custodian(true); 1675 ext_specifics->set_installed_by_custodian(true);
1786 ext_specifics->set_version(version2); 1676 ext_specifics->set_version(version2);
1787 1677
1788 syncer::SyncData sync_data = 1678 SyncChangeList list =
1789 syncer::SyncData::CreateLocalData(id, "Name", specifics); 1679 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE);
1790 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, 1680
1791 sync_data); 1681 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1792 syncer::SyncChangeList change_list(1, sync_change);
1793 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list);
1794 // The extension should have gotten re-enabled. 1682 // The extension should have gotten re-enabled.
1795 EXPECT_TRUE(registry()->enabled_extensions().Contains(id)); 1683 EXPECT_TRUE(registry()->enabled_extensions().Contains(id));
1796 } 1684 }
1797 1685
1798 TEST_F(ExtensionServiceTestSupervised, 1686 TEST_F(ExtensionServiceTestSupervised,
1799 UpdateWithPermissionIncreaseApprovalNewVersion) { 1687 UpdateWithPermissionIncreaseApprovalNewVersion) {
1800 // Explicitly enable the "need custodian approval" field trial. 1688 // Explicitly enable the "need custodian approval" field trial.
1801 base::FieldTrialList field_trial_list(new base::MockEntropyProvider()); 1689 base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
1802 base::FieldTrialList::CreateFieldTrial( 1690 base::FieldTrialList::CreateFieldTrial(
1803 "SupervisedUserExtensionPermissionIncrease", "NeedCustodianApproval"); 1691 "SupervisedUserExtensionPermissionIncrease", "NeedCustodianApproval");
(...skipping 21 matching lines...) Expand all
1825 ext_specifics->set_enabled(true); 1713 ext_specifics->set_enabled(true);
1826 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); 1714 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE);
1827 ext_specifics->set_installed_by_custodian(true); 1715 ext_specifics->set_installed_by_custodian(true);
1828 ext_specifics->set_version(version3); 1716 ext_specifics->set_version(version3);
1829 1717
1830 // This should *not* result in a new permission request. 1718 // This should *not* result in a new permission request.
1831 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( 1719 EXPECT_CALL(*creator, CreateExtensionUpdateRequest(
1832 UpdateRequestId(id, version3), testing::_)) 1720 UpdateRequestId(id, version3), testing::_))
1833 .Times(0); 1721 .Times(0);
1834 1722
1835 syncer::SyncData sync_data = 1723 SyncChangeList list =
1836 syncer::SyncData::CreateLocalData(id, "Name", specifics); 1724 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE);
1837 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, 1725
1838 sync_data); 1726 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1839 syncer::SyncChangeList change_list(1, sync_change);
1840 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list);
1841 // The re-enable should be delayed until the extension is updated to the 1727 // The re-enable should be delayed until the extension is updated to the
1842 // matching version. 1728 // matching version.
1843 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); 1729 EXPECT_FALSE(registry()->enabled_extensions().Contains(id));
1844 EXPECT_TRUE(extension_sync_service()->HasPendingReenable( 1730 EXPECT_TRUE(extension_sync_service()->HasPendingReenable(
1845 id, base::Version(version3))); 1731 id, base::Version(version3)));
1846 1732
1847 // Update to the matching version. Now the extension should get enabled. 1733 // Update to the matching version. Now the extension should get enabled.
1848 UpdatePermissionsTestExtension(id, version3, ENABLED); 1734 UpdatePermissionsTestExtension(id, version3, ENABLED);
1849 } 1735 }
1850 1736
1851 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) { 1737 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) {
1852 InitializeEmptyExtensionService(); 1738 InitializeEmptyExtensionService();
1853 extension_sync_service()->MergeDataAndStartSyncing( 1739 extension_sync_service()->MergeDataAndStartSyncing(
1854 syncer::EXTENSIONS, 1740 syncer::EXTENSIONS, syncer::SyncDataList(),
1855 syncer::SyncDataList(), 1741 make_scoped_ptr(new syncer::FakeSyncChangeProcessor),
1856 scoped_ptr<syncer::SyncChangeProcessor>( 1742 make_scoped_ptr(new syncer::SyncErrorFactoryMock));
1857 new syncer::FakeSyncChangeProcessor),
1858 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1859 1743
1860 // Install two extensions. 1744 // Install two extensions.
1861 base::FilePath path1 = data_dir().AppendASCII("good.crx"); 1745 base::FilePath path1 = data_dir().AppendASCII("good.crx");
1862 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); 1746 base::FilePath path2 = data_dir().AppendASCII("good2048.crx");
1863 const Extension* extensions[] = { 1747 const Extension* extensions[] = {
1864 InstallCRX(path1, INSTALL_NEW), 1748 InstallCRX(path1, INSTALL_NEW),
1865 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) 1749 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN)
1866 }; 1750 };
1867 1751
1868 // Add a policy provider that will disallow any changes. 1752 // Add a policy provider that will disallow any changes.
1869 extensions::TestManagementPolicyProvider provider( 1753 extensions::TestManagementPolicyProvider provider(
1870 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); 1754 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
1871 ExtensionSystem::Get( 1755 ExtensionSystem::Get(
1872 browser_context())->management_policy()->RegisterProvider(&provider); 1756 browser_context())->management_policy()->RegisterProvider(&provider);
1873 1757
1874 // Create a sync deletion for each extension. 1758 // Create a sync deletion for each extension.
1875 syncer::SyncChangeList change_list; 1759 SyncChangeList list;
1876 for (size_t i = 0; i < arraysize(extensions); i++) { 1760 for (size_t i = 0; i < arraysize(extensions); i++) {
1877 const std::string& id = extensions[i]->id(); 1761 const std::string& id = extensions[i]->id();
1878 sync_pb::EntitySpecifics specifics; 1762 sync_pb::EntitySpecifics specifics;
1879 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1763 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1880 ext_specifics->set_id(id); 1764 ext_specifics->set_id(id);
1881 ext_specifics->set_version("1.0"); 1765 ext_specifics->set_version("1.0");
1882 ext_specifics->set_installed_by_custodian( 1766 ext_specifics->set_installed_by_custodian(
1883 extensions[i]->was_installed_by_custodian()); 1767 extensions[i]->was_installed_by_custodian());
1884 syncer::SyncData sync_data = 1768 syncer::SyncData sync_data =
1885 syncer::SyncData::CreateLocalData(id, "Name", specifics); 1769 syncer::SyncData::CreateLocalData(id, "Name", specifics);
1886 change_list.push_back(syncer::SyncChange(FROM_HERE, 1770 list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_DELETE, sync_data));
1887 syncer::SyncChange::ACTION_DELETE,
1888 sync_data));
1889 } 1771 }
1890 1772
1891 // Save the extension ids, as uninstalling destroys the Extension instance. 1773 // Save the extension ids, as uninstalling destroys the Extension instance.
1892 std::string extension_ids[] = { 1774 std::string extension_ids[] = {
1893 extensions[0]->id(), 1775 extensions[0]->id(),
1894 extensions[1]->id() 1776 extensions[1]->id()
1895 }; 1777 };
1896 1778
1897 // Now apply the uninstallations. 1779 // Now apply the uninstallations.
1898 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); 1780 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1899 1781
1900 // Uninstalling the extension without installed_by_custodian should have been 1782 // Uninstalling the extension without installed_by_custodian should have been
1901 // blocked by policy, so it should still be there. 1783 // blocked by policy, so it should still be there.
1902 EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_ids[0])); 1784 EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_ids[0]));
1903 1785
1904 // But installed_by_custodian should result in bypassing the policy check. 1786 // But installed_by_custodian should result in bypassing the policy check.
1905 EXPECT_FALSE( 1787 EXPECT_FALSE(
1906 registry()->GenerateInstalledExtensionsSet()->Contains(extension_ids[1])); 1788 registry()->GenerateInstalledExtensionsSet()->Contains(extension_ids[1]));
1907 } 1789 }
1908 1790
(...skipping 15 matching lines...) Expand all
1924 .SetID(crx_file::id_util::GenerateId(kName)) 1806 .SetID(crx_file::id_util::GenerateId(kName))
1925 .Build(); 1807 .Build();
1926 1808
1927 // Install and enable it. 1809 // Install and enable it.
1928 service()->AddExtension(extension.get()); 1810 service()->AddExtension(extension.get());
1929 service()->GrantPermissionsAndEnableExtension(extension.get()); 1811 service()->GrantPermissionsAndEnableExtension(extension.get());
1930 const std::string id = extension->id(); 1812 const std::string id = extension->id();
1931 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); 1813 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id));
1932 1814
1933 // Simulate a sync node coming in where the extension had all-hosts withheld. 1815 // Simulate a sync node coming in where the extension had all-hosts withheld.
1934 // This means that it should have all-hosts withheld on this machine, too. 1816 // This means that it should have all-hosts withheld on this machine,
Devlin 2015/12/02 17:24:50 ?
Marc Treib 2015/12/03 09:29:41 Err... no idea how that happened?! Reverted, thank
1935 syncer::SyncChangeList change_list;
1936 sync_pb::EntitySpecifics specifics; 1817 sync_pb::EntitySpecifics specifics;
1937 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); 1818 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
1938 ext_specifics->set_id(id); 1819 ext_specifics->set_id(id);
1939 ext_specifics->set_name(kName); 1820 ext_specifics->set_name(kName);
1940 ext_specifics->set_version("1.0"); 1821 ext_specifics->set_version("1.0");
1941 ext_specifics->set_all_urls_enabled(false); 1822 ext_specifics->set_all_urls_enabled(false);
1942 ext_specifics->set_enabled(true); 1823 ext_specifics->set_enabled(true);
1943 syncer::SyncData sync_data =
1944 syncer::SyncData::CreateLocalData(id, "Name", specifics);
1945 change_list.push_back(syncer::SyncChange(FROM_HERE,
1946 syncer::SyncChange::ACTION_UPDATE,
1947 sync_data));
1948 1824
1949 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); 1825 SyncChangeList list =
1826 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE);
1827
1828 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list);
1950 1829
1951 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); 1830 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id));
1952 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); 1831 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile()));
1953 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(id, profile())); 1832 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(id, profile()));
1954 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); 1833 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile()));
1955 } 1834 }
1956 1835
1957 #endif // defined(ENABLE_SUPERVISED_USERS) 1836 #endif // defined(ENABLE_SUPERVISED_USERS)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698