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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/themes/theme_service_factory.h" 6 7 #include "base/logging.h" 8 #include "base/prefs/pref_service.h" 9 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/profiles/incognito_helpers.h" 11 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/themes/theme_service.h" 13 #include "chrome/common/pref_names.h" 14 #include "components/keyed_service/content/browser_context_dependency_manager.h" 15 #include "components/pref_registry/pref_registry_syncable.h" 16 17 #if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 18 #include "chrome/browser/themes/theme_service_aurax11.h" 19 #include "ui/views/linux_ui/linux_ui.h" 20 #endif 21 22 // static 23 ThemeService* ThemeServiceFactory::GetForProfile(Profile* profile) { 24 return static_cast<ThemeService*>( 25 GetInstance()->GetServiceForBrowserContext(profile, true)); 26 } 27 28 // static 29 const extensions::Extension* ThemeServiceFactory::GetThemeForProfile( 30 Profile* profile) { 31 std::string id = GetForProfile(profile)->GetThemeID(); 32 if (id == ThemeService::kDefaultThemeID) 33 return NULL; 34 35 return profile->GetExtensionService()->GetExtensionById(id, false); 36 } 37 38 // static 39 ThemeServiceFactory* ThemeServiceFactory::GetInstance() { 40 return Singleton<ThemeServiceFactory>::get(); 41 } 42 43 ThemeServiceFactory::ThemeServiceFactory() 44 : BrowserContextKeyedServiceFactory( 45 "ThemeService", 46 BrowserContextDependencyManager::GetInstance()) {} 47 48 ThemeServiceFactory::~ThemeServiceFactory() {} 49 50 KeyedService* ThemeServiceFactory::BuildServiceInstanceFor( 51 content::BrowserContext* profile) const { 52 ThemeService* provider = NULL; 53 #if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 54 provider = new ThemeServiceAuraX11; 55 #else 56 provider = new ThemeService; 57 #endif 58 provider->Init(static_cast<Profile*>(profile)); 59 60 return provider; 61 } 62 63 void ThemeServiceFactory::RegisterProfilePrefs( 64 user_prefs::PrefRegistrySyncable* registry) { 65 #if defined(USE_X11) && !defined(OS_CHROMEOS) 66 bool default_uses_system_theme = false; 67 68 #if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 69 const views::LinuxUI* linux_ui = views::LinuxUI::instance(); 70 if (linux_ui) 71 default_uses_system_theme = linux_ui->GetDefaultUsesSystemTheme(); 72 #endif 73 74 registry->RegisterBooleanPref( 75 prefs::kUsesSystemTheme, 76 default_uses_system_theme, 77 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 78 #endif 79 registry->RegisterFilePathPref( 80 prefs::kCurrentThemePackFilename, 81 base::FilePath(), 82 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 83 registry->RegisterStringPref( 84 prefs::kCurrentThemeID, 85 ThemeService::kDefaultThemeID, 86 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 87 registry->RegisterDictionaryPref( 88 prefs::kCurrentThemeImages, 89 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 90 registry->RegisterDictionaryPref( 91 prefs::kCurrentThemeColors, 92 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 93 registry->RegisterDictionaryPref( 94 prefs::kCurrentThemeTints, 95 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 96 registry->RegisterDictionaryPref( 97 prefs::kCurrentThemeDisplayProperties, 98 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 99 } 100 101 content::BrowserContext* ThemeServiceFactory::GetBrowserContextToUse( 102 content::BrowserContext* context) const { 103 return chrome::GetBrowserContextRedirectedInIncognito(context); 104 } 105 106 bool ThemeServiceFactory::ServiceIsCreatedWithBrowserContext() const { 107 return true; 108 } 109