Index: chrome/common/json_pref_store.cc |
diff --git a/chrome/common/json_pref_store.cc b/chrome/common/json_pref_store.cc |
index ed30346ff048190d9ad004b210f14be3ffca8cf7..3c6a643ae6840ba1af70cbaee4334dbd95e39139 100644 |
--- a/chrome/common/json_pref_store.cc |
+++ b/chrome/common/json_pref_store.cc |
@@ -13,6 +13,8 @@ |
#include "base/json/json_string_value_serializer.h" |
#include "base/memory/ref_counted.h" |
#include "base/message_loop_proxy.h" |
+#include "base/sequenced_task_runner.h" |
+#include "base/threading/sequenced_worker_pool.h" |
#include "base/values.h" |
namespace { |
@@ -26,25 +28,25 @@ class FileThreadDeserializer |
: public base::RefCountedThreadSafe<FileThreadDeserializer> { |
public: |
FileThreadDeserializer(JsonPrefStore* delegate, |
- base::MessageLoopProxy* file_loop_proxy) |
+ base::SequencedTaskRunner* sequenced_task_runner) |
: no_dir_(false), |
error_(PersistentPrefStore::PREF_READ_ERROR_NONE), |
delegate_(delegate), |
- file_loop_proxy_(file_loop_proxy), |
+ sequenced_task_runner_(sequenced_task_runner), |
origin_loop_proxy_(base::MessageLoopProxy::current()) { |
} |
void Start(const FilePath& path) { |
DCHECK(origin_loop_proxy_->BelongsToCurrentThread()); |
- file_loop_proxy_->PostTask( |
+ sequenced_task_runner_->PostTask( |
FROM_HERE, |
base::Bind(&FileThreadDeserializer::ReadFileAndReport, |
this, path)); |
} |
- // Deserializes JSON on the file thread. |
+ // Deserializes JSON on the sequenced task runner. |
void ReadFileAndReport(const FilePath& path) { |
- DCHECK(file_loop_proxy_->BelongsToCurrentThread()); |
+ DCHECK(sequenced_task_runner_->RunsTasksOnCurrentThread()); |
value_.reset(DoReading(path, &error_, &no_dir_)); |
@@ -84,9 +86,9 @@ class FileThreadDeserializer |
bool no_dir_; |
PersistentPrefStore::PrefReadError error_; |
scoped_ptr<Value> value_; |
- scoped_refptr<JsonPrefStore> delegate_; |
- scoped_refptr<base::MessageLoopProxy> file_loop_proxy_; |
- scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_; |
+ const scoped_refptr<JsonPrefStore> delegate_; |
+ const scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; |
+ const scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_; |
}; |
// static |
@@ -137,13 +139,25 @@ void FileThreadDeserializer::HandleErrors( |
} // namespace |
+scoped_refptr<base::SequencedTaskRunner> JsonPrefStore::GetTaskRunnerForFile( |
+ const FilePath& filename, base::SequencedWorkerPool* worker_pool) { |
Mattias Nissler (ping if slow)
2012/10/22 17:28:21
parameters on separate lines.
zel
2012/10/24 02:20:11
Done.
|
+ return worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
+ worker_pool->GetNamedSequenceToken(filename.AsUTF8Unsafe()), |
Mattias Nissler (ping if slow)
2012/10/22 17:28:21
indentation
Mattias Nissler (ping if slow)
2012/10/22 17:28:21
The token name should probably be json_pref_store-
zel
2012/10/24 02:20:11
Done.
zel
2012/10/24 02:20:11
Done.
|
+ base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
+} |
+ |
+JsonPrefStore* JsonPrefStore::Create( |
+ const FilePath& filename, base::SequencedTaskRunner* task_runner) { |
Mattias Nissler (ping if slow)
2012/10/22 17:28:21
ditto.
Also, what is this factory function good f
zel
2012/10/24 02:20:11
long time ago it used to do waaay more but then CR
|
+ return new JsonPrefStore(filename, task_runner); |
+} |
+ |
JsonPrefStore::JsonPrefStore(const FilePath& filename, |
- base::MessageLoopProxy* file_message_loop_proxy) |
+ base::SequencedTaskRunner* sequenced_task_runner) |
: path_(filename), |
- file_message_loop_proxy_(file_message_loop_proxy), |
+ sequenced_task_runner_(sequenced_task_runner), |
prefs_(new DictionaryValue()), |
read_only_(false), |
- writer_(filename, file_message_loop_proxy), |
+ writer_(filename, sequenced_task_runner), |
error_delegate_(NULL), |
initialized_(false), |
read_error_(PREF_READ_ERROR_OTHER) { |
@@ -245,7 +259,7 @@ void JsonPrefStore::ReadPrefsAsync(ReadErrorDelegate *error_delegate) { |
// Start async reading of the preferences file. It will delete itself |
// in the end. |
scoped_refptr<FileThreadDeserializer> deserializer( |
- new FileThreadDeserializer(this, file_message_loop_proxy_.get())); |
+ new FileThreadDeserializer(this, sequenced_task_runner_.get())); |
deserializer->Start(path_); |
} |