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#include "chrome/browser/extensions/api/content_settings/content_settings_service.h" 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/lazy_instance.h" 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/extensions/api/content_settings/content_settings_store.h" 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/extension_prefs.h" 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/extension_prefs_scope.h" 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/pref_names.h" 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace extensions { 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochContentSettingsService::ContentSettingsService(content::BrowserContext* context) 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : content_settings_store_(new ContentSettingsStore()) {} 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochContentSettingsService::~ContentSettingsService() {} 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// static 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochContentSettingsService* ContentSettingsService::Get( 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content::BrowserContext* context) { 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return BrowserContextKeyedAPIFactory<ContentSettingsService>::Get(context); 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// BrowserContextKeyedAPI implementation. 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochBrowserContextKeyedAPIFactory<ContentSettingsService>* 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochContentSettingsService::GetFactoryInstance() { 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static base::LazyInstance< 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch BrowserContextKeyedAPIFactory<ContentSettingsService> > factory = 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch LAZY_INSTANCE_INITIALIZER; 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return factory.Pointer(); 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ContentSettingsService::OnExtensionRegistered( 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id, 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Time& install_time, 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool is_enabled) { 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_store_->RegisterExtension( 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extension_id, install_time, is_enabled); 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ContentSettingsService::OnExtensionPrefsLoaded( 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id, 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const ExtensionPrefs* prefs) { 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::ListValue* content_settings = NULL; 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (prefs->ReadPrefAsList( 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extension_id, pref_names::kPrefContentSettings, &content_settings)) { 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_store_->SetExtensionContentSettingFromList( 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extension_id, content_settings, kExtensionPrefsScopeRegular); 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (prefs->ReadPrefAsList(extension_id, 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch pref_names::kPrefIncognitoContentSettings, 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &content_settings)) { 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_store_->SetExtensionContentSettingFromList( 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch extension_id, 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings, 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch kExtensionPrefsScopeIncognitoPersistent); 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ContentSettingsService::OnExtensionPrefsDeleted( 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id) { 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_store_->UnregisterExtension(extension_id); 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ContentSettingsService::OnExtensionStateChanged( 68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id, 69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool state) { 70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch content_settings_store_->SetExtensionState(extension_id, state); 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace extensions 74