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 BASE_PREFS_PREF_SERVICE_FACTORY_H_
6#define BASE_PREFS_PREF_SERVICE_FACTORY_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/memory/ref_counted.h"
11#include "base/prefs/base_prefs_export.h"
12#include "base/prefs/persistent_pref_store.h"
13#include "base/prefs/pref_registry.h"
14#include "base/prefs/pref_store.h"
15
16class PrefService;
17
18namespace base {
19
20class FilePath;
21class SequencedTaskRunner;
22
23// A class that allows convenient building of PrefService.
24class BASE_PREFS_EXPORT PrefServiceFactory {
25 public:
26  PrefServiceFactory();
27  virtual ~PrefServiceFactory();
28
29  // Functions for setting the various parameters of the PrefService to build.
30  void set_managed_prefs(const scoped_refptr<PrefStore>& managed_prefs) {
31    managed_prefs_ = managed_prefs;
32  }
33  void set_supervised_user_prefs(
34      const scoped_refptr<PrefStore>& supervised_user_prefs) {
35    supervised_user_prefs_ = supervised_user_prefs;
36  }
37  void set_extension_prefs(const scoped_refptr<PrefStore>& extension_prefs) {
38    extension_prefs_ = extension_prefs;
39  }
40  void set_command_line_prefs(
41      const scoped_refptr<PrefStore>& command_line_prefs) {
42    command_line_prefs_ = command_line_prefs;
43  }
44  void set_user_prefs(const scoped_refptr<PersistentPrefStore>& user_prefs) {
45    user_prefs_ = user_prefs;
46  }
47  void set_recommended_prefs(
48      const scoped_refptr<PrefStore>& recommended_prefs) {
49    recommended_prefs_ = recommended_prefs;
50  }
51
52  // Sets up error callback for the PrefService.  A do-nothing default
53  // is provided if this is not called.
54  void set_read_error_callback(
55      const base::Callback<void(PersistentPrefStore::PrefReadError)>&
56          read_error_callback) {
57    read_error_callback_ = read_error_callback;
58  }
59
60  // Specifies to use an actual file-backed user pref store.
61  void SetUserPrefsFile(const base::FilePath& prefs_file,
62                        base::SequencedTaskRunner* task_runner);
63
64  void set_async(bool async) {
65    async_ = async;
66  }
67
68  // Creates a PrefService object initialized with the parameters from
69  // this factory.
70  scoped_ptr<PrefService> Create(PrefRegistry* registry);
71
72 protected:
73  scoped_refptr<PrefStore> managed_prefs_;
74  scoped_refptr<PrefStore> supervised_user_prefs_;
75  scoped_refptr<PrefStore> extension_prefs_;
76  scoped_refptr<PrefStore> command_line_prefs_;
77  scoped_refptr<PersistentPrefStore> user_prefs_;
78  scoped_refptr<PrefStore> recommended_prefs_;
79
80  base::Callback<void(PersistentPrefStore::PrefReadError)> read_error_callback_;
81
82  // Defaults to false.
83  bool async_;
84
85 private:
86  DISALLOW_COPY_AND_ASSIGN(PrefServiceFactory);
87};
88
89}  // namespace base
90
91#endif  // BASE_PREFS_PREF_SERVICE_FACTORY_H_
92