0

Use absl::Cleanup in storage::DatabaseTracker test helpers.

absl::Cleanup is a helper to run arbitrary code when the absl::Cleanup
object goes out of scope, which is useful for executing cleanup code or
ensuring something always runs. The current //base equivalent is
base::ScopedClosureRunner, which executes a base::OnceClosure when the
runner object goes out of scope.

Compared to base::ScopedClosureRunner, there are several benefits to
using absl::Cleanup:
- works with capturing lambdas, which are often much more concise than
  base::BindOnce()
- requires no heap allocations
- less impact on binary size since absl::Cleanup instantiates fewer
  templates

This CL is part of a project-wide cleanup to migrate to absl::Cleanup
where appropriate. The general criteria for migrating usages of
base::ScopedCLosureRunner:
- The cleanup scoper must not escape block scope, e.g. it is not
  returned from the function, passed to another function, or bound into
  a callback.
- The cleanup scoper's type does not need to be named, e.g. the scoper
  construction can use CTAD:
    absl::Cleanup run_at_exit = [] { RestoreSettings(original); };
  Note: having to write absl::Cleanup<decltype(lambda)> as a type is
  often a sign that absl::Cleanup is not a good fit for how the code is
  currently structured.
- The cleanup scoper is not simply running a base::OnceClosure.

Bug: 339492604
Change-Id: Ic09233219ede932a5b4d6890fe294e6dfef86e5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5530333
Reviewed-by: Ayu Ishii <ayui@chromium.org>
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1298928}
This commit is contained in:
Daniel Cheng
2024-05-09 22:27:05 +00:00
committed by Chromium LUCI CQ
parent 78bf4e3236
commit 81da54551c

@ -13,7 +13,6 @@
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/callback_helpers.h"
#include "base/gtest_prod_util.h"
#include "base/memory/ptr_util.h"
#include "base/memory/scoped_refptr.h"
@ -28,6 +27,7 @@
#include "storage/browser/quota/quota_manager_proxy.h"
#include "storage/common/database/database_identifier.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/cleanup/cleanup.h"
#include "third_party/sqlite/sqlite3.h"
namespace storage {
@ -197,8 +197,7 @@ class DatabaseTracker_TestHelper_Test {
base::RunLoop run_loop;
tracker->task_runner()->PostTask(
FROM_HERE, base::BindLambdaForTesting([&]() {
base::ScopedClosureRunner quit_runner(
base::BindLambdaForTesting([&]() { run_loop.Quit(); }));
absl::Cleanup quit_runner = [&] { run_loop.Quit(); };
// Create and open three databases.
int64_t database_size = 0;
@ -301,8 +300,7 @@ class DatabaseTracker_TestHelper_Test {
base::RunLoop run_loop;
tracker->task_runner()->PostTask(
FROM_HERE, base::BindLambdaForTesting([&]() {
base::ScopedClosureRunner quit_runner(
base::BindLambdaForTesting([&]() { run_loop.Quit(); }));
absl::Cleanup quit_runner = [&] { run_loop.Quit(); };
// Add two observers.
TestObserver observer1;
@ -452,8 +450,7 @@ class DatabaseTracker_TestHelper_Test {
base::RunLoop run_loop;
tracker->task_runner()->PostTask(
FROM_HERE, base::BindLambdaForTesting([&]() {
base::ScopedClosureRunner quit_runner(
base::BindLambdaForTesting([&]() { run_loop.Quit(); }));
absl::Cleanup quit_runner = [&] { run_loop.Quit(); };
EXPECT_TRUE(test_quota_proxy->registered_client_);
@ -583,8 +580,7 @@ class DatabaseTracker_TestHelper_Test {
base::RunLoop run_loop;
tracker->task_runner()->PostTask(
FROM_HERE, base::BindLambdaForTesting([&]() {
base::ScopedClosureRunner quit_runner(
base::BindLambdaForTesting([&]() { run_loop.Quit(); }));
absl::Cleanup quit_runner = [&] { run_loop.Quit(); };
// Starts off with no databases.
std::vector<OriginInfo> infos;
@ -641,8 +637,7 @@ class DatabaseTracker_TestHelper_Test {
base::RunLoop run_loop;
tracker->task_runner()->PostTask(
FROM_HERE, base::BindLambdaForTesting([&]() {
base::ScopedClosureRunner quit_runner(
base::BindLambdaForTesting([&]() { run_loop.Quit(); }));
absl::Cleanup quit_runner = [&] { run_loop.Quit(); };
// Setup to observe OnScheduledForDelete notifications.
TestObserver observer(false, true);