Skip to content

Commit

Permalink
[103] Quota: Use BindPostTask in QuotaManagerProxy
Browse files Browse the repository at this point in the history
This change updates QuotaManagerProxy to use
base::BindPostTask to ensure callbacks are run or
destroyed on the specified task runner. The main difference
between the existing logic is that if the callback
is never run, it may not be destroyed on the correct task
runner. base::BindPostTask makes sure this doesn't happen.

Bug: 1324864
Change-Id: Ifd123031309e29a22761b8aa88ef2a216ad45c70
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3647916
Auto-Submit: Ayu Ishii <ayui@chromium.org>
Reviewed-by: Austin Sullivan <asully@chromium.org>
Commit-Queue: Austin Sullivan <asully@chromium.org>
Cr-Commit-Position: refs/branch-heads/5060@{#28}
Cr-Branched-From: b83393d-refs/heads/main@{#1002911}
  • Loading branch information
ayuishii authored and Chromium LUCI CQ committed May 16, 2022
1 parent 407eae3 commit 5a3f333
Showing 1 changed file with 8 additions and 33 deletions.
41 changes: 8 additions & 33 deletions storage/browser/quota/quota_manager_proxy.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "base/sequence_checker.h"
#include "base/strings/string_number_conversions.h"
#include "base/synchronization/waitable_event.h"
#include "base/task/bind_post_task.h"
#include "base/task/sequenced_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
Expand All @@ -36,26 +37,6 @@ using ::blink::StorageKey;

namespace storage {

namespace {

template <typename T>
void RunCallbackOnCorrectSequence(
scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
base::OnceCallback<void(T)> callback,
T value) {
DCHECK(callback_task_runner);
DCHECK(callback);

auto closure = base::BindOnce(std::move(callback), std::move(value));
if (callback_task_runner->RunsTasksInCurrentSequence()) {
std::move(closure).Run();
return;
}
callback_task_runner->PostTask(FROM_HERE, std::move(closure));
}

} // namespace

QuotaManagerProxy::QuotaManagerProxy(
QuotaManagerImpl* quota_manager_impl,
scoped_refptr<base::SequencedTaskRunner> quota_manager_impl_task_runner,
Expand Down Expand Up @@ -130,8 +111,7 @@ void QuotaManagerProxy::GetOrCreateBucket(
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond =
base::BindOnce(&RunCallbackOnCorrectSequence<QuotaErrorOr<BucketInfo>>,
std::move(callback_task_runner), std::move(callback));
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(QuotaError::kUnknownError);
return;
Expand Down Expand Up @@ -201,8 +181,7 @@ void QuotaManagerProxy::GetOrCreateBucketDeprecated(
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond =
base::BindOnce(&RunCallbackOnCorrectSequence<QuotaErrorOr<BucketInfo>>,
std::move(callback_task_runner), std::move(callback));
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(QuotaError::kUnknownError);
return;
Expand Down Expand Up @@ -233,8 +212,7 @@ void QuotaManagerProxy::CreateBucketForTesting(
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond =
base::BindOnce(&RunCallbackOnCorrectSequence<QuotaErrorOr<BucketInfo>>,
std::move(callback_task_runner), std::move(callback));
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(QuotaError::kUnknownError);
return;
Expand Down Expand Up @@ -265,8 +243,7 @@ void QuotaManagerProxy::GetBucket(
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond =
base::BindOnce(&RunCallbackOnCorrectSequence<QuotaErrorOr<BucketInfo>>,
std::move(callback_task_runner), std::move(callback));
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(QuotaError::kUnknownError);
return;
Expand Down Expand Up @@ -294,8 +271,7 @@ void QuotaManagerProxy::GetBucketById(
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond =
base::BindOnce(&RunCallbackOnCorrectSequence<QuotaErrorOr<BucketInfo>>,
std::move(callback_task_runner), std::move(callback));
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(QuotaError::kUnknownError);
return;
Expand Down Expand Up @@ -323,9 +299,8 @@ void QuotaManagerProxy::DeleteBucket(

DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);

auto respond = base::BindOnce(
&RunCallbackOnCorrectSequence<blink::mojom::QuotaStatusCode>,
std::move(callback_task_runner), std::move(callback));
auto respond =
base::BindPostTask(std::move(callback_task_runner), std::move(callback));
if (!quota_manager_impl_) {
std::move(respond).Run(blink::mojom::QuotaStatusCode::kUnknown);
return;
Expand Down

0 comments on commit 5a3f333

Please sign in to comment.