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 #ifndef CHROME_BROWSER_THEMES_THEME_SERVICE_FACTORY_H_
      6 #define CHROME_BROWSER_THEMES_THEME_SERVICE_FACTORY_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/singleton.h"
     10 #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
     11 
     12 class Profile;
     13 class ThemeService;
     14 
     15 namespace extensions {
     16 class Extension;
     17 }
     18 
     19 // Singleton that owns all ThemeServices and associates them with
     20 // Profiles. Listens for the Profile's destruction notification and cleans up
     21 // the associated ThemeService.
     22 class ThemeServiceFactory : public BrowserContextKeyedServiceFactory {
     23  public:
     24   // Returns the ThemeService that provides theming resources for
     25   // |profile|. Note that even if a Profile doesn't have a theme installed, it
     26   // still needs a ThemeService to hand back the default theme images.
     27   static ThemeService* GetForProfile(Profile* profile);
     28 
     29   // Returns the Extension that implements the theme associated with
     30   // |profile|. Returns NULL if the theme is no longer installed, if there is
     31   // no installed theme, or the theme was cleared.
     32   static const extensions::Extension* GetThemeForProfile(Profile* profile);
     33 
     34   static ThemeServiceFactory* GetInstance();
     35 
     36  private:
     37   friend struct DefaultSingletonTraits<ThemeServiceFactory>;
     38 
     39   ThemeServiceFactory();
     40   virtual ~ThemeServiceFactory();
     41 
     42   // BrowserContextKeyedServiceFactory:
     43   virtual BrowserContextKeyedService* BuildServiceInstanceFor(
     44       content::BrowserContext* profile) const OVERRIDE;
     45   virtual void RegisterProfilePrefs(
     46       user_prefs::PrefRegistrySyncable* registry) OVERRIDE;
     47   virtual content::BrowserContext* GetBrowserContextToUse(
     48       content::BrowserContext* context) const OVERRIDE;
     49   virtual bool ServiceIsCreatedWithBrowserContext() const OVERRIDE;
     50 
     51   DISALLOW_COPY_AND_ASSIGN(ThemeServiceFactory);
     52 };
     53 
     54 #endif  // CHROME_BROWSER_THEMES_THEME_SERVICE_FACTORY_H_
     55