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

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