1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_API_CONTENT_SETTINGS_CONTENT_SETTINGS_SERVICE_H_ 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define CHROME_BROWSER_EXTENSIONS_API_CONTENT_SETTINGS_CONTENT_SETTINGS_SERVICE_H_ 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/memory/ref_counted.h" 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/browser_context_keyed_api_factory.h" 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/extension_prefs_observer.h" 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace extensions { 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass ContentSettingsStore; 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass ExtensionPrefs; 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// This service hosts a single ContentSettingsStore for the 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// chrome.contentSettings API. 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass ContentSettingsService : public BrowserContextKeyedAPI, 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public ExtensionPrefsObserver { 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public: 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch explicit ContentSettingsService(content::BrowserContext* context); 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual ~ContentSettingsService(); 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_refptr<ContentSettingsStore> content_settings_store() const { 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return content_settings_store_; 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Convenience function to get the service for some browser context. 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static ContentSettingsService* Get(content::BrowserContext* context); 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // BrowserContextKeyedAPI implementation. 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static BrowserContextKeyedAPIFactory<ContentSettingsService>* 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch GetFactoryInstance(); 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // ExtensionPrefsObserver implementation. 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void OnExtensionRegistered(const std::string& extension_id, 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Time& install_time, 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool is_enabled) OVERRIDE; 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void OnExtensionPrefsLoaded(const std::string& extension_id, 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const ExtensionPrefs* prefs) OVERRIDE; 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void OnExtensionPrefsDeleted(const std::string& extension_id) 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch OVERRIDE; 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void OnExtensionStateChanged(const std::string& extension_id, 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool state) OVERRIDE; 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private: 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch friend class BrowserContextKeyedAPIFactory<ContentSettingsService>; 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // BrowserContextKeyedAPI implementation. 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static const char* service_name() { return "ContentSettingsService"; } 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_refptr<ContentSettingsStore> content_settings_store_; 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DISALLOW_COPY_AND_ASSIGN(ContentSettingsService); 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}; 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace extensions 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif // CHROME_BROWSER_EXTENSIONS_API_CONTENT_SETTINGS_CONTENT_SETTINGS_SERVICE_H_ 61