| Index: components/prefs/json_pref_store.cc
|
| diff --git a/components/prefs/json_pref_store.cc b/components/prefs/json_pref_store.cc
|
| index e91a4063f7bf4307486017741afe8b666a27c25d..811d2be07879e0de7628d4772b8790a37c239578 100644
|
| --- a/components/prefs/json_pref_store.cc
|
| +++ b/components/prefs/json_pref_store.cc
|
| @@ -172,8 +172,7 @@ JsonPrefStore::JsonPrefStore(
|
| filtering_in_progress_(false),
|
| pending_lossy_write_(false),
|
| read_error_(PREF_READ_ERROR_NONE),
|
| - has_pending_successful_write_reply_(false),
|
| - has_pending_write_callbacks_(false),
|
| + has_pending_write_reply_(false),
|
| write_count_histogram_(writer_.commit_interval(), path_) {
|
| DCHECK(!path_.empty());
|
| }
|
| @@ -330,21 +329,22 @@ void JsonPrefStore::RunOrScheduleNextSuccessfulWriteCallback(
|
| bool write_success) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - has_pending_write_callbacks_ = false;
|
| - if (has_pending_successful_write_reply_) {
|
| - has_pending_successful_write_reply_ = false;
|
| + has_pending_write_reply_ = false;
|
| + if (!on_next_successful_write_reply_.is_null()) {
|
| + base::Closure on_successful_write =
|
| + std::move(on_next_successful_write_reply_);
|
| if (write_success) {
|
| - on_next_successful_write_reply_.Run();
|
| + on_successful_write.Run();
|
| } else {
|
| - RegisterOnNextSuccessfulWriteReply(on_next_successful_write_reply_);
|
| + RegisterOnNextSuccessfulWriteReply(on_successful_write);
|
| }
|
| }
|
| }
|
|
|
| // static
|
| void JsonPrefStore::PostWriteCallback(
|
| - const base::Callback<void(bool success)>& on_next_write_reply,
|
| const base::Callback<void(bool success)>& on_next_write_callback,
|
| + const base::Callback<void(bool success)>& on_next_write_reply,
|
| scoped_refptr<base::SequencedTaskRunner> reply_task_runner,
|
| bool write_success) {
|
| if (!on_next_write_callback.is_null())
|
| @@ -359,22 +359,21 @@ void JsonPrefStore::PostWriteCallback(
|
| void JsonPrefStore::RegisterOnNextSuccessfulWriteReply(
|
| const base::Closure& on_next_successful_write_reply) {
|
| DCHECK(CalledOnValidThread());
|
| - DCHECK(!has_pending_successful_write_reply_);
|
| + DCHECK(on_next_successful_write_reply_.is_null());
|
|
|
| - has_pending_successful_write_reply_ = true;
|
| on_next_successful_write_reply_ = on_next_successful_write_reply;
|
|
|
| // If there are pending callbacks, avoid erasing them; the reply will be used
|
| // as we set |on_next_successful_write_reply_|. Otherwise, setup a reply with
|
| // an empty callback.
|
| - if (!has_pending_write_callbacks_) {
|
| + if (!has_pending_write_reply_) {
|
| + has_pending_write_reply_ = true;
|
| writer_.RegisterOnNextWriteCallbacks(
|
| base::Closure(),
|
| base::Bind(
|
| - &PostWriteCallback,
|
| + &PostWriteCallback, base::Callback<void(bool success)>(),
|
| base::Bind(&JsonPrefStore::RunOrScheduleNextSuccessfulWriteCallback,
|
| AsWeakPtr()),
|
| - base::Callback<void(bool success)>(),
|
| base::SequencedTaskRunnerHandle::Get()));
|
| }
|
| }
|
| @@ -382,17 +381,16 @@ void JsonPrefStore::RegisterOnNextSuccessfulWriteReply(
|
| void JsonPrefStore::RegisterOnNextWriteSynchronousCallbacks(
|
| OnWriteCallbackPair callbacks) {
|
| DCHECK(CalledOnValidThread());
|
| - DCHECK(!has_pending_write_callbacks_);
|
|
|
| - has_pending_write_callbacks_ = true;
|
| + has_pending_write_reply_ = true;
|
|
|
| writer_.RegisterOnNextWriteCallbacks(
|
| callbacks.first,
|
| base::Bind(
|
| - &PostWriteCallback,
|
| + &PostWriteCallback, callbacks.second,
|
| base::Bind(&JsonPrefStore::RunOrScheduleNextSuccessfulWriteCallback,
|
| AsWeakPtr()),
|
| - callbacks.second, base::SequencedTaskRunnerHandle::Get()));
|
| + base::SequencedTaskRunnerHandle::Get()));
|
| }
|
|
|
| void JsonPrefStore::ClearMutableValues() {
|
|
|