15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/themes/theme_service_aurax11.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/linux_ui/linux_ui.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ThemeService* ThemeServiceFactory::GetForProfile(Profile* profile) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<ThemeService*>( 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const extensions::Extension* ThemeServiceFactory::GetThemeForProfile( 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string id = GetForProfile(profile)->GetThemeID(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id == ThemeService::kDefaultThemeID) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return extensions::ExtensionRegistry::Get( 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile)->enabled_extensions().GetByID(id); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ThemeServiceFactory* ThemeServiceFactory::GetInstance() { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Singleton<ThemeServiceFactory>::get(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ThemeServiceFactory::ThemeServiceFactory() 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "ThemeService", 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ThemeServiceFactory::~ThemeServiceFactory() {} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* ThemeServiceFactory::BuildServiceInstanceFor( 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) const { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeService* provider = NULL; 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider = new ThemeServiceAuraX11; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider = new ThemeService; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider->Init(static_cast<Profile*>(profile)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ThemeServiceFactory::RegisterProfilePrefs( 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(USE_X11) && !defined(OS_CHROMEOS) 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool default_uses_system_theme = false; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const views::LinuxUI* linux_ui = views::LinuxUI::instance(); 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (linux_ui) 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch default_uses_system_theme = linux_ui->GetDefaultUsesSystemTheme(); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kUsesSystemTheme, 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch default_uses_system_theme, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterFilePathPref( 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemePackFilename, 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemeID, 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ThemeService::kDefaultThemeID, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDictionaryPref( 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemeImages, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDictionaryPref( 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemeColors, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDictionaryPref( 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemeTints, 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterDictionaryPref( 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCurrentThemeDisplayProperties, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext* ThemeServiceFactory::GetBrowserContextToUse( 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return chrome::GetBrowserContextRedirectedInIncognito(context); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool ThemeServiceFactory::ServiceIsCreatedWithBrowserContext() const { 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 110