Use absl::Cleanup in //components/password_manager
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: I8730b7b3e1df035378e1b1c67d95b3287336bcab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5530367
Reviewed-by: Ioana Pandele <ioanap@chromium.org>
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1299360}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.