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