Chromium Code Reviews| 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..cd411d9bcdd1e25318a0fed4f077759d7888e381 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/task_runner.h" |
| +#include "base/threading/sequenced_worker_pool.h" |
| #include "base/values.h" |
| namespace { |
| @@ -26,17 +28,17 @@ class FileThreadDeserializer |
| : public base::RefCountedThreadSafe<FileThreadDeserializer> { |
| public: |
| FileThreadDeserializer(JsonPrefStore* delegate, |
| - base::MessageLoopProxy* file_loop_proxy) |
| + base::TaskRunner* task_runner) |
| : no_dir_(false), |
| error_(PersistentPrefStore::PREF_READ_ERROR_NONE), |
| delegate_(delegate), |
| - file_loop_proxy_(file_loop_proxy), |
| + task_runner_(task_runner), |
| origin_loop_proxy_(base::MessageLoopProxy::current()) { |
| } |
| void Start(const FilePath& path) { |
| DCHECK(origin_loop_proxy_->BelongsToCurrentThread()); |
| - file_loop_proxy_->PostTask( |
| + task_runner_->PostTask( |
| FROM_HERE, |
| base::Bind(&FileThreadDeserializer::ReadFileAndReport, |
| this, path)); |
| @@ -44,7 +46,7 @@ class FileThreadDeserializer |
| // Deserializes JSON on the file thread. |
| void ReadFileAndReport(const FilePath& path) { |
| - DCHECK(file_loop_proxy_->BelongsToCurrentThread()); |
| + DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
| value_.reset(DoReading(path, &error_, &no_dir_)); |
| @@ -85,7 +87,7 @@ class FileThreadDeserializer |
| PersistentPrefStore::PrefReadError error_; |
| scoped_ptr<Value> value_; |
| scoped_refptr<JsonPrefStore> delegate_; |
| - scoped_refptr<base::MessageLoopProxy> file_loop_proxy_; |
| + scoped_refptr<base::TaskRunner> task_runner_; |
| scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_; |
| }; |
| @@ -137,18 +139,35 @@ void FileThreadDeserializer::HandleErrors( |
| } // namespace |
| +JsonPrefStore* JsonPrefStore::Create( |
| + const FilePath& filename, base::SequencedWorkerPool* worker_pool) { |
| + // Make sure that write requests for the same file don't step on each other |
| + // by using |
|
eroman
2012/10/05 20:38:36
this sentence doesn't end.
zel
2012/10/05 20:54:28
Done.
|
| + scoped_refptr<base::SequencedTaskRunner> task_runner = |
| + worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| + worker_pool->GetNamedSequenceToken(filename.value()), |
| + base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
| + return JsonPrefStore::Create(filename, task_runner.get()); |
| +} |
| + |
| +JsonPrefStore* JsonPrefStore::Create(const FilePath& filename, |
| + base::TaskRunner* task_runner) { |
| + return new JsonPrefStore(filename, task_runner); |
| +} |
| + |
| JsonPrefStore::JsonPrefStore(const FilePath& filename, |
| - base::MessageLoopProxy* file_message_loop_proxy) |
| + base::TaskRunner* task_runner) |
| : path_(filename), |
| - file_message_loop_proxy_(file_message_loop_proxy), |
| + task_runner_(task_runner), |
| prefs_(new DictionaryValue()), |
| read_only_(false), |
| - writer_(filename, file_message_loop_proxy), |
| + writer_(filename, task_runner), |
| error_delegate_(NULL), |
| initialized_(false), |
| read_error_(PREF_READ_ERROR_OTHER) { |
| } |
| + |
|
eroman
2012/10/05 20:38:36
is the extra space intentional?
zel
2012/10/05 20:54:28
Done.
|
| PrefStore::ReadResult JsonPrefStore::GetValue(const std::string& key, |
| const Value** result) const { |
| Value* tmp = NULL; |
| @@ -245,7 +264,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, task_runner_.get())); |
| deserializer->Start(path_); |
| } |