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