| Index: base/prefs/json_pref_store.cc
|
| diff --git a/base/prefs/json_pref_store.cc b/base/prefs/json_pref_store.cc
|
| index 18dc0b76c1ff50ce1c5c168abaea827c492613c8..9e1e7774a64983af82fa90808b02db038e584171 100644
|
| --- a/base/prefs/json_pref_store.cc
|
| +++ b/base/prefs/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
|
| @@ -98,7 +100,8 @@ void FileThreadDeserializer::HandleErrors(
|
| PersistentPrefStore::PrefReadError* error) {
|
| *error = PersistentPrefStore::PREF_READ_ERROR_NONE;
|
| if (!value) {
|
| - DVLOG(1) << "Error while loading JSON file: " << error_msg;
|
| + DVLOG(1) << "Error while loading JSON file: " << error_msg
|
| + << ", file: " << path.value();
|
| switch (error_code) {
|
| case JSONFileValueSerializer::JSON_ACCESS_DENIED:
|
| *error = PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED;
|
| @@ -137,13 +140,23 @@ void FileThreadDeserializer::HandleErrors(
|
|
|
| } // namespace
|
|
|
| +scoped_refptr<base::SequencedTaskRunner> JsonPrefStore::GetTaskRunnerForFile(
|
| + const FilePath& filename,
|
| + base::SequencedWorkerPool* worker_pool) {
|
| + std::string token("json_pref_store-");
|
| + token.append(filename.AsUTF8Unsafe());
|
| + return worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
|
| + worker_pool->GetNamedSequenceToken(token),
|
| + base::SequencedWorkerPool::BLOCK_SHUTDOWN);
|
| +}
|
| +
|
| 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 +258,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_);
|
| }
|
|
|
|
|