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