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 16class Profile; 17class TemplateURL; 18 19namespace extensions { 20class ExtensionRegistry; 21 22class 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 77template <> 78void BrowserContextKeyedAPIFactory< 79 SettingsOverridesAPI>::DeclareFactoryDependencies(); 80 81} // namespace extensions 82 83#endif // CHROME_BROWSER_EXTENSIONS_API_SETTINGS_OVERRIDES_SETTINGS_OVERRIDES_API_H_ 84