| 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 } |
| 91 |
| 92 void set_distinct_from_default_theme(bool is_distinct) { |
| 93 distinct_from_default_theme_ = is_distinct; |
| 94 } |
| 95 |
| 87 bool UsingDefaultTheme() const override { return using_default_theme_; } | 96 bool UsingDefaultTheme() const override { return using_default_theme_; } |
| 88 | 97 |
| 89 bool UsingSystemTheme() const override { return using_system_theme_; } | 98 bool UsingSystemTheme() const override { return using_system_theme_; } |
| 90 | 99 |
| 91 string GetThemeID() const override { | 100 string GetThemeID() const override { |
| 92 if (theme_extension_.get()) | 101 if (theme_extension_.get()) |
| 93 return theme_extension_->id(); | 102 return theme_extension_->id(); |
| 94 else | 103 else |
| 95 return std::string(); | 104 return std::string(); |
| 96 } | 105 } |
| 97 | 106 |
| 98 const extensions::Extension* theme_extension() const { | 107 const extensions::Extension* theme_extension() const { |
| 99 return theme_extension_.get(); | 108 return theme_extension_.get(); |
| 100 } | 109 } |
| 101 | 110 |
| 102 bool is_dirty() const { | 111 bool is_dirty() const { |
| 103 return is_dirty_; | 112 return is_dirty_; |
| 104 } | 113 } |
| 105 | 114 |
| 106 void MarkClean() { | 115 void MarkClean() { |
| 107 is_dirty_ = false; | 116 is_dirty_ = false; |
| 108 } | 117 } |
| 109 | 118 |
| 110 private: | 119 private: |
| 111 bool using_system_theme_; | 120 bool using_system_theme_; |
| 112 bool using_default_theme_; | 121 bool using_default_theme_; |
| 122 bool distinct_from_default_theme_; |
| 113 scoped_refptr<const extensions::Extension> theme_extension_; | 123 scoped_refptr<const extensions::Extension> theme_extension_; |
| 114 bool is_dirty_; | 124 bool is_dirty_; |
| 115 }; | 125 }; |
| 116 | 126 |
| 117 scoped_ptr<KeyedService> BuildMockThemeService( | 127 scoped_ptr<KeyedService> BuildMockThemeService( |
| 118 content::BrowserContext* profile) { | 128 content::BrowserContext* profile) { |
| 119 return make_scoped_ptr(new FakeThemeService); | 129 return make_scoped_ptr(new FakeThemeService); |
| 120 } | 130 } |
| 121 | 131 |
| 122 scoped_refptr<extensions::Extension> MakeThemeExtension( | 132 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. | 571 // use_system_theme_by_default bit should be preserved. |
| 562 fake_theme_service_->SetTheme(theme_extension_.get()); | 572 fake_theme_service_->SetTheme(theme_extension_.get()); |
| 563 theme_sync_service_->OnThemeChange(); | 573 theme_sync_service_->OnThemeChange(); |
| 564 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); | 574 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); |
| 565 EXPECT_EQ(1u, changes.size()); | 575 EXPECT_EQ(1u, changes.size()); |
| 566 const sync_pb::ThemeSpecifics& change_specifics = | 576 const sync_pb::ThemeSpecifics& change_specifics = |
| 567 changes[0].sync_data().GetSpecifics().theme(); | 577 changes[0].sync_data().GetSpecifics().theme(); |
| 568 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); | 578 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); |
| 569 } | 579 } |
| 570 | 580 |
| 571 #if defined(TOOLKIT_GTK) | 581 TEST_F(ThemeSyncableServiceTest, DistinctSystemTheme) { |
| 572 TEST_F(ThemeSyncableServiceTest, | 582 fake_theme_service_->set_distinct_from_default_theme(true); |
| 573 GtkUpdateSystemThemeBitWhenChangeBetweenSystemAndDefault) { | 583 |
| 574 // Initialize to use native theme. | 584 // Initialize to use native theme. |
| 575 fake_theme_service_->UseSystemTheme(); | 585 fake_theme_service_->UseSystemTheme(); |
| 576 fake_theme_service_->MarkClean(); | 586 fake_theme_service_->MarkClean(); |
| 577 sync_pb::ThemeSpecifics theme_specifics; | 587 sync_pb::ThemeSpecifics theme_specifics; |
| 578 theme_specifics.set_use_system_theme_by_default(true); | 588 theme_specifics.set_use_system_theme_by_default(true); |
| 579 syncer::SyncError error = | 589 syncer::SyncError error = |
| 580 theme_sync_service_ | 590 theme_sync_service_ |
| 581 ->MergeDataAndStartSyncing( | 591 ->MergeDataAndStartSyncing( |
| 582 syncer::THEMES, | 592 syncer::THEMES, |
| 583 MakeThemeDataList(theme_specifics), | 593 MakeThemeDataList(theme_specifics), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 606 changes.clear(); | 616 changes.clear(); |
| 607 fake_theme_service_->UseSystemTheme(); | 617 fake_theme_service_->UseSystemTheme(); |
| 608 theme_sync_service_->OnThemeChange(); | 618 theme_sync_service_->OnThemeChange(); |
| 609 EXPECT_EQ(1u, changes.size()); | 619 EXPECT_EQ(1u, changes.size()); |
| 610 EXPECT_TRUE(changes[0] | 620 EXPECT_TRUE(changes[0] |
| 611 .sync_data() | 621 .sync_data() |
| 612 .GetSpecifics() | 622 .GetSpecifics() |
| 613 .theme() | 623 .theme() |
| 614 .use_system_theme_by_default()); | 624 .use_system_theme_by_default()); |
| 615 } | 625 } |
| 616 #endif | |
| 617 | 626 |
| 618 #ifndef TOOLKIT_GTK | 627 TEST_F(ThemeSyncableServiceTest, SystemThemeSameAsDefaultTheme) { |
| 619 TEST_F(ThemeSyncableServiceTest, | 628 fake_theme_service_->set_distinct_from_default_theme(false); |
| 620 NonGtkPreserveSystemThemeBitWhenChangeToDefaultTheme) { | 629 |
| 621 // Set up theme service to use default theme. | 630 // Set up theme service to use default theme. |
| 622 fake_theme_service_->UseDefaultTheme(); | 631 fake_theme_service_->UseDefaultTheme(); |
| 623 | 632 |
| 624 // Initialize to use custom theme with use_system_theme_by_default set true. | 633 // Initialize to use custom theme with use_system_theme_by_default set true. |
| 625 sync_pb::ThemeSpecifics theme_specifics; | 634 sync_pb::ThemeSpecifics theme_specifics; |
| 626 theme_specifics.set_use_custom_theme(true); | 635 theme_specifics.set_use_custom_theme(true); |
| 627 theme_specifics.set_custom_theme_id(theme_extension_->id()); | 636 theme_specifics.set_custom_theme_id(theme_extension_->id()); |
| 628 theme_specifics.set_custom_theme_name(kCustomThemeName); | 637 theme_specifics.set_custom_theme_name(kCustomThemeName); |
| 629 theme_specifics.set_custom_theme_name(kCustomThemeUrl); | 638 theme_specifics.set_custom_theme_name(kCustomThemeUrl); |
| 630 theme_specifics.set_use_system_theme_by_default(true); | 639 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. | 654 // use_system_theme_by_default bit should be preserved. |
| 646 fake_theme_service_->UseDefaultTheme(); | 655 fake_theme_service_->UseDefaultTheme(); |
| 647 theme_sync_service_->OnThemeChange(); | 656 theme_sync_service_->OnThemeChange(); |
| 648 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); | 657 const syncer::SyncChangeList& changes = fake_change_processor_->changes(); |
| 649 EXPECT_EQ(1u, changes.size()); | 658 EXPECT_EQ(1u, changes.size()); |
| 650 const sync_pb::ThemeSpecifics& change_specifics = | 659 const sync_pb::ThemeSpecifics& change_specifics = |
| 651 changes[0].sync_data().GetSpecifics().theme(); | 660 changes[0].sync_data().GetSpecifics().theme(); |
| 652 EXPECT_FALSE(change_specifics.use_custom_theme()); | 661 EXPECT_FALSE(change_specifics.use_custom_theme()); |
| 653 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); | 662 EXPECT_TRUE(change_specifics.use_system_theme_by_default()); |
| 654 } | 663 } |
| 655 #endif | |
| 656 | 664 |
| 657 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) { | 665 TEST_F(PolicyInstalledThemeTest, InstallThemeByPolicy) { |
| 658 // Set up theme service to use custom theme that was installed by policy. | 666 // Set up theme service to use custom theme that was installed by policy. |
| 659 fake_theme_service_->SetTheme(theme_extension_.get()); | 667 fake_theme_service_->SetTheme(theme_extension_.get()); |
| 660 | 668 |
| 661 syncer::SyncDataList data_list = | 669 syncer::SyncDataList data_list = |
| 662 theme_sync_service_->GetAllSyncData(syncer::THEMES); | 670 theme_sync_service_->GetAllSyncData(syncer::THEMES); |
| 663 | 671 |
| 664 ASSERT_EQ(0u, data_list.size()); | 672 ASSERT_EQ(0u, data_list.size()); |
| 665 } | 673 } |
| OLD | NEW |