Home | History | Annotate | Download | only in themes
      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(OS_LINUX) && !defined(OS_CHROMEOS)
     22 #include "chrome/browser/themes/theme_service_aurax11.h"
     23 #include "ui/linux_ui/linux_ui.h"
     24 #endif
     25 
     26 // static
     27 ThemeService* ThemeServiceFactory::GetForProfile(Profile* profile) {
     28   return static_cast<ThemeService*>(
     29       GetInstance()->GetServiceForBrowserContext(profile, true));
     30 }
     31 
     32 // static
     33 const 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
     43 ThemeServiceFactory* ThemeServiceFactory::GetInstance() {
     44   return Singleton<ThemeServiceFactory>::get();
     45 }
     46 
     47 ThemeServiceFactory::ThemeServiceFactory()
     48     : BrowserContextKeyedServiceFactory(
     49         "ThemeService",
     50         BrowserContextDependencyManager::GetInstance()) {}
     51 
     52 ThemeServiceFactory::~ThemeServiceFactory() {}
     53 
     54 BrowserContextKeyedService* 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(OS_LINUX) && !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 
     69 void ThemeServiceFactory::RegisterProfilePrefs(
     70     user_prefs::PrefRegistrySyncable* registry) {
     71 #if defined(OS_LINUX) && !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(OS_LINUX) && !defined(OS_CHROMEOS)
     77   const ui::LinuxUI* linux_ui = ui::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 
    109 content::BrowserContext* ThemeServiceFactory::GetBrowserContextToUse(
    110     content::BrowserContext* context) const {
    111   return chrome::GetBrowserContextRedirectedInIncognito(context);
    112 }
    113 
    114 bool ThemeServiceFactory::ServiceIsCreatedWithBrowserContext() const {
    115   return true;
    116 }
    117