Chromium Code Reviews| OLD | NEW |
|---|---|
| 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" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 FILE_PATH_LITERAL("c:\\foo"); | 52 FILE_PATH_LITERAL("c:\\foo"); |
| 53 #elif defined(OS_POSIX) | 53 #elif defined(OS_POSIX) |
| 54 const base::FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/oo"); | 54 const base::FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/oo"); |
| 55 #endif | 55 #endif |
| 56 | 56 |
| 57 class FakeThemeService : public ThemeService { | 57 class FakeThemeService : public ThemeService { |
| 58 public: | 58 public: |
| 59 FakeThemeService() : | 59 FakeThemeService() : |
| 60 using_system_theme_(false), | 60 using_system_theme_(false), |
| 61 using_default_theme_(false), | 61 using_default_theme_(false), |
| 62 distinct_from_default_theme_(false), | |
| 62 theme_extension_(NULL), | 63 theme_extension_(NULL), |
| 63 is_dirty_(false) {} | 64 is_dirty_(false) {} |
| 64 | 65 |
| 65 // ThemeService implementation | 66 // ThemeService implementation |
| 66 void SetTheme(const extensions::Extension* extension) override { | 67 void SetTheme(const extensions::Extension* extension) override { |
| 67 is_dirty_ = true; | 68 is_dirty_ = true; |
| 68 theme_extension_ = extension; | 69 theme_extension_ = extension; |
| 69 using_system_theme_ = false; | 70 using_system_theme_ = false; |
| 70 using_default_theme_ = false; | 71 using_default_theme_ = false; |
| 71 } | 72 } |
| 72 | 73 |
| 73 void UseDefaultTheme() override { | 74 void UseDefaultTheme() override { |
| 74 is_dirty_ = true; | 75 is_dirty_ = true; |
| 75 using_default_theme_ = true; | 76 using_default_theme_ = true; |
| 76 using_system_theme_ = false; | 77 using_system_theme_ = false; |
| 77 theme_extension_ = NULL; | 78 theme_extension_ = NULL; |
| 78 } | 79 } |
| 79 | 80 |
| 80 void UseSystemTheme() override { | 81 void UseSystemTheme() override { |
| 81 is_dirty_ = true; | 82 is_dirty_ = true; |
| 82 using_system_theme_ = true; | 83 using_system_theme_ = true; |
| 83 using_default_theme_ = false; | 84 using_default_theme_ = false; |
| 84 theme_extension_ = NULL; | 85 theme_extension_ = NULL; |
| 85 } | 86 } |
| 86 | 87 |
| 88 bool IsSystemThemeDistinctFromDefaultTheme() const override { | |
| 89 return distinct_from_default_theme_; | |
| 90 } | |
|
pkotwicz
2015/10/28 15:02:11
Nit: New line
tfarina
2015/10/28 18:55:13
Done.
| |
| 91 void set_distinct_from_default_theme(bool is_distinct) { | |
| 92 distinct_from_default_theme_ = is_distinct; | |
| 93 } | |
| 94 | |
| 87 bool UsingDefaultTheme() const override { return using_default_theme_; } | 95 bool UsingDefaultTheme() const override { return using_default_theme_; } |
| 88 | 96 |
| 89 bool UsingSystemTheme() const override { return using_system_theme_; } | 97 bool UsingSystemTheme() const override { return using_system_theme_; } |
| 90 | 98 |
| 91 string GetThemeID() const override { | 99 string GetThemeID() const override { |
| 92 if (theme_extension_.get()) | 100 if (theme_extension_.get()) |
| 93 return theme_extension_->id(); | 101 return theme_extension_->id(); |
| 94 else | 102 else |
| 95 return std::string(); | 103 return std::string(); |
| 96 } | 104 } |
| 97 | 105 |
| 98 const extensions::Extension* theme_extension() const { | 106 const extensions::Extension* theme_extension() const { |
| 99 return theme_extension_.get(); | 107 return theme_extension_.get(); |
| 100 } | 108 } |
| 101 | 109 |
| 102 bool is_dirty() const { | 110 bool is_dirty() const { |
| 103 return is_dirty_; | 111 return is_dirty_; |
| 104 } | 112 } |
| 105 | 113 |
| 106 void MarkClean() { | 114 void MarkClean() { |
| 107 is_dirty_ = false; | 115 is_dirty_ = false; |
| 108 } | 116 } |
| 109 | 117 |
| 110 private: | 118 private: |
| 111 bool using_system_theme_; | 119 bool using_system_theme_; |
| 112 bool using_default_theme_; | 120 bool using_default_theme_; |
| 121 bool distinct_from_default_theme_; | |
| 113 scoped_refptr<const extensions::Extension> theme_extension_; | 122 scoped_refptr<const extensions::Extension> theme_extension_; |
| 114 bool is_dirty_; | 123 bool is_dirty_; |
| 115 }; | 124 }; |
| 116 | 125 |
| 117 scoped_ptr<KeyedService> BuildMockThemeService( | 126 scoped_ptr<KeyedService> BuildMockThemeService( |
| 118 content::BrowserContext* profile) { | 127 content::BrowserContext* profile) { |
| 119 return make_scoped_ptr(new FakeThemeService); | 128 return make_scoped_ptr(new FakeThemeService); |
| 120 } | 129 } |
| 121 | 130 |
| 122 scoped_refptr<extensions::Extension> MakeThemeExtension( | 131 scoped_refptr<extensions::Extension> MakeThemeExtension( |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 561 // use_system_theme_by_default bit should be preserved. | 570 // use_system_theme_by_default bit should be preserved. |
| 562 fake_theme_service_->SetTheme(theme_extension_.get()); | 571 fake_theme_service_->SetTheme(theme_extension_.get()); |
| 563 theme_sync_service_->OnThemeChange(); | 572 theme_sync_service_->OnThemeChange(); |
| 564 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); | 573 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); |
| 565 EXPECT_EQ(1u, changes.size()); | 574 EXPECT_EQ(1u, changes.size()); |
| 566 const sync_pb::ThemeSpecifics& change_specifics = | 575 const sync_pb::ThemeSpecifics& change_specifics = |
| 567 changes[0].sync_data().GetSpecifics().theme(); | 576 changes[0].sync_data().GetSpecifics().theme(); |
| 568 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); | 577 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); |
| 569 } | 578 } |
| 570 | 579 |
| 571 #if defined(TOOLKIT_GTK) | 580 TEST_F(ThemeSyncableServiceTest, DistinctSystemTheme) { |
| 572 TEST_F(ThemeSyncableServiceTest, | 581 fake_theme_service_->set_distinct_from_default_theme(true); |
| 573 GtkUpdateSystemThemeBitWhenChangeBetweenSystemAndDefault) { | 582 |
| 574 // Initialize to use native theme. | 583 // Initialize to use native theme. |
| 575 fake_theme_service_->UseSystemTheme(); | 584 fake_theme_service_->UseSystemTheme(); |
| 576 fake_theme_service_->MarkClean(); | 585 fake_theme_service_->MarkClean(); |
| 577 sync_pb::ThemeSpecifics theme_specifics; | 586 sync_pb::ThemeSpecifics theme_specifics; |
| 578 theme_specifics.set_use_system_theme_by_default(true); | 587 theme_specifics.set_use_system_theme_by_default(true); |
| 579 syncer::SyncError error = | 588 syncer::SyncError error = |
| 580 theme_sync_service_ | 589 theme_sync_service_ |
| 581 ->MergeDataAndStartSyncing( | 590 ->MergeDataAndStartSyncing( |
| 582 syncer::THEMES, | 591 syncer::THEMES, |
| 583 MakeThemeDataList(theme_specifics), | 592 MakeThemeDataList(theme_specifics), |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 606 changes.clear(); | 615 changes.clear(); |
| 607 fake_theme_service_->UseSystemTheme(); | 616 fake_theme_service_->UseSystemTheme(); |
| 608 theme_sync_service_->OnThemeChange(); | 617 theme_sync_service_->OnThemeChange(); |
| 609 EXPECT_EQ(1u, changes.size()); | 618 EXPECT_EQ(1u, changes.size()); |
| 610 EXPECT_TRUE(changes[0] | 619 EXPECT_TRUE(changes[0] |
| 611 .sync_data() | 620 .sync_data() |
| 612 .GetSpecifics() | 621 .GetSpecifics() |
| 613 .theme() | 622 .theme() |
| 614 .use_system_theme_by_default()); | 623 .use_system_theme_by_default()); |
| 615 } | 624 } |
| 616 #endif | |
| 617 | 625 |
| 618 #ifndef TOOLKIT_GTK | 626 TEST_F(ThemeSyncableServiceTest, SystemThemeSameAsDefaultTheme) { |
| 619 TEST_F(ThemeSyncableServiceTest, | 627 fake_theme_service_->set_distinct_from_default_theme(false); |
| 620 NonGtkPreserveSystemThemeBitWhenChangeToDefaultTheme) { | 628 |
| 621 // Set up theme service to use default theme. | 629 // Set up theme service to use default theme. |
| 622 fake_theme_service_->UseDefaultTheme(); | 630 fake_theme_service_->UseDefaultTheme(); |
| 623 | 631 |
| 624 // Initialize to use custom theme with use_system_theme_by_default set true. | 632 // Initialize to use custom theme with use_system_theme_by_default set true. |
| 625 sync_pb::ThemeSpecifics theme_specifics; | 633 sync_pb::ThemeSpecifics theme_specifics; |
| 626 theme_specifics.set_use_custom_theme(true); | 634 theme_specifics.set_use_custom_theme(true); |
| 627 theme_specifics.set_custom_theme_id(theme_extension_->id()); | 635 theme_specifics.set_custom_theme_id(theme_extension_->id()); |
| 628 theme_specifics.set_custom_theme_name(kCustomThemeName); | 636 theme_specifics.set_custom_theme_name(kCustomThemeName); |
| 629 theme_specifics.set_custom_theme_name(kCustomThemeUrl); | 637 theme_specifics.set_custom_theme_name(kCustomThemeUrl); |
| 630 theme_specifics.set_use_system_theme_by_default(true); | 638 theme_specifics.set_use_system_theme_by_default(true); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 645 // use_system_theme_by_default bit should be preserved. | 653 // use_system_theme_by_default bit should be preserved. |
| 646 fake_theme_service_->UseDefaultTheme(); | 654 fake_theme_service_->UseDefaultTheme(); |
| 647 theme_sync_service_->OnThemeChange(); | 655 theme_sync_service_->OnThemeChange(); |
| 648 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); | 656 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); |
| 649 EXPECT_EQ(1u, changes.size()); | 657 EXPECT_EQ(1u, changes.size()); |
| 650 const sync_pb::ThemeSpecifics& change_specifics = | 658 const sync_pb::ThemeSpecifics& change_specifics = |
| 651 changes[0].sync_data().GetSpecifics().theme(); | 659 changes[0].sync_data().GetSpecifics().theme(); |
| 652 EXPECT_FALSE(change_specifics.use_custom_theme()); | 660 EXPECT_FALSE(change_specifics.use_custom_theme()); |
| 653 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); | 661 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); |
| 654 } | 662 } |
| 655 #endif | |
| 656 | 663 |
| 657 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) { | 664 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) { |
| 658 // Set up theme service to use custom theme that was installed by policy. | 665 // Set up theme service to use custom theme that was installed by policy. |
| 659 fake_theme_service_->SetTheme(theme_extension_.get()); | 666 fake_theme_service_->SetTheme(theme_extension_.get()); |
| 660 | 667 |
| 661 syncer::SyncDataList data_list = | 668 syncer::SyncDataList data_list = |
| 662 theme_sync_service_->GetAllSyncData(syncer::THEMES); | 669 theme_sync_service_->GetAllSyncData(syncer::THEMES); |
| 663 | 670 |
| 664 ASSERT_EQ(0u, data_list.size()); | 671 ASSERT_EQ(0u, data_list.size()); |
| 665 } | 672 } |
| OLD | NEW |