| 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_service.h" | 5 #include "chrome/browser/themes/theme_service.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
| 10 #include "chrome/browser/extensions/extension_service_unittest.h" | 10 #include "chrome/browser/extensions/extension_service_unittest.h" |
| 11 #include "chrome/browser/extensions/unpacked_installer.h" | 11 #include "chrome/browser/extensions/unpacked_installer.h" |
| 12 #include "chrome/browser/managed_mode/managed_user_service.h" | 12 #include "chrome/browser/managed_mode/managed_user_service.h" |
| 13 #include "chrome/browser/managed_mode/managed_user_service_factory.h" | 13 #include "chrome/browser/managed_mode/managed_user_service_factory.h" |
| 14 #include "chrome/browser/themes/custom_theme_supplier.h" | 14 #include "chrome/browser/themes/custom_theme_supplier.h" |
| 15 #include "chrome/browser/themes/theme_service_factory.h" | 15 #include "chrome/browser/themes/theme_service_factory.h" |
| 16 #include "chrome/common/chrome_paths.h" | 16 #include "chrome/common/chrome_paths.h" |
| 17 #include "chrome/common/extensions/extension.h" | 17 #include "chrome/common/extensions/extension.h" |
| 18 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
| 19 #include "chrome/test/base/testing_browser_process.h" | 19 #include "chrome/test/base/testing_browser_process.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 20 #include "chrome/test/base/testing_profile.h" |
| 21 #include "chrome/test/base/testing_profile_manager.h" | 21 #include "chrome/test/base/testing_profile_manager.h" |
| 22 #include "content/public/test/test_utils.h" | 22 #include "content/public/test/test_utils.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 24 |
| 25 namespace theme_service_internal { | 25 namespace theme_service_internal { |
| 26 | 26 |
| 27 class ThemeServiceTest : public ExtensionServiceTestBase { | 27 class ThemeServiceTest : public ExtensionServiceTestBase { |
| 28 public: | 28 public: |
| 29 ThemeServiceTest() { | 29 ThemeServiceTest() : is_managed_(false), |
| 30 manager_.reset( | 30 manager_(TestingBrowserProcess::GetGlobal()) {} |
| 31 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | |
| 32 } | |
| 33 virtual ~ThemeServiceTest() {} | 31 virtual ~ThemeServiceTest() {} |
| 34 | 32 |
| 35 // Moves a minimal theme to |temp_dir_path| and unpacks it from that | 33 // Moves a minimal theme to |temp_dir_path| and unpacks it from that |
| 36 // directory. | 34 // directory. |
| 37 std::string LoadUnpackedThemeAt(const base::FilePath& temp_dir) { | 35 std::string LoadUnpackedThemeAt(const base::FilePath& temp_dir) { |
| 38 base::FilePath dst_manifest_path = temp_dir.AppendASCII("manifest.json"); | 36 base::FilePath dst_manifest_path = temp_dir.AppendASCII("manifest.json"); |
| 39 base::FilePath test_data_dir; | 37 base::FilePath test_data_dir; |
| 40 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); | 38 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
| 41 base::FilePath src_manifest_path = | 39 base::FilePath src_manifest_path = |
| 42 test_data_dir.AppendASCII("extensions/theme_minimal/manifest.json"); | 40 test_data_dir.AppendASCII("extensions/theme_minimal/manifest.json"); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 content::Source<Profile>(profile_.get())); | 72 content::Source<Profile>(profile_.get())); |
| 75 installer->Load(path); | 73 installer->Load(path); |
| 76 observer.Wait(); | 74 observer.Wait(); |
| 77 | 75 |
| 78 // Let the ThemeService finish creating the theme pack. | 76 // Let the ThemeService finish creating the theme pack. |
| 79 base::MessageLoop::current()->RunUntilIdle(); | 77 base::MessageLoop::current()->RunUntilIdle(); |
| 80 } | 78 } |
| 81 | 79 |
| 82 virtual void SetUp() { | 80 virtual void SetUp() { |
| 83 ExtensionServiceTestBase::SetUp(); | 81 ExtensionServiceTestBase::SetUp(); |
| 84 InitializeEmptyExtensionService(); | 82 ExtensionServiceTestBase::ExtensionServiceInitParams params; |
| 83 params.profile_is_managed = is_managed_; |
| 84 InitializeExtensionServiceParams(¶ms); |
| 85 InitializeExtensionService(params); |
| 85 service_->Init(); | 86 service_->Init(); |
| 86 bool success = manager_->SetUp(); | 87 ASSERT_TRUE(manager_.SetUp()); |
| 87 ASSERT_TRUE(success); | |
| 88 } | 88 } |
| 89 | 89 |
| 90 const CustomThemeSupplier* get_theme_supplier(ThemeService* theme_service) { | 90 const CustomThemeSupplier* get_theme_supplier(ThemeService* theme_service) { |
| 91 return theme_service->get_theme_supplier(); | 91 return theme_service->get_theme_supplier(); |
| 92 } | 92 } |
| 93 | 93 |
| 94 TestingProfileManager* manager() { | 94 TestingProfileManager* manager() { |
| 95 return manager_.get(); | 95 return &manager_; |
| 96 } | 96 } |
| 97 | 97 |
| 98 protected: |
| 99 bool is_managed_; |
| 100 |
| 98 private: | 101 private: |
| 99 scoped_ptr<TestingProfileManager> manager_; | 102 TestingProfileManager manager_; |
| 103 }; |
| 104 |
| 105 class ThemeServiceManagedUserTest : public ThemeServiceTest { |
| 106 public: |
| 107 virtual void SetUp() OVERRIDE { |
| 108 is_managed_ = true; |
| 109 ThemeServiceTest::SetUp(); |
| 110 } |
| 100 }; | 111 }; |
| 101 | 112 |
| 102 // Installs then uninstalls a theme and makes sure that the ThemeService | 113 // Installs then uninstalls a theme and makes sure that the ThemeService |
| 103 // reverts to the default theme after the uninstall. | 114 // reverts to the default theme after the uninstall. |
| 104 TEST_F(ThemeServiceTest, ThemeInstallUninstall) { | 115 TEST_F(ThemeServiceTest, ThemeInstallUninstall) { |
| 105 ThemeService* theme_service = | 116 ThemeService* theme_service = |
| 106 ThemeServiceFactory::GetForProfile(profile_.get()); | 117 ThemeServiceFactory::GetForProfile(profile_.get()); |
| 107 theme_service->UseDefaultTheme(); | 118 theme_service->UseDefaultTheme(); |
| 108 // Let the ThemeService uninstall unused themes. | 119 // Let the ThemeService uninstall unused themes. |
| 109 base::MessageLoop::current()->RunUntilIdle(); | 120 base::MessageLoop::current()->RunUntilIdle(); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 ExtensionService::INCLUDE_DISABLED)); | 231 ExtensionService::INCLUDE_DISABLED)); |
| 221 | 232 |
| 222 // 2) Upgrading a disabled theme should not change the current theme. | 233 // 2) Upgrading a disabled theme should not change the current theme. |
| 223 UpdateUnpackedTheme(extension1_id); | 234 UpdateUnpackedTheme(extension1_id); |
| 224 EXPECT_EQ(extension2_id, theme_service->GetThemeID()); | 235 EXPECT_EQ(extension2_id, theme_service->GetThemeID()); |
| 225 EXPECT_TRUE(service_->GetExtensionById(extension1_id, | 236 EXPECT_TRUE(service_->GetExtensionById(extension1_id, |
| 226 ExtensionService::INCLUDE_DISABLED)); | 237 ExtensionService::INCLUDE_DISABLED)); |
| 227 } | 238 } |
| 228 | 239 |
| 229 // Checks that managed users have their own default theme. | 240 // Checks that managed users have their own default theme. |
| 230 TEST_F(ThemeServiceTest, ManagedUserThemeReplacesDefaultTheme) { | 241 TEST_F(ThemeServiceManagedUserTest, ManagedUserThemeReplacesDefaultTheme) { |
| 231 ManagedUserServiceFactory::GetForProfile(profile_.get())->InitForTesting(); | |
| 232 ThemeService* theme_service = | 242 ThemeService* theme_service = |
| 233 ThemeServiceFactory::GetForProfile(profile_.get()); | 243 ThemeServiceFactory::GetForProfile(profile_.get()); |
| 234 theme_service->UseDefaultTheme(); | 244 theme_service->UseDefaultTheme(); |
| 235 EXPECT_TRUE(theme_service->UsingDefaultTheme()); | 245 EXPECT_TRUE(theme_service->UsingDefaultTheme()); |
| 236 EXPECT_TRUE(get_theme_supplier(theme_service)); | 246 EXPECT_TRUE(get_theme_supplier(theme_service)); |
| 237 EXPECT_EQ(get_theme_supplier(theme_service)->get_theme_type(), | 247 EXPECT_EQ(get_theme_supplier(theme_service)->get_theme_type(), |
| 238 CustomThemeSupplier::MANAGED_USER_THEME); | 248 CustomThemeSupplier::MANAGED_USER_THEME); |
| 239 } | 249 } |
| 240 | 250 |
| 241 TEST_F(ThemeServiceTest, ManagedUserThemeNewUser) { | |
| 242 TestingProfile* profile = manager()->CreateTestingProfile("mu"); | |
| 243 // Simulate the current initialization behavior: first the ThemeService is | |
| 244 // created, then the supervised user profile is initialized. | |
| 245 ThemeService* theme_service = | |
| 246 ThemeServiceFactory::GetForProfile(profile); | |
| 247 ManagedUserServiceFactory::GetForProfile(profile)->InitForTesting(); | |
| 248 EXPECT_EQ(get_theme_supplier(theme_service)->get_theme_type(), | |
| 249 CustomThemeSupplier::MANAGED_USER_THEME); | |
| 250 manager()->DeleteTestingProfile("mu"); | |
| 251 } | |
| 252 | |
| 253 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 251 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 254 // Checks that managed users don't use the system theme even if it is the | 252 // Checks that managed users don't use the system theme even if it is the |
| 255 // default. The system theme is only available on Linux. | 253 // default. The system theme is only available on Linux. |
| 256 TEST_F(ThemeServiceTest, ManagedUserThemeReplacesNativeTheme) { | 254 TEST_F(ThemeServiceManagedUserTest, ManagedUserThemeReplacesNativeTheme) { |
| 257 ManagedUserServiceFactory::GetForProfile(profile_.get())->InitForTesting(); | |
| 258 profile_->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, true); | 255 profile_->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, true); |
| 259 ThemeService* theme_service = | 256 ThemeService* theme_service = |
| 260 ThemeServiceFactory::GetForProfile(profile_.get()); | 257 ThemeServiceFactory::GetForProfile(profile_.get()); |
| 261 theme_service->UseDefaultTheme(); | 258 theme_service->UseDefaultTheme(); |
| 262 EXPECT_TRUE(theme_service->UsingDefaultTheme()); | 259 EXPECT_TRUE(theme_service->UsingDefaultTheme()); |
| 263 EXPECT_TRUE(get_theme_supplier(theme_service)); | 260 EXPECT_TRUE(get_theme_supplier(theme_service)); |
| 264 EXPECT_EQ(get_theme_supplier(theme_service)->get_theme_type(), | 261 EXPECT_EQ(get_theme_supplier(theme_service)->get_theme_type(), |
| 265 CustomThemeSupplier::MANAGED_USER_THEME); | 262 CustomThemeSupplier::MANAGED_USER_THEME); |
| 266 } | 263 } |
| 267 #endif | 264 #endif |
| 268 | 265 |
| 269 }; // namespace theme_service_internal | 266 }; // namespace theme_service_internal |
| 267 |
| OLD | NEW |