Index: chrome/browser/profile_resetter/automatic_profile_resetter_mementos.cc |
diff --git a/chrome/browser/profile_resetter/automatic_profile_resetter_mementos.cc b/chrome/browser/profile_resetter/automatic_profile_resetter_mementos.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a76b98b1a252a998e9c5fb22f54831283ded6c4f |
--- /dev/null |
+++ b/chrome/browser/profile_resetter/automatic_profile_resetter_mementos.cc |
@@ -0,0 +1,129 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/profile_resetter/automatic_profile_resetter_mementos.h" |
+ |
+#include "base/bind.h" |
+#include "base/bind_helpers.h" |
+#include "base/file_util.h" |
+#include "base/files/file_path.h" |
+#include "base/logging.h" |
+#include "base/prefs/pref_service.h" |
+#include "base/prefs/scoped_user_pref_update.h" |
+#include "base/values.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/chrome_constants.h" |
+#include "chrome/common/pref_names.h" |
+#include "content/public/browser/browser_thread.h" |
+ |
+using base::DictionaryValue; |
+ |
+ |
+// AutomaticProfileResetter::PreferenceHostedPromptMemento ------------------- |
+ |
+PreferenceHostedPromptMemento::PreferenceHostedPromptMemento(Profile* profile) |
+ : profile_(profile) {} |
+ |
+PreferenceHostedPromptMemento::~PreferenceHostedPromptMemento() {} |
+ |
+std::string PreferenceHostedPromptMemento::ReadValue() const { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ DCHECK(prefs); |
+ return prefs->GetString(prefs::kProfileResetPromptMementoInProfilePrefs); |
+} |
+ |
+void PreferenceHostedPromptMemento::StoreValue(const std::string& value) { |
+ PrefService* prefs = profile_->GetPrefs(); |
+ DCHECK(prefs); |
+ prefs->SetString(prefs::kProfileResetPromptMementoInProfilePrefs, value); |
+} |
+ |
+ |
+// AutomaticProfileResetter::LocalStateHostedPromptMemento ------------------- |
+ |
+LocalStateHostedPromptMemento::LocalStateHostedPromptMemento(Profile* profile) |
+ : profile_(profile) {} |
+ |
+LocalStateHostedPromptMemento::~LocalStateHostedPromptMemento() {} |
+ |
+std::string LocalStateHostedPromptMemento::ReadValue() const { |
+ PrefService* local_state = g_browser_process->local_state(); |
+ DCHECK(local_state); |
+ |
+ const base::DictionaryValue* prompt_shown_dict = local_state->GetDictionary( |
+ prefs::kProfileResetPromptMementosInLocalState); |
+ std::string profile_key = GetProfileKey(); |
+ if (!prompt_shown_dict || profile_key.empty()) { |
+ NOTREACHED(); |
+ return std::string(); |
+ } |
+ std::string value; |
+ return prompt_shown_dict->GetStringWithoutPathExpansion(profile_key, &value) ? |
+ value : std::string(); |
+} |
+ |
+void LocalStateHostedPromptMemento::StoreValue(const std::string& value) { |
+ PrefService* local_state = g_browser_process->local_state(); |
+ DCHECK(local_state); |
+ |
+ DictionaryPrefUpdate prompt_shown_dict_update( |
+ local_state, prefs::kProfileResetPromptMementosInLocalState); |
+ std::string profile_key = GetProfileKey(); |
+ if (profile_key.empty()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ prompt_shown_dict_update.Get()->SetStringWithoutPathExpansion(profile_key, |
+ value); |
+} |
+ |
+std::string LocalStateHostedPromptMemento::GetProfileKey() const { |
+ return profile_->GetPath().BaseName().MaybeAsASCII(); |
+} |
+ |
+ |
+// AutomaticProfileResetter::FileHostedPromptMemento ------------------------- |
+ |
+FileHostedPromptMemento::FileHostedPromptMemento(Profile* profile) |
+ : profile_(profile) {} |
+ |
+FileHostedPromptMemento::~FileHostedPromptMemento() {} |
+ |
+void FileHostedPromptMemento::ReadValue( |
+ const ReadValueCallback& callback) const { |
+ base::FilePath path = GetMementoFilePath(); |
+ content::BrowserThread::PostTaskAndReplyWithResult( |
+ content::BrowserThread::FILE, |
+ FROM_HERE, |
+ base::Bind(&ReadValueOnFileThread, path), |
+ callback); |
+} |
+ |
+void FileHostedPromptMemento::StoreValue(const std::string& value) { |
+ base::FilePath path = GetMementoFilePath(); |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::FILE, |
+ FROM_HERE, |
+ base::Bind(&StoreValueOnFileThread, path, value)); |
+} |
+ |
+std::string FileHostedPromptMemento::ReadValueOnFileThread( |
+ const base::FilePath& memento_file_path) { |
+ std::string value; |
+ base::ReadFileToString(memento_file_path, &value); |
+ return value; |
+} |
+ |
+void FileHostedPromptMemento::StoreValueOnFileThread( |
+ const base::FilePath& memento_file_path, |
+ const std::string& value) { |
+ int retval = |
+ base::WriteFile(memento_file_path, value.c_str(), value.size()); |
+ DCHECK_EQ(retval, (int)value.size()); |
+} |
+ |
+base::FilePath FileHostedPromptMemento::GetMementoFilePath() const { |
+ return profile_->GetPath().Append(chrome::kResetPromptMementoFilename); |
+} |