Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2781)

Unified Diff: chrome/browser/prefs/chrome_pref_service_factory.cc

Issue 154593002: Refactor pref code out of ProfileImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge up to r249119 Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prefs/chrome_pref_service_factory.h ('k') | chrome/browser/prefs/pref_hash_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/chrome_pref_service_factory.cc
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc
index b67c0d3dc6a7b003dda4be1c8f70371542b58540..170975e65c99b502231e1a38b07d450bb0a94377 100644
--- a/chrome/browser/prefs/chrome_pref_service_factory.cc
+++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
@@ -8,6 +8,7 @@
#include "base/compiler_specific.h"
#include "base/debug/trace_event.h"
#include "base/files/file_path.h"
+#include "base/json/json_file_value_serializer.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "base/prefs/default_pref_store.h"
@@ -18,21 +19,27 @@
#include "base/prefs/pref_service.h"
#include "base/prefs/pref_store.h"
#include "base/prefs/pref_value_store.h"
+#include "base/threading/sequenced_worker_pool.h"
+#include "base/time/time.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/prefs/command_line_pref_store.h"
#include "chrome/browser/prefs/pref_hash_filter.h"
-#include "chrome/browser/prefs/pref_hash_store.h"
+#include "chrome/browser/prefs/pref_hash_store_impl.h"
#include "chrome/browser/prefs/pref_model_associator.h"
#include "chrome/browser/prefs/pref_service_syncable.h"
#include "chrome/browser/prefs/pref_service_syncable_factory.h"
+#include "chrome/browser/profiles/file_path_verifier_win.h"
#include "chrome/browser/ui/profile_error_dialog.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/pref_names.h"
#include "components/user_prefs/pref_registry_syncable.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/pref_names.h"
+#include "grit/browser_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "ui/base/resource/resource_bundle.h"
#if defined(ENABLE_CONFIGURATION_POLICY)
#include "components/policy/core/browser/browser_policy_connector.h"
@@ -44,6 +51,10 @@
#include "chrome/browser/managed_mode/supervised_user_pref_store.h"
#endif
+#if defined(OS_WIN) && defined(ENABLE_RLZ)
+#include "rlz/lib/machine_id.h"
+#endif
+
using content::BrowserContext;
using content::BrowserThread;
@@ -196,6 +207,41 @@ void HandleReadError(PersistentPrefStore::PrefReadError error) {
}
}
+base::FilePath GetPrefFilePathFromProfilePath(
+ const base::FilePath& profile_path) {
+ return profile_path.Append(chrome::kPreferencesFilename);
+}
+
+// Returns the PrefHashStoreImpl for the profile at |profile_path|; may be NULL
+// on some platforms.
+scoped_ptr<PrefHashStoreImpl> GetPrefHashStoreImpl(
+ const base::FilePath& profile_path) {
+ // TODO(erikwright): Enable this on Android when race condition is sorted out.
+#if defined(OS_ANDROID)
+ return scoped_ptr<PrefHashStoreImpl>();
+#else
+ std::string seed = ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_PREF_HASH_SEED_BIN).as_string();
+ std::string device_id;
+
+#if defined(OS_WIN) && defined(ENABLE_RLZ)
+ // This is used by
+ // chrome/browser/extensions/api/music_manager_private/device_id_win.cc
+ // but that API is private (http://crbug.com/276485) and other platforms are
+ // not available synchronously.
+ // As part of improving pref metrics on other platforms we may want to find
+ // ways to defer preference loading until the device ID can be used.
+ rlz_lib::GetMachineId(&device_id);
+#endif
+
+ return make_scoped_ptr(new PrefHashStoreImpl(
+ profile_path.AsUTF8Unsafe(),
+ seed,
+ device_id,
+ g_browser_process->local_state()));
+#endif
+}
+
scoped_ptr<PrefHashFilter> CreatePrefHashFilter(
scoped_ptr<PrefHashStore> pref_hash_store) {
return make_scoped_ptr(new PrefHashFilter(pref_hash_store.Pass(),
@@ -311,38 +357,59 @@ scoped_ptr<PrefService> CreateLocalState(
}
scoped_ptr<PrefServiceSyncable> CreateProfilePrefs(
- const base::FilePath& pref_filename,
+ const base::FilePath& profile_path,
base::SequencedTaskRunner* pref_io_task_runner,
policy::PolicyService* policy_service,
ManagedUserSettingsService* managed_user_settings,
- scoped_ptr<PrefHashStore> pref_hash_store,
const scoped_refptr<PrefStore>& extension_prefs,
const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry,
bool async) {
TRACE_EVENT0("browser", "chrome_prefs::CreateProfilePrefs");
PrefServiceSyncableFactory factory;
PrepareBuilder(&factory,
- pref_filename,
+ GetPrefFilePathFromProfilePath(profile_path),
pref_io_task_runner,
policy_service,
managed_user_settings,
- pref_hash_store.Pass(),
+ GetPrefHashStoreImpl(profile_path).PassAs<PrefHashStore>(),
extension_prefs,
async);
return factory.CreateSyncable(pref_registry.get());
}
-void InitializeHashStoreForPrefFile(
- const base::FilePath& pref_filename,
- base::SequencedTaskRunner* pref_io_task_runner,
- scoped_ptr<PrefHashStore> pref_hash_store) {
- scoped_refptr<JsonPrefStore> pref_store(
- new JsonPrefStore(pref_filename,
- pref_io_task_runner,
- scoped_ptr<PrefFilter>()));
- pref_store->AddObserver(
- new InitializeHashStoreObserver(pref_store, pref_hash_store.Pass()));
- pref_store->ReadPrefsAsync(NULL);
+void SchedulePrefsFilePathVerification(const base::FilePath& profile_path) {
+#if defined(OS_WIN)
+ // Only do prefs file verification on Windows.
+ const int kVerifyPrefsFileDelaySeconds = 60;
+ BrowserThread::GetBlockingPool()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&VerifyPreferencesFile,
+ GetPrefFilePathFromProfilePath(profile_path)),
+ base::TimeDelta::FromSeconds(kVerifyPrefsFileDelaySeconds));
+#endif
+}
+
+void InitializePrefHashStoreIfRequired(
+ const base::FilePath& profile_path) {
+ scoped_ptr<PrefHashStoreImpl> pref_hash_store(
+ GetPrefHashStoreImpl(profile_path));
+ if (pref_hash_store && !pref_hash_store->IsInitialized()) {
+ const base::FilePath pref_file(
+ GetPrefFilePathFromProfilePath(profile_path));
+ scoped_refptr<JsonPrefStore> pref_store(
+ new JsonPrefStore(pref_file,
+ JsonPrefStore::GetTaskRunnerForFile(
+ pref_file, BrowserThread::GetBlockingPool()),
+ scoped_ptr<PrefFilter>()));
+ pref_store->AddObserver(
+ new InitializeHashStoreObserver(
+ pref_store, pref_hash_store.PassAs<PrefHashStore>()));
+ pref_store->ReadPrefsAsync(NULL);
+ }
+}
+
+void ResetPrefHashStore(const base::FilePath& profile_path) {
+ GetPrefHashStoreImpl(profile_path)->Reset();
}
} // namespace chrome_prefs
« no previous file with comments | « chrome/browser/prefs/chrome_pref_service_factory.h ('k') | chrome/browser/prefs/pref_hash_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698