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

Unified Diff: chrome/common/json_pref_store.cc

Issue 6894020: Adds async interface method to PersistentPrefStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: always call OnInit.. Created 9 years, 8 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
Index: chrome/common/json_pref_store.cc
diff --git a/chrome/common/json_pref_store.cc b/chrome/common/json_pref_store.cc
index 038f6331b6a88289d459af13f0e21d07494f3c92..a0e2f9dc8f278ceeea572318daf48fbccf71b8b9 100644
--- a/chrome/common/json_pref_store.cc
+++ b/chrome/common/json_pref_store.cc
@@ -41,14 +41,7 @@ class FileThreadDeserializer
void ReadFileAndReport(const FilePath& path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- int error_code;
- std::string error_msg;
- JSONFileValueSerializer serializer(path);
- value_.reset(serializer.Deserialize(&error_code, &error_msg));
-
- HandleErrors(value_.get(), path, error_code, error_msg, &error_);
-
- no_dir_ = !file_util::PathExists(path.DirName());
+ value_.reset(DoReading(path, &error_, &no_dir_));
BrowserThread::PostTask(
BrowserThread::UI,
@@ -62,6 +55,18 @@ class FileThreadDeserializer
delegate_->OnFileRead(value_.release(), error_, no_dir_);
}
+ static Value* DoReading(const FilePath& path,
+ PersistentPrefStore::PrefReadError* error,
+ bool* no_dir) {
+ int error_code;
+ std::string error_msg;
+ JSONFileValueSerializer serializer(path);
+ Value* value = serializer.Deserialize(&error_code, &error_msg);
+ HandleErrors(value, path, error_code, error_msg, error);
+ (*no_dir) = !file_util::PathExists(path.DirName());
+ return value;
+ }
+
static void HandleErrors(const Value* value,
const FilePath& path,
int error_code,
@@ -130,7 +135,9 @@ JsonPrefStore::JsonPrefStore(const FilePath& filename,
: path_(filename),
prefs_(new DictionaryValue()),
read_only_(false),
- writer_(filename, file_message_loop_proxy) {
+ writer_(filename, file_message_loop_proxy),
+ error_(PREF_READ_ERROR_NONE),
+ is_fatal_(false) {
}
JsonPrefStore::~JsonPrefStore() {
@@ -193,12 +200,16 @@ bool JsonPrefStore::ReadOnly() const {
void JsonPrefStore::OnFileRead(Value* value_owned,
PersistentPrefStore::PrefReadError error,
bool no_dir) {
+ error_ = error;
+ is_fatal_ = no_dir;
+
scoped_ptr<Value> value(value_owned);
switch (error) {
case PREF_READ_ERROR_ACCESS_DENIED:
case PREF_READ_ERROR_FILE_OTHER:
case PREF_READ_ERROR_FILE_LOCKED:
case PREF_READ_ERROR_JSON_TYPE:
+ case PREF_READ_ERROR_FILE_NOT_SPECIFIED:
read_only_ = true;
break;
case PREF_READ_ERROR_NONE:
@@ -216,17 +227,14 @@ void JsonPrefStore::OnFileRead(Value* value_owned,
NOTREACHED() << "Unknown error: " << error;
}
- if (delegate_)
- delegate_->OnPrefsRead(error, no_dir);
+ FOR_EACH_OBSERVER(PrefStore::Observer,
+ observers_,
+ OnInitializationCompleted());
}
-void JsonPrefStore::ReadPrefs(Delegate* delegate) {
- DCHECK(delegate);
- delegate_ = delegate;
-
+void JsonPrefStore::ReadPrefsAsync() {
Mattias Nissler (ping if slow) 2011/04/26 09:04:26 I was wondering before if we could just merge Read
altimofeev 2011/04/27 10:32:08 I remember, and actually thought about it. And the
Mattias Nissler (ping if slow) 2011/04/27 12:16:30 If we do it, we should make sure we don't put addi
if (path_.empty()) {
- read_only_ = true;
- delegate_->OnPrefsRead(PREF_READ_ERROR_FILE_NOT_SPECIFIED, false);
+ OnFileRead(NULL, PREF_READ_ERROR_FILE_NOT_SPECIFIED, false);
return;
}
@@ -241,29 +249,21 @@ void JsonPrefStore::ReadPrefs(Delegate* delegate) {
}
PersistentPrefStore::PrefReadError JsonPrefStore::ReadPrefs() {
- delegate_ = NULL;
-
if (path_.empty()) {
- read_only_ = true;
- return PREF_READ_ERROR_FILE_NOT_SPECIFIED;
+ OnFileRead(NULL, PREF_READ_ERROR_FILE_NOT_SPECIFIED, false);
+ return error_;
}
- int error_code = 0;
- std::string error_msg;
-
- JSONFileValueSerializer serializer(path_);
- scoped_ptr<Value> value(serializer.Deserialize(&error_code, &error_msg));
-
- PersistentPrefStore::PrefReadError error;
- FileThreadDeserializer::HandleErrors(value.get(),
- path_,
- error_code,
- error_msg,
- &error);
-
- OnFileRead(value.release(), error, false);
+ Value* value = FileThreadDeserializer::DoReading(path_,
+ &error_,
+ &is_fatal_);
+ OnFileRead(value, error_, is_fatal_);
+ return error_;
+}
- return error;
+void JsonPrefStore::GetErrors(PrefReadError* error, bool* is_fatal) {
+ (*error) = error_;
Bernhard Bauer 2011/04/25 15:54:10 Nit: the parentheses are not actually necessary, b
altimofeev 2011/04/27 10:32:08 This is the matter of taste, I think. But grep say
+ (*is_fatal) = is_fatal_;
}
bool JsonPrefStore::WritePrefs() {

Powered by Google App Engine
This is Rietveld 408576698