Home | History | Annotate | Download | only in settings_overrides
      1 // Copyright 2013 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_EXTENSIONS_API_SETTINGS_OVERRIDES_SETTINGS_OVERRIDES_API_H_
      6 #define CHROME_BROWSER_EXTENSIONS_API_SETTINGS_OVERRIDES_SETTINGS_OVERRIDES_API_H_
      7 
      8 #include <set>
      9 #include <string>
     10 
     11 #include "base/scoped_observer.h"
     12 #include "chrome/browser/search_engines/template_url_service.h"
     13 #include "extensions/browser/browser_context_keyed_api_factory.h"
     14 #include "extensions/browser/extension_registry_observer.h"
     15 
     16 class TemplateURL;
     17 
     18 namespace extensions {
     19 class ExtensionRegistry;
     20 
     21 class SettingsOverridesAPI : public BrowserContextKeyedAPI,
     22                              public ExtensionRegistryObserver {
     23  public:
     24   explicit SettingsOverridesAPI(content::BrowserContext* context);
     25   virtual ~SettingsOverridesAPI();
     26 
     27   // BrowserContextKeyedAPI implementation.
     28   static BrowserContextKeyedAPIFactory<SettingsOverridesAPI>*
     29       GetFactoryInstance();
     30 
     31  private:
     32   friend class BrowserContextKeyedAPIFactory<SettingsOverridesAPI>;
     33 
     34   typedef std::set<scoped_refptr<const Extension> > PendingExtensions;
     35 
     36   // Wrappers around PreferenceAPI.
     37   void SetPref(const std::string& extension_id,
     38                const std::string& pref_key,
     39                base::Value* value);
     40   void UnsetPref(const std::string& extension_id,
     41                  const std::string& pref_key);
     42 
     43   // ExtensionRegistryObserver implementation.
     44   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
     45                                  const Extension* extension) OVERRIDE;
     46   virtual void OnExtensionUnloaded(
     47       content::BrowserContext* browser_context,
     48       const Extension* extension,
     49       UnloadedExtensionInfo::Reason reason) OVERRIDE;
     50 
     51   // KeyedService implementation.
     52   virtual void Shutdown() OVERRIDE;
     53 
     54   void OnTemplateURLsLoaded();
     55 
     56   void RegisterSearchProvider(const Extension* extension) const;
     57   // BrowserContextKeyedAPI implementation.
     58   static const char* service_name() { return "SettingsOverridesAPI"; }
     59 
     60   Profile* profile_;
     61   TemplateURLService* url_service_;
     62 
     63   // List of extensions waiting for the TemplateURLService to Load to
     64   // have search provider registered.
     65   PendingExtensions pending_extensions_;
     66 
     67   // Listen to extension load, unloaded notifications.
     68   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
     69       extension_registry_observer_;
     70 
     71   scoped_ptr<TemplateURLService::Subscription> template_url_sub_;
     72 
     73   DISALLOW_COPY_AND_ASSIGN(SettingsOverridesAPI);
     74 };
     75 
     76 template <>
     77 void BrowserContextKeyedAPIFactory<
     78     SettingsOverridesAPI>::DeclareFactoryDependencies();
     79 
     80 }  // namespace extensions
     81 
     82 #endif  // CHROME_BROWSER_EXTENSIONS_API_SETTINGS_OVERRIDES_SETTINGS_OVERRIDES_API_H_
     83