1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_service_factory.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/default_pref_store.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/json_pref_store.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_filter.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_notifier_impl.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_service.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_value_store.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace base {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Do-nothing default implementation.
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void DoNothingHandleReadError(PersistentPrefStore::PrefReadError error) {
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PrefServiceFactory::PrefServiceFactory()
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : managed_prefs_(NULL),
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      supervised_user_prefs_(NULL),
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_prefs_(NULL),
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      command_line_prefs_(NULL),
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      user_prefs_(NULL),
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      recommended_prefs_(NULL),
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      read_error_callback_(base::Bind(&DoNothingHandleReadError)),
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      async_(false) {}
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PrefServiceFactory::~PrefServiceFactory() {}
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PrefServiceFactory::SetUserPrefsFile(
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const base::FilePath& prefs_file,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::SequencedTaskRunner* task_runner) {
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  user_prefs_ = new JsonPrefStore(
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      prefs_file, task_runner, scoped_ptr<PrefFilter>());
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<PrefService> PrefServiceFactory::Create(
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    PrefRegistry* pref_registry) {
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<PrefService> pref_service(
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new PrefService(pref_notifier,
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      new PrefValueStore(managed_prefs_.get(),
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         supervised_user_prefs_.get(),
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         extension_prefs_.get(),
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         command_line_prefs_.get(),
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         user_prefs_.get(),
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         recommended_prefs_.get(),
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         pref_registry->defaults().get(),
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         pref_notifier),
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      user_prefs_.get(),
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      pref_registry,
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      read_error_callback_,
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      async_));
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return pref_service.Pass();
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace base
66