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

Side by Side Diff: chrome/browser/themes/theme_syncable_service_unittest.cc

Issue 151963002: Remove duplicated code from sync related unit tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename SyncChangeProcessorDelgate to SyncChangeProcessorDelgator. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/themes/theme_syncable_service.h" 5 #include "chrome/browser/themes/theme_syncable_service.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "chrome/browser/extensions/extension_service.h" 12 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/extensions/test_extension_system.h" 13 #include "chrome/browser/extensions/test_extension_system.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/themes/theme_service.h" 15 #include "chrome/browser/themes/theme_service.h"
16 #include "chrome/browser/themes/theme_service_factory.h" 16 #include "chrome/browser/themes/theme_service_factory.h"
17 #include "chrome/common/extensions/extension_messages.h" 17 #include "chrome/common/extensions/extension_messages.h"
18 #include "chrome/common/extensions/manifest_url_handler.h" 18 #include "chrome/common/extensions/manifest_url_handler.h"
19 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/testing_profile.h"
20 #include "content/public/test/test_browser_thread.h" 20 #include "content/public/test/test_browser_thread.h"
21 #include "extensions/common/extension.h" 21 #include "extensions/common/extension.h"
22 #include "extensions/common/manifest_constants.h" 22 #include "extensions/common/manifest_constants.h"
23 #include "extensions/common/permissions/api_permission_set.h" 23 #include "extensions/common/permissions/api_permission_set.h"
24 #include "extensions/common/permissions/permission_set.h" 24 #include "extensions/common/permissions/permission_set.h"
25 #include "sync/api/fake_sync_change_processor.h"
26 #include "sync/api/sync_change_processor_delegator.h"
25 #include "sync/api/sync_error.h" 27 #include "sync/api/sync_error.h"
26 #include "sync/api/sync_error_factory_mock.h" 28 #include "sync/api/sync_error_factory_mock.h"
27 #include "sync/protocol/sync.pb.h" 29 #include "sync/protocol/sync.pb.h"
28 #include "sync/protocol/theme_specifics.pb.h" 30 #include "sync/protocol/theme_specifics.pb.h"
29 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
30 32
31 #if defined(OS_CHROMEOS) 33 #if defined(OS_CHROMEOS)
32 #include "chrome/browser/chromeos/login/user_manager.h" 34 #include "chrome/browser/chromeos/login/user_manager.h"
33 #include "chrome/browser/chromeos/settings/cros_settings.h" 35 #include "chrome/browser/chromeos/settings/cros_settings.h"
34 #include "chrome/browser/chromeos/settings/device_settings_service.h" 36 #include "chrome/browser/chromeos/settings/device_settings_service.h"
35 #endif 37 #endif
36 38
37 using std::string; 39 using std::string;
38 40
39 namespace { 41 namespace {
40 42
41 static const char kCustomThemeName[] = "name"; 43 static const char kCustomThemeName[] = "name";
42 static const char kCustomThemeUrl[] = "http://update.url/foo"; 44 static const char kCustomThemeUrl[] = "http://update.url/foo";
43 45
44 #if defined(OS_WIN) 46 #if defined(OS_WIN)
45 const base::FilePath::CharType kExtensionFilePath[] = 47 const base::FilePath::CharType kExtensionFilePath[] =
46 FILE_PATH_LITERAL("c:\\foo"); 48 FILE_PATH_LITERAL("c:\\foo");
47 #elif defined(OS_POSIX) 49 #elif defined(OS_POSIX)
48 const base::FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/oo"); 50 const base::FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/oo");
49 #endif 51 #endif
50 52
51 class FakeSyncChangeProcessor : public syncer::SyncChangeProcessor {
52 public:
53 FakeSyncChangeProcessor() : change_output_(NULL) {}
54
55 // syncer::SyncChangeProcessor implementation.
56 virtual syncer::SyncError ProcessSyncChanges(
57 const tracked_objects::Location& from_here,
58 const syncer::SyncChangeList& change_list) OVERRIDE {
59 change_output_->insert(change_output_->end(), change_list.begin(),
60 change_list.end());
61 return syncer::SyncError();
62 }
63
64 virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const
65 OVERRIDE {
66 return syncer::SyncDataList();
67 }
68
69 void SetChangeOutput(syncer::SyncChangeList *change_output) {
70 change_output_ = change_output;
71 }
72
73 private:
74 syncer::SyncChangeList *change_output_;
75 };
76
77 class FakeThemeService : public ThemeService { 53 class FakeThemeService : public ThemeService {
78 public: 54 public:
79 FakeThemeService() : 55 FakeThemeService() :
80 using_native_theme_(false), 56 using_native_theme_(false),
81 using_default_theme_(false), 57 using_default_theme_(false),
82 theme_extension_(NULL), 58 theme_extension_(NULL),
83 is_dirty_(false) {} 59 is_dirty_(false) {}
84 60
85 // ThemeService implementation 61 // ThemeService implementation
86 virtual void SetTheme(const extensions::Extension* extension) OVERRIDE { 62 virtual void SetTheme(const extensions::Extension* extension) OVERRIDE {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 file_thread_(content::BrowserThread::FILE, &loop_), 148 file_thread_(content::BrowserThread::FILE, &loop_),
173 fake_theme_service_(NULL) {} 149 fake_theme_service_(NULL) {}
174 150
175 virtual ~ThemeSyncableServiceTest() {} 151 virtual ~ThemeSyncableServiceTest() {}
176 152
177 virtual void SetUp() { 153 virtual void SetUp() {
178 profile_.reset(new TestingProfile); 154 profile_.reset(new TestingProfile);
179 fake_theme_service_ = BuildForProfile(profile_.get()); 155 fake_theme_service_ = BuildForProfile(profile_.get());
180 theme_sync_service_.reset(new ThemeSyncableService(profile_.get(), 156 theme_sync_service_.reset(new ThemeSyncableService(profile_.get(),
181 fake_theme_service_)); 157 fake_theme_service_));
182 fake_change_processor_.reset(new FakeSyncChangeProcessor); 158 fake_change_processor_.reset(new syncer::FakeSyncChangeProcessor);
183 SetUpExtension(); 159 SetUpExtension();
184 } 160 }
185 161
186 virtual void TearDown() { 162 virtual void TearDown() {
187 profile_.reset(); 163 profile_.reset();
188 loop_.RunUntilIdle(); 164 loop_.RunUntilIdle();
189 } 165 }
190 166
191 void SetUpExtension() { 167 void SetUpExtension() {
192 CommandLine command_line(CommandLine::NO_PROGRAM); 168 CommandLine command_line(CommandLine::NO_PROGRAM);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 #if defined OS_CHROMEOS 224 #if defined OS_CHROMEOS
249 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 225 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
250 chromeos::ScopedTestCrosSettings test_cros_settings_; 226 chromeos::ScopedTestCrosSettings test_cros_settings_;
251 chromeos::ScopedTestUserManager test_user_manager_; 227 chromeos::ScopedTestUserManager test_user_manager_;
252 #endif 228 #endif
253 229
254 scoped_ptr<TestingProfile> profile_; 230 scoped_ptr<TestingProfile> profile_;
255 FakeThemeService* fake_theme_service_; 231 FakeThemeService* fake_theme_service_;
256 scoped_refptr<extensions::Extension> theme_extension_; 232 scoped_refptr<extensions::Extension> theme_extension_;
257 scoped_ptr<ThemeSyncableService> theme_sync_service_; 233 scoped_ptr<ThemeSyncableService> theme_sync_service_;
258 scoped_ptr<syncer::SyncChangeProcessor> fake_change_processor_; 234 scoped_ptr<syncer::FakeSyncChangeProcessor> fake_change_processor_;
259 }; 235 };
260 236
261 class PolicyInstalledThemeTest : public ThemeSyncableServiceTest { 237 class PolicyInstalledThemeTest : public ThemeSyncableServiceTest {
262 virtual extensions::Manifest::Location GetThemeLocation() OVERRIDE { 238 virtual extensions::Manifest::Location GetThemeLocation() OVERRIDE {
263 return extensions::Manifest::EXTERNAL_POLICY_DOWNLOAD; 239 return extensions::Manifest::EXTERNAL_POLICY_DOWNLOAD;
264 } 240 }
265 }; 241 };
266 242
267 TEST_F(ThemeSyncableServiceTest, AreThemeSpecificsEqual) { 243 TEST_F(ThemeSyncableServiceTest, AreThemeSpecificsEqual) {
268 sync_pb::ThemeSpecifics a, b; 244 sync_pb::ThemeSpecifics a, b;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 286
311 b.set_use_system_theme_by_default(true); 287 b.set_use_system_theme_by_default(true);
312 EXPECT_TRUE(ThemeSyncableService::AreThemeSpecificsEqual(a, b, false)); 288 EXPECT_TRUE(ThemeSyncableService::AreThemeSpecificsEqual(a, b, false));
313 EXPECT_TRUE(ThemeSyncableService::AreThemeSpecificsEqual(a, b, true)); 289 EXPECT_TRUE(ThemeSyncableService::AreThemeSpecificsEqual(a, b, true));
314 } 290 }
315 291
316 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeDefaultTheme) { 292 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeDefaultTheme) {
317 // Set up theme service to use custom theme. 293 // Set up theme service to use custom theme.
318 fake_theme_service_->SetTheme(theme_extension_.get()); 294 fake_theme_service_->SetTheme(theme_extension_.get());
319 295
320 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 296 syncer::SyncError error =
321 syncer::THEMES, MakeThemeDataList(sync_pb::ThemeSpecifics()), 297 theme_sync_service_->MergeDataAndStartSyncing(
322 fake_change_processor_.Pass(), 298 syncer::THEMES,
323 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 299 MakeThemeDataList(sync_pb::ThemeSpecifics()),
324 error(); 300 scoped_ptr<syncer::SyncChangeProcessor>(
301 new syncer::SyncChangeProcessorDelegator(
302 fake_change_processor_.get())),
303 scoped_ptr<syncer::SyncErrorFactory>(
304 new syncer::SyncErrorFactoryMock())).error();
325 EXPECT_FALSE(error.IsSet()) << error.message(); 305 EXPECT_FALSE(error.IsSet()) << error.message();
326 EXPECT_TRUE(fake_theme_service_->UsingDefaultTheme()); 306 EXPECT_TRUE(fake_theme_service_->UsingDefaultTheme());
327 } 307 }
328 308
329 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeSystemTheme) { 309 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeSystemTheme) {
330 sync_pb::ThemeSpecifics theme_specifics; 310 sync_pb::ThemeSpecifics theme_specifics;
331 theme_specifics.set_use_system_theme_by_default(true); 311 theme_specifics.set_use_system_theme_by_default(true);
332 312
333 // Set up theme service to use custom theme. 313 // Set up theme service to use custom theme.
334 fake_theme_service_->SetTheme(theme_extension_.get()); 314 fake_theme_service_->SetTheme(theme_extension_.get());
335 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 315 syncer::SyncError error =
336 syncer::THEMES, MakeThemeDataList(theme_specifics), 316 theme_sync_service_->MergeDataAndStartSyncing(
337 fake_change_processor_.Pass(), 317 syncer::THEMES,
338 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 318 MakeThemeDataList(theme_specifics),
339 error(); 319 scoped_ptr<syncer::SyncChangeProcessor>(
320 new syncer::SyncChangeProcessorDelegator(
321 fake_change_processor_.get())),
322 scoped_ptr<syncer::SyncErrorFactory>(
323 new syncer::SyncErrorFactoryMock())).error();
340 EXPECT_FALSE(error.IsSet()) << error.message(); 324 EXPECT_FALSE(error.IsSet()) << error.message();
341 EXPECT_TRUE(fake_theme_service_->UsingNativeTheme()); 325 EXPECT_TRUE(fake_theme_service_->UsingNativeTheme());
342 } 326 }
343 327
344 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeCustomTheme) { 328 TEST_F(ThemeSyncableServiceTest, SetCurrentThemeCustomTheme) {
345 sync_pb::ThemeSpecifics theme_specifics; 329 sync_pb::ThemeSpecifics theme_specifics;
346 theme_specifics.set_use_custom_theme(true); 330 theme_specifics.set_use_custom_theme(true);
347 theme_specifics.set_custom_theme_id(theme_extension_->id()); 331 theme_specifics.set_custom_theme_id(theme_extension_->id());
348 theme_specifics.set_custom_theme_name(kCustomThemeName); 332 theme_specifics.set_custom_theme_name(kCustomThemeName);
349 theme_specifics.set_custom_theme_name(kCustomThemeUrl); 333 theme_specifics.set_custom_theme_name(kCustomThemeUrl);
350 334
351 // Set up theme service to use default theme. 335 // Set up theme service to use default theme.
352 fake_theme_service_->UseDefaultTheme(); 336 fake_theme_service_->UseDefaultTheme();
353 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 337 syncer::SyncError error =
354 syncer::THEMES, MakeThemeDataList(theme_specifics), 338 theme_sync_service_->MergeDataAndStartSyncing(
355 fake_change_processor_.Pass(), 339 syncer::THEMES,
356 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 340 MakeThemeDataList(theme_specifics),
357 error(); 341 scoped_ptr<syncer::SyncChangeProcessor>(
342 new syncer::SyncChangeProcessorDelegator(
343 fake_change_processor_.get())),
344 scoped_ptr<syncer::SyncErrorFactory>(
345 new syncer::SyncErrorFactoryMock())).error();
358 EXPECT_FALSE(error.IsSet()) << error.message(); 346 EXPECT_FALSE(error.IsSet()) << error.message();
359 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get()); 347 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get());
360 } 348 }
361 349
362 TEST_F(ThemeSyncableServiceTest, DontResetThemeWhenSpecificsAreEqual) { 350 TEST_F(ThemeSyncableServiceTest, DontResetThemeWhenSpecificsAreEqual) {
363 // Set up theme service to use default theme and expect no changes. 351 // Set up theme service to use default theme and expect no changes.
364 fake_theme_service_->UseDefaultTheme(); 352 fake_theme_service_->UseDefaultTheme();
365 fake_theme_service_->MarkClean(); 353 fake_theme_service_->MarkClean();
366 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 354 syncer::SyncError error =
367 syncer::THEMES, MakeThemeDataList(sync_pb::ThemeSpecifics()), 355 theme_sync_service_->MergeDataAndStartSyncing(
368 fake_change_processor_.Pass(), 356 syncer::THEMES,
369 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 357 MakeThemeDataList(sync_pb::ThemeSpecifics()),
370 error(); 358 scoped_ptr<syncer::SyncChangeProcessor>(
359 new syncer::SyncChangeProcessorDelegator(
360 fake_change_processor_.get())),
361 scoped_ptr<syncer::SyncErrorFactory>(
362 new syncer::SyncErrorFactoryMock())).error();
371 EXPECT_FALSE(error.IsSet()) << error.message(); 363 EXPECT_FALSE(error.IsSet()) << error.message();
372 EXPECT_FALSE(fake_theme_service_->is_dirty()); 364 EXPECT_FALSE(fake_theme_service_->is_dirty());
373 } 365 }
374 366
375 TEST_F(ThemeSyncableServiceTest, UpdateThemeSpecificsFromCurrentTheme) { 367 TEST_F(ThemeSyncableServiceTest, UpdateThemeSpecificsFromCurrentTheme) {
376 // Set up theme service to use custom theme. 368 // Set up theme service to use custom theme.
377 fake_theme_service_->SetTheme(theme_extension_.get()); 369 fake_theme_service_->SetTheme(theme_extension_.get());
378 370
379 syncer::SyncChangeList change_list; 371 syncer::SyncError error =
380 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())-> 372 theme_sync_service_->MergeDataAndStartSyncing(
381 SetChangeOutput(&change_list); 373 syncer::THEMES,
382 374 syncer::SyncDataList(),
383 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 375 scoped_ptr<syncer::SyncChangeProcessor>(
384 syncer::THEMES, syncer::SyncDataList(), fake_change_processor_.Pass(), 376 new syncer::SyncChangeProcessorDelegator(
385 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 377 fake_change_processor_.get())),
386 error(); 378 scoped_ptr<syncer::SyncErrorFactory>(
379 new syncer::SyncErrorFactoryMock())).error();
387 EXPECT_FALSE(error.IsSet()) << error.message(); 380 EXPECT_FALSE(error.IsSet()) << error.message();
388 381 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
389 ASSERT_EQ(1u, change_list.size()); 382 ASSERT_EQ(1u, changes.size());
390 EXPECT_TRUE(change_list[0].IsValid()); 383 EXPECT_TRUE(changes[0].IsValid());
391 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change_list[0].change_type()); 384 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, changes[0].change_type());
392 EXPECT_EQ(syncer::THEMES, change_list[0].sync_data().GetDataType()); 385 EXPECT_EQ(syncer::THEMES, changes[0].sync_data().GetDataType());
393 386
394 const sync_pb::ThemeSpecifics& theme_specifics = 387 const sync_pb::ThemeSpecifics& theme_specifics =
395 change_list[0].sync_data().GetSpecifics().theme(); 388 changes[0].sync_data().GetSpecifics().theme();
396 EXPECT_TRUE(theme_specifics.use_custom_theme()); 389 EXPECT_TRUE(theme_specifics.use_custom_theme());
397 EXPECT_EQ(theme_extension_->id(), theme_specifics.custom_theme_id()); 390 EXPECT_EQ(theme_extension_->id(), theme_specifics.custom_theme_id());
398 EXPECT_EQ(theme_extension_->name(), theme_specifics.custom_theme_name()); 391 EXPECT_EQ(theme_extension_->name(), theme_specifics.custom_theme_name());
399 EXPECT_EQ( 392 EXPECT_EQ(
400 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(), 393 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(),
401 theme_specifics.custom_theme_update_url()); 394 theme_specifics.custom_theme_update_url());
402 } 395 }
403 396
404 TEST_F(ThemeSyncableServiceTest, GetAllSyncData) { 397 TEST_F(ThemeSyncableServiceTest, GetAllSyncData) {
405 // Set up theme service to use custom theme. 398 // Set up theme service to use custom theme.
(...skipping 12 matching lines...) Expand all
418 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(), 411 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(),
419 theme_specifics.custom_theme_update_url()); 412 theme_specifics.custom_theme_update_url());
420 } 413 }
421 414
422 TEST_F(ThemeSyncableServiceTest, ProcessSyncThemeChange) { 415 TEST_F(ThemeSyncableServiceTest, ProcessSyncThemeChange) {
423 // Set up theme service to use default theme. 416 // Set up theme service to use default theme.
424 fake_theme_service_->UseDefaultTheme(); 417 fake_theme_service_->UseDefaultTheme();
425 fake_theme_service_->MarkClean(); 418 fake_theme_service_->MarkClean();
426 419
427 // Start syncing. 420 // Start syncing.
428 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 421 syncer::SyncError error =
429 syncer::THEMES, MakeThemeDataList(sync_pb::ThemeSpecifics()), 422 theme_sync_service_->MergeDataAndStartSyncing(
430 fake_change_processor_.Pass(), 423 syncer::THEMES,
431 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 424 MakeThemeDataList(sync_pb::ThemeSpecifics()),
432 error(); 425 scoped_ptr<syncer::SyncChangeProcessor>(
426 new syncer::SyncChangeProcessorDelegator(
427 fake_change_processor_.get())),
428 scoped_ptr<syncer::SyncErrorFactory>(
429 new syncer::SyncErrorFactoryMock())).error();
433 EXPECT_FALSE(error.IsSet()) << error.message(); 430 EXPECT_FALSE(error.IsSet()) << error.message();
434 // Don't expect theme change initially because specifics are equal. 431 // Don't expect theme change initially because specifics are equal.
435 EXPECT_FALSE(fake_theme_service_->is_dirty()); 432 EXPECT_FALSE(fake_theme_service_->is_dirty());
436 433
437 // Change specifics to use custom theme and update. 434 // Change specifics to use custom theme and update.
438 sync_pb::ThemeSpecifics theme_specifics; 435 sync_pb::ThemeSpecifics theme_specifics;
439 theme_specifics.set_use_custom_theme(true); 436 theme_specifics.set_use_custom_theme(true);
440 theme_specifics.set_custom_theme_id(theme_extension_->id()); 437 theme_specifics.set_custom_theme_id(theme_extension_->id());
441 theme_specifics.set_custom_theme_name(kCustomThemeName); 438 theme_specifics.set_custom_theme_name(kCustomThemeName);
442 theme_specifics.set_custom_theme_name(kCustomThemeUrl); 439 theme_specifics.set_custom_theme_name(kCustomThemeUrl);
443 sync_pb::EntitySpecifics entity_specifics; 440 sync_pb::EntitySpecifics entity_specifics;
444 entity_specifics.mutable_theme()->CopyFrom(theme_specifics); 441 entity_specifics.mutable_theme()->CopyFrom(theme_specifics);
445 syncer::SyncChangeList change_list; 442 syncer::SyncChangeList change_list;
446 change_list.push_back(syncer::SyncChange( 443 change_list.push_back(syncer::SyncChange(
447 FROM_HERE, 444 FROM_HERE,
448 syncer::SyncChange::ACTION_UPDATE, 445 syncer::SyncChange::ACTION_UPDATE,
449 syncer::SyncData::CreateRemoteData( 446 syncer::SyncData::CreateRemoteData(
450 1, entity_specifics, base::Time()))); 447 1, entity_specifics, base::Time())));
451 error = theme_sync_service_->ProcessSyncChanges(FROM_HERE, change_list); 448 error = theme_sync_service_->ProcessSyncChanges(FROM_HERE, change_list);
452 EXPECT_FALSE(error.IsSet()) << error.message(); 449 EXPECT_FALSE(error.IsSet()) << error.message();
453 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get()); 450 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get());
454 } 451 }
455 452
456 TEST_F(ThemeSyncableServiceTest, OnThemeChangeByUser) { 453 TEST_F(ThemeSyncableServiceTest, OnThemeChangeByUser) {
457 syncer::SyncChangeList change_list;
458 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())->
459 SetChangeOutput(&change_list);
460
461 // Set up theme service to use default theme. 454 // Set up theme service to use default theme.
462 fake_theme_service_->UseDefaultTheme(); 455 fake_theme_service_->UseDefaultTheme();
463 456
464 // Start syncing. 457 // Start syncing.
465 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 458 syncer::SyncError error =
466 syncer::THEMES, MakeThemeDataList(sync_pb::ThemeSpecifics()), 459 theme_sync_service_->MergeDataAndStartSyncing(
467 fake_change_processor_.Pass(), 460 syncer::THEMES,
468 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 461 MakeThemeDataList(sync_pb::ThemeSpecifics()),
469 error(); 462 scoped_ptr<syncer::SyncChangeProcessor>(
463 new syncer::SyncChangeProcessorDelegator(
464 fake_change_processor_.get())),
465 scoped_ptr<syncer::SyncErrorFactory>(
466 new syncer::SyncErrorFactoryMock())).error();
470 EXPECT_FALSE(error.IsSet()) << error.message(); 467 EXPECT_FALSE(error.IsSet()) << error.message();
471 EXPECT_EQ(0u, change_list.size()); 468 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
469 EXPECT_EQ(0u, changes.size());
472 470
473 // Change current theme to custom theme and notify theme_sync_service_. 471 // Change current theme to custom theme and notify theme_sync_service_.
474 fake_theme_service_->SetTheme(theme_extension_.get()); 472 fake_theme_service_->SetTheme(theme_extension_.get());
475 theme_sync_service_->OnThemeChange(); 473 theme_sync_service_->OnThemeChange();
476 EXPECT_EQ(1u, change_list.size()); 474 EXPECT_EQ(1u, changes.size());
477 const sync_pb::ThemeSpecifics& change_specifics = 475 const sync_pb::ThemeSpecifics& change_specifics =
478 change_list[0].sync_data().GetSpecifics().theme(); 476 changes[0].sync_data().GetSpecifics().theme();
479 EXPECT_TRUE(change_specifics.use_custom_theme()); 477 EXPECT_TRUE(change_specifics.use_custom_theme());
480 EXPECT_EQ(theme_extension_->id(), change_specifics.custom_theme_id()); 478 EXPECT_EQ(theme_extension_->id(), change_specifics.custom_theme_id());
481 EXPECT_EQ(theme_extension_->name(), change_specifics.custom_theme_name()); 479 EXPECT_EQ(theme_extension_->name(), change_specifics.custom_theme_name());
482 EXPECT_EQ( 480 EXPECT_EQ(
483 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(), 481 extensions::ManifestURL::GetUpdateURL(theme_extension_.get()).spec(),
484 change_specifics.custom_theme_update_url()); 482 change_specifics.custom_theme_update_url());
485 } 483 }
486 484
487 TEST_F(ThemeSyncableServiceTest, StopSync) { 485 TEST_F(ThemeSyncableServiceTest, StopSync) {
488 syncer::SyncChangeList change_list;
489 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())->
490 SetChangeOutput(&change_list);
491
492 // Set up theme service to use default theme. 486 // Set up theme service to use default theme.
493 fake_theme_service_->UseDefaultTheme(); 487 fake_theme_service_->UseDefaultTheme();
494 488
495 // Start syncing. 489 // Start syncing.
496 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 490 syncer::SyncError error =
497 syncer::THEMES, MakeThemeDataList(sync_pb::ThemeSpecifics()), 491 theme_sync_service_->MergeDataAndStartSyncing(
498 fake_change_processor_.Pass(), 492 syncer::THEMES,
499 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 493 MakeThemeDataList(sync_pb::ThemeSpecifics()),
500 error(); 494 scoped_ptr<syncer::SyncChangeProcessor>(
495 new syncer::SyncChangeProcessorDelegator(
496 fake_change_processor_.get())),
497 scoped_ptr<syncer::SyncErrorFactory>(
498 new syncer::SyncErrorFactoryMock())).error();
501 EXPECT_FALSE(error.IsSet()) << error.message(); 499 EXPECT_FALSE(error.IsSet()) << error.message();
502 EXPECT_EQ(0u, change_list.size()); 500 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
501 EXPECT_EQ(0u, changes.size());
503 502
504 // Stop syncing. 503 // Stop syncing.
505 theme_sync_service_->StopSyncing(syncer::THEMES); 504 theme_sync_service_->StopSyncing(syncer::THEMES);
506 505
507 // Change current theme to custom theme and notify theme_sync_service_. 506 // Change current theme to custom theme and notify theme_sync_service_.
508 // No change is output because sync has stopped. 507 // No change is output because sync has stopped.
509 fake_theme_service_->SetTheme(theme_extension_.get()); 508 fake_theme_service_->SetTheme(theme_extension_.get());
510 theme_sync_service_->OnThemeChange(); 509 theme_sync_service_->OnThemeChange();
511 EXPECT_EQ(0u, change_list.size()); 510 EXPECT_EQ(0u, changes.size());
512 511
513 // ProcessSyncChanges() should return error when sync has stopped. 512 // ProcessSyncChanges() should return error when sync has stopped.
514 error = theme_sync_service_->ProcessSyncChanges(FROM_HERE, change_list); 513 error = theme_sync_service_->ProcessSyncChanges(FROM_HERE, changes);
515 EXPECT_TRUE(error.IsSet()); 514 EXPECT_TRUE(error.IsSet());
516 EXPECT_EQ(syncer::THEMES, error.model_type()); 515 EXPECT_EQ(syncer::THEMES, error.model_type());
517 EXPECT_EQ("datatype error was encountered: Theme syncable service is not " 516 EXPECT_EQ("datatype error was encountered: Theme syncable service is not "
518 "started.", 517 "started.",
519 error.message()); 518 error.message());
520 } 519 }
521 520
522 TEST_F(ThemeSyncableServiceTest, RestoreSystemThemeBitWhenChangeToCustomTheme) { 521 TEST_F(ThemeSyncableServiceTest, RestoreSystemThemeBitWhenChangeToCustomTheme) {
523 syncer::SyncChangeList change_list;
524 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())->
525 SetChangeOutput(&change_list);
526
527 // Initialize to use system theme. 522 // Initialize to use system theme.
528 fake_theme_service_->UseDefaultTheme(); 523 fake_theme_service_->UseDefaultTheme();
529 sync_pb::ThemeSpecifics theme_specifics; 524 sync_pb::ThemeSpecifics theme_specifics;
530 theme_specifics.set_use_system_theme_by_default(true); 525 theme_specifics.set_use_system_theme_by_default(true);
531 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 526 syncer::SyncError error =
532 syncer::THEMES, MakeThemeDataList(theme_specifics), 527 theme_sync_service_->MergeDataAndStartSyncing(
533 fake_change_processor_.Pass(), 528 syncer::THEMES,
534 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 529 MakeThemeDataList(theme_specifics),
535 error(); 530 scoped_ptr<syncer::SyncChangeProcessor>(
531 new syncer::SyncChangeProcessorDelegator(
532 fake_change_processor_.get())),
533 scoped_ptr<syncer::SyncErrorFactory>(
534 new syncer::SyncErrorFactoryMock())).error();
536 535
537 // Change to custom theme and notify theme_sync_service_. 536 // Change to custom theme and notify theme_sync_service_.
538 // use_system_theme_by_default bit should be preserved. 537 // use_system_theme_by_default bit should be preserved.
539 fake_theme_service_->SetTheme(theme_extension_.get()); 538 fake_theme_service_->SetTheme(theme_extension_.get());
540 theme_sync_service_->OnThemeChange(); 539 theme_sync_service_->OnThemeChange();
541 EXPECT_EQ(1u, change_list.size()); 540 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
541 EXPECT_EQ(1u, changes.size());
542 const sync_pb::ThemeSpecifics& change_specifics = 542 const sync_pb::ThemeSpecifics& change_specifics =
543 change_list[0].sync_data().GetSpecifics().theme(); 543 changes[0].sync_data().GetSpecifics().theme();
544 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); 544 EXPECT_TRUE(change_specifics.use_system_theme_by_default());
545 } 545 }
546 546
547 #if defined(TOOLKIT_GTK) 547 #if defined(TOOLKIT_GTK)
548 TEST_F(ThemeSyncableServiceTest, 548 TEST_F(ThemeSyncableServiceTest,
549 GtkUpdateSystemThemeBitWhenChangeBetweenSystemAndDefault) { 549 GtkUpdateSystemThemeBitWhenChangeBetweenSystemAndDefault) {
550 syncer::SyncChangeList change_list;
551 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())->
552 SetChangeOutput(&change_list);
553
554 // Initialize to use native theme. 550 // Initialize to use native theme.
555 fake_theme_service_->SetNativeTheme(); 551 fake_theme_service_->SetNativeTheme();
556 fake_theme_service_->MarkClean(); 552 fake_theme_service_->MarkClean();
557 sync_pb::ThemeSpecifics theme_specifics; 553 sync_pb::ThemeSpecifics theme_specifics;
558 theme_specifics.set_use_system_theme_by_default(true); 554 theme_specifics.set_use_system_theme_by_default(true);
559 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 555 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing(
560 syncer::THEMES, MakeThemeDataList(theme_specifics), 556 syncer::THEMES, MakeThemeDataList(theme_specifics),
561 fake_change_processor_.Pass(), 557 fake_change_processor_.Pass(),
562 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 558 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())).
563 error(); 559 error();
564 EXPECT_FALSE(fake_theme_service_->is_dirty()); 560 EXPECT_FALSE(fake_theme_service_->is_dirty());
565 561
566 // Change to default theme and notify theme_sync_service_. 562 // Change to default theme and notify theme_sync_service_.
567 // use_system_theme_by_default bit should be false. 563 // use_system_theme_by_default bit should be false.
568 fake_theme_service_->UseDefaultTheme(); 564 fake_theme_service_->UseDefaultTheme();
569 theme_sync_service_->OnThemeChange(); 565 theme_sync_service_->OnThemeChange();
570 EXPECT_EQ(1u, change_list.size()); 566 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
571 EXPECT_FALSE(change_list[0].sync_data().GetSpecifics().theme() 567 EXPECT_EQ(1u, changes.size());
572 .use_system_theme_by_default()); 568 EXPECT_FALSE(changes[0]
569 .sync_data()
570 .GetSpecifics()
571 .theme()
572 .use_system_theme_by_default());
573 573
574 // Change to native theme and notify theme_sync_service_. 574 // Change to native theme and notify theme_sync_service_.
575 // use_system_theme_by_default bit should be true. 575 // use_system_theme_by_default bit should be true.
576 change_list.clear(); 576 changes.clear();
577 fake_theme_service_->SetNativeTheme(); 577 fake_theme_service_->SetNativeTheme();
578 theme_sync_service_->OnThemeChange(); 578 theme_sync_service_->OnThemeChange();
579 EXPECT_EQ(1u, change_list.size()); 579 EXPECT_EQ(1u, changes.size());
580 EXPECT_TRUE(change_list[0].sync_data().GetSpecifics().theme() 580 EXPECT_TRUE(changes[0]
581 .use_system_theme_by_default()); 581 .sync_data()
582 .GetSpecifics()
583 .theme()
584 .use_system_theme_by_default());
582 } 585 }
583 #endif 586 #endif
584 587
585 #ifndef TOOLKIT_GTK 588 #ifndef TOOLKIT_GTK
586 TEST_F(ThemeSyncableServiceTest, 589 TEST_F(ThemeSyncableServiceTest,
587 NonGtkPreserveSystemThemeBitWhenChangeToDefaultTheme) { 590 NonGtkPreserveSystemThemeBitWhenChangeToDefaultTheme) {
588 syncer::SyncChangeList change_list;
589 static_cast<FakeSyncChangeProcessor*>(fake_change_processor_.get())->
590 SetChangeOutput(&change_list);
591
592 // Set up theme service to use default theme. 591 // Set up theme service to use default theme.
593 fake_theme_service_->UseDefaultTheme(); 592 fake_theme_service_->UseDefaultTheme();
594 593
595 // Initialize to use custom theme with use_system_theme_by_default set true. 594 // Initialize to use custom theme with use_system_theme_by_default set true.
596 sync_pb::ThemeSpecifics theme_specifics; 595 sync_pb::ThemeSpecifics theme_specifics;
597 theme_specifics.set_use_custom_theme(true); 596 theme_specifics.set_use_custom_theme(true);
598 theme_specifics.set_custom_theme_id(theme_extension_->id()); 597 theme_specifics.set_custom_theme_id(theme_extension_->id());
599 theme_specifics.set_custom_theme_name(kCustomThemeName); 598 theme_specifics.set_custom_theme_name(kCustomThemeName);
600 theme_specifics.set_custom_theme_name(kCustomThemeUrl); 599 theme_specifics.set_custom_theme_name(kCustomThemeUrl);
601 theme_specifics.set_use_system_theme_by_default(true); 600 theme_specifics.set_use_system_theme_by_default(true);
602 syncer::SyncError error = theme_sync_service_->MergeDataAndStartSyncing( 601 syncer::SyncError error =
603 syncer::THEMES, MakeThemeDataList(theme_specifics), 602 theme_sync_service_->MergeDataAndStartSyncing(
604 fake_change_processor_.Pass(), 603 syncer::THEMES,
605 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())). 604 MakeThemeDataList(theme_specifics),
606 error(); 605 scoped_ptr<syncer::SyncChangeProcessor>(
606 new syncer::SyncChangeProcessorDelegator(
607 fake_change_processor_.get())),
608 scoped_ptr<syncer::SyncErrorFactory>(
609 new syncer::SyncErrorFactoryMock())).error();
607 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get()); 610 EXPECT_EQ(fake_theme_service_->theme_extension(), theme_extension_.get());
608 611
609 // Change to default theme and notify theme_sync_service_. 612 // Change to default theme and notify theme_sync_service_.
610 // use_system_theme_by_default bit should be preserved. 613 // use_system_theme_by_default bit should be preserved.
611 fake_theme_service_->UseDefaultTheme(); 614 fake_theme_service_->UseDefaultTheme();
612 theme_sync_service_->OnThemeChange(); 615 theme_sync_service_->OnThemeChange();
613 EXPECT_EQ(1u, change_list.size()); 616 const syncer::SyncChangeList& changes = fake_change_processor_->changes();
617 EXPECT_EQ(1u, changes.size());
614 const sync_pb::ThemeSpecifics& change_specifics = 618 const sync_pb::ThemeSpecifics& change_specifics =
615 change_list[0].sync_data().GetSpecifics().theme(); 619 changes[0].sync_data().GetSpecifics().theme();
616 EXPECT_FALSE(change_specifics.use_custom_theme()); 620 EXPECT_FALSE(change_specifics.use_custom_theme());
617 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); 621 EXPECT_TRUE(change_specifics.use_system_theme_by_default());
618 } 622 }
619 #endif 623 #endif
620 624
621 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) { 625 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) {
622 // Set up theme service to use custom theme that was installed by policy. 626 // Set up theme service to use custom theme that was installed by policy.
623 fake_theme_service_->SetTheme(theme_extension_.get()); 627 fake_theme_service_->SetTheme(theme_extension_.get());
624 628
625 syncer::SyncDataList data_list = 629 syncer::SyncDataList data_list =
626 theme_sync_service_->GetAllSyncData(syncer::THEMES); 630 theme_sync_service_->GetAllSyncData(syncer::THEMES);
627 631
628 ASSERT_EQ(0u, data_list.size()); 632 ASSERT_EQ(0u, data_list.size());
629 } 633 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698