Add base::GetDeleteFileCallback().
There exists many base::DeleteFile() callers that want to use PostTask()
APIs to delete a file on another task runner. To do so, they have to
write:
base::BindOnce(base::IgnoreResult(&base::DeleteFile), path, false)
To simply the callers, and help transition base::DeleteFile() to remove
its |recursive| boolean parameter, add base::GetDeleteFileCallback().
Now, callers can just write:
base::BindOnce(base::GetDeleteFileCallback(), path)
Use base::GetDeleteFileCallback() in chrome/, content/, and ui/.
Bug: 1009837
Change-Id: I06fc6c9585dcb04034b5b25f18f3e96ed94d32c8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2203412
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#777293}
diff --git a/base/files/file_util.cc b/base/files/file_util.cc
index 546934b7..41ee7ad 100644
--- a/base/files/file_util.cc
+++ b/base/files/file_util.cc
@@ -27,6 +27,18 @@
namespace base {
#if !defined(OS_NACL_NONSFI)
+namespace {
+
+void DeleteFileHelper(const FilePath& path) {
+ DeleteFile(path, /*recursive=*/false);
+}
+
+} // namespace
+
+OnceCallback<void(const FilePath&)> GetDeleteFileCallback() {
+ return BindOnce(&DeleteFileHelper);
+}
+
int64_t ComputeDirectorySize(const FilePath& root_path) {
int64_t running_size = 0;
FileEnumerator file_iter(root_path, true, FileEnumerator::FILES);
diff --git a/base/files/file_util.h b/base/files/file_util.h
index 76bd987..06b7833 100644
--- a/base/files/file_util.h
+++ b/base/files/file_util.h
@@ -23,6 +23,7 @@
#endif
#include "base/base_export.h"
+#include "base/callback_forward.h"
#include "base/containers/span.h"
#include "base/files/file.h"
#include "base/files/file_path.h"
@@ -87,6 +88,10 @@
// WARNING: USING THIS EQUIVALENT TO "rm -rf", SO USE WITH CAUTION.
BASE_EXPORT bool DeleteFileRecursively(const FilePath& path);
+// Simplified way to get a callback to do DeleteFile(path, false) and ignore the
+// DeleteFile() result.
+BASE_EXPORT OnceCallback<void(const FilePath&)> GetDeleteFileCallback();
+
#if defined(OS_WIN)
// Schedules to delete the given path, whether it's a file or a directory, until
// the operating system is restarted.
diff --git a/chrome/browser/apps/app_shim/app_shim_listener.mm b/chrome/browser/apps/app_shim/app_shim_listener.mm
index 344345d..51ead1c 100644
--- a/chrome/browser/apps/app_shim/app_shim_listener.mm
+++ b/chrome/browser/apps/app_shim/app_shim_listener.mm
@@ -63,8 +63,7 @@
FROM_HERE,
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), version_path,
- false));
+ base::BindOnce(base::GetDeleteFileCallback(), version_path));
}
}
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_data_base.cc b/chrome/browser/chromeos/app_mode/kiosk_app_data_base.cc
index e07dc6a..93347cf4 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_app_data_base.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_app_data_base.cc
@@ -123,8 +123,7 @@
if (!icon_path_.empty()) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), icon_path_,
- false));
+ base::BindOnce(base::GetDeleteFileCallback(), icon_path_));
}
}
diff --git a/chrome/browser/chromeos/crostini/crostini_export_import.cc b/chrome/browser/chromeos/crostini/crostini_export_import.cc
index a665d712..29d9f01 100644
--- a/chrome/browser/chromeos/crostini/crostini_export_import.cc
+++ b/chrome/browser/chromeos/crostini/crostini_export_import.cc
@@ -296,9 +296,8 @@
kCrostiniDefaultVmName, path, false,
base::BindOnce(&CrostiniExportImport::ExportAfterSharing,
weak_ptr_factory_.GetWeakPtr(),
- operation_data->container_id, std::move(callback))
-
- ));
+ operation_data->container_id,
+ std::move(callback))));
break;
case ExportImportType::IMPORT:
guest_os::GuestOsSharePath::GetForProfile(profile_)->SharePath(
@@ -356,8 +355,7 @@
// file is functionally the same as a successful cancel.
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- it->second->path(), false));
+ base::BindOnce(base::GetDeleteFileCallback(), it->second->path()));
RemoveTracker(it)->SetStatusCancelled();
break;
}
@@ -389,8 +387,7 @@
// file needs to be cleaned up.
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- it->second->path(), false));
+ base::BindOnce(base::GetDeleteFileCallback(), it->second->path()));
RemoveTracker(it)->SetStatusCancelled();
break;
}
@@ -401,8 +398,7 @@
LOG(ERROR) << "Error exporting " << int(result);
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- it->second->path(), false));
+ base::BindOnce(base::GetDeleteFileCallback(), it->second->path()));
switch (result) {
case CrostiniResult::CONTAINER_EXPORT_IMPORT_FAILED_VM_STOPPED:
enum_hist_result = ExportContainerResult::kFailedVmStopped;
diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.cc b/chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.cc
index dd7c2b2a..e37dbc3 100644
--- a/chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.cc
+++ b/chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.cc
@@ -955,8 +955,8 @@
image_properties->GetString(kImagePathNodeName, &image_path);
if (!image_path.empty()) {
background_task_runner_->PostTask(
- FROM_HERE, base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- base::FilePath(image_path), false));
+ FROM_HERE, base::BindOnce(base::GetDeleteFileCallback(),
+ base::FilePath(image_path)));
}
update->RemoveWithoutPathExpansion(user_id(), nullptr);
}
diff --git a/chrome/browser/chromeos/system_logs/debug_log_writer.cc b/chrome/browser/chromeos/system_logs/debug_log_writer.cc
index 5f9c3cc..ab77b844 100644
--- a/chrome/browser/chromeos/system_logs/debug_log_writer.cc
+++ b/chrome/browser/chromeos/system_logs/debug_log_writer.cc
@@ -49,8 +49,7 @@
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!succeeded) {
bool posted = g_sequenced_task_runner.Get()->PostTaskAndReply(
- FROM_HERE,
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), file_path, false),
+ FROM_HERE, base::BindOnce(base::GetDeleteFileCallback(), file_path),
base::BindOnce(std::move(callback), file_path, false));
DCHECK(posted);
return;
diff --git a/chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc b/chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc
index 1bc27e2..1216bac 100644
--- a/chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc
+++ b/chrome/browser/media/webrtc/webrtc_rtp_dump_handler.cc
@@ -64,15 +64,13 @@
if (incoming_state_ != STATE_NONE && !incoming_dump_path_.empty()) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- incoming_dump_path_, false));
+ base::BindOnce(base::GetDeleteFileCallback(), incoming_dump_path_));
}
if (outgoing_state_ != STATE_NONE && !outgoing_dump_path_.empty()) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- outgoing_dump_path_, false));
+ base::BindOnce(base::GetDeleteFileCallback(), outgoing_dump_path_));
}
}
@@ -295,8 +293,7 @@
if (!incoming_success) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- incoming_dump_path_, false));
+ base::BindOnce(base::GetDeleteFileCallback(), incoming_dump_path_));
DVLOG(2) << "Deleted invalid incoming dump "
<< incoming_dump_path_.value();
@@ -311,8 +308,7 @@
if (!outgoing_success) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile),
- outgoing_dump_path_, false));
+ base::BindOnce(base::GetDeleteFileCallback(), outgoing_dump_path_));
DVLOG(2) << "Deleted invalid outgoing dump "
<< outgoing_dump_path_.value();
diff --git a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc
index 189c83b..0a2c0ea 100644
--- a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc
+++ b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc
@@ -382,8 +382,7 @@
void DeleteTemporaryFile(const base::FilePath& file_path) {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(base::DeleteFile), file_path,
- false /* not recursive*/));
+ base::BindOnce(base::GetDeleteFileCallback(), file_path));
}
// A fake callback to be passed as CopyFileProgressCallback.
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index 5e291d2b..7f2fddd 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -244,8 +244,7 @@
FROM_HERE,
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), metrics_file,
- /*recursive=*/false));
+ base::BindOnce(base::GetDeleteFileCallback(), metrics_file));
}
}
diff --git a/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc b/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc
index 3e33799..4711ee1 100644
--- a/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc
+++ b/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc
@@ -33,9 +33,7 @@
const base::Closure& callback) {
base::ThreadPool::PostTaskAndReply(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), file_path,
- false /* recursive */),
- callback);
+ base::BindOnce(base::GetDeleteFileCallback(), file_path), callback);
}
// Compute a SHA256 digest using a background thread. The computed digest will
diff --git a/chrome/browser/safe_browsing/download_protection/download_feedback.cc b/chrome/browser/safe_browsing/download_protection/download_feedback.cc
index 05790fe..b3a1ee0b 100644
--- a/chrome/browser/safe_browsing/download_protection/download_feedback.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_feedback.cc
@@ -117,8 +117,7 @@
}
file_task_runner_->PostTask(
- FROM_HERE,
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), file_path_, false));
+ FROM_HERE, base::BindOnce(base::GetDeleteFileCallback(), file_path_));
}
void DownloadFeedbackImpl::Start(const base::Closure& finish_callback) {
diff --git a/chrome/browser/safe_browsing/download_protection/download_feedback_service.cc b/chrome/browser/safe_browsing/download_protection/download_feedback_service.cc
index c79c09b..11b276f 100644
--- a/chrome/browser/safe_browsing/download_protection/download_feedback_service.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_feedback_service.cc
@@ -162,8 +162,7 @@
service->BeginFeedback(ping_request, ping_response, path);
} else {
file_task_runner->PostTask(
- FROM_HERE,
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), path, false));
+ FROM_HERE, base::BindOnce(base::GetDeleteFileCallback(), path));
}
}
diff --git a/chrome/browser/search/instant_service.cc b/chrome/browser/search/instant_service.cc
index 3a510022..a78e8b9 100644
--- a/chrome/browser/search/instant_service.cc
+++ b/chrome/browser/search/instant_service.cc
@@ -962,7 +962,7 @@
chrome::kChromeSearchLocalNtpBackgroundFilename);
base::ThreadPool::PostTask(
FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()},
- base::BindOnce(IgnoreResult(&base::DeleteFile), path, false));
+ base::BindOnce(base::GetDeleteFileCallback(), path));
}
void InstantService::AddValidBackdropUrlForTesting(const GURL& url) const {
diff --git a/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc b/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
index 741d75b..3416a70 100644
--- a/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc
@@ -777,8 +777,7 @@
void CleanUp() {
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), zip_path_,
- false));
+ base::BindOnce(base::GetDeleteFileCallback(), zip_path_));
download_notifier_.reset();
if (drive_internals_) {
drive_internals_->OnZipDone();
diff --git a/chrome/browser/web_applications/components/web_app_file_handler_registration_win.cc b/chrome/browser/web_applications/components/web_app_file_handler_registration_win.cc
index e27ba3e..2cc0f67 100644
--- a/chrome/browser/web_applications/components/web_app_file_handler_registration_win.cc
+++ b/chrome/browser/web_applications/components/web_app_file_handler_registration_win.cc
@@ -302,8 +302,8 @@
base::ThreadPool::PostTask(
FROM_HERE,
{base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
- base::BindOnce(IgnoreResult(&base::DeleteFile),
- app_specific_launcher_path, /*recursively=*/false));
+ base::BindOnce(base::GetDeleteFileCallback(),
+ app_specific_launcher_path));
}
base::FilePath only_profile_with_app_installed;
if (IsWebAppLauncherRegisteredWithWindows(app_id, profile,
diff --git a/chrome/chrome_cleaner/components/recovery_component.cc b/chrome/chrome_cleaner/components/recovery_component.cc
index d6573a4b..c3876b73 100644
--- a/chrome/chrome_cleaner/components/recovery_component.cc
+++ b/chrome/chrome_cleaner/components/recovery_component.cc
@@ -275,7 +275,7 @@
}
base::ScopedClosureRunner delete_file(
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), crx_file, false));
+ base::BindOnce(base::GetDeleteFileCallback(), crx_file));
if (!SaveHttpResponseDataToFile(crx_file, http_response.get())) {
LOG(WARNING) << "Failed to save downloaded recovery component";
diff --git a/chrome/chrome_cleaner/logging/pending_logs_service.cc b/chrome/chrome_cleaner/logging/pending_logs_service.cc
index 976db32..2103ff6 100644
--- a/chrome/chrome_cleaner/logging/pending_logs_service.cc
+++ b/chrome/chrome_cleaner/logging/pending_logs_service.cc
@@ -63,7 +63,7 @@
// To get rid of the temporary file if we are not going to use it.
base::ScopedClosureRunner delete_file_closure(
- base::BindOnce(IgnoreResult(&base::DeleteFile), temp_file_path, false));
+ base::BindOnce(base::GetDeleteFileCallback(), temp_file_path));
if (base::WriteFile(temp_file_path, chrome_cleaner_report_string.c_str(),
chrome_cleaner_report_string.size()) <= 0) {
diff --git a/chrome/chrome_cleaner/test/generate_test_uws_test.cc b/chrome/chrome_cleaner/test/generate_test_uws_test.cc
index 71b5afc..5a43b0d 100644
--- a/chrome/chrome_cleaner/test/generate_test_uws_test.cc
+++ b/chrome/chrome_cleaner/test/generate_test_uws_test.cc
@@ -33,10 +33,10 @@
ASSERT_TRUE(base::DeleteFile(uws_file_b, /*recursive=*/false));
// Delete the output files on exit, including on early exit.
- base::ScopedClosureRunner delete_uws_file_a(base::BindOnce(
- base::IgnoreResult(&base::DeleteFile), uws_file_a, /*recursive=*/false));
- base::ScopedClosureRunner delete_uws_file_b(base::BindOnce(
- base::IgnoreResult(&base::DeleteFile), uws_file_b, /*recursive=*/false));
+ base::ScopedClosureRunner delete_uws_file_a(
+ base::BindOnce(base::GetDeleteFileCallback(), uws_file_a));
+ base::ScopedClosureRunner delete_uws_file_b(
+ base::BindOnce(base::GetDeleteFileCallback(), uws_file_b));
// Expect generate_test_uws to finish quickly with exit code 0 (success).
base::Process process(base::LaunchProcess(
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.cc b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
index cdc576d0..b064600 100644
--- a/content/browser/native_file_system/native_file_system_file_writer_impl.cc
+++ b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
@@ -326,8 +326,7 @@
// swap file and invoke the callback.
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), swap_path,
- /*recursive=*/false));
+ base::BindOnce(base::GetDeleteFileCallback(), swap_path));
std::move(callback).Run(native_file_system_error::FromStatus(
NativeFileSystemStatus::kOperationAborted,
"Failed to perform Safe Browsing check."));
@@ -367,8 +366,7 @@
// failed.
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), swap_path,
- /*recursive=*/false));
+ base::BindOnce(base::GetDeleteFileCallback(), swap_path));
std::move(callback).Run(native_file_system_error::FromStatus(
NativeFileSystemStatus::kOperationAborted,
"Write operation blocked by Safe Browsing."));
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index db76f65..3e382a6 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -522,8 +522,7 @@
FROM_HERE,
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), std::move(path),
- false));
+ base::BindOnce(base::GetDeleteFileCallback(), std::move(path)));
}
#endif
diff --git a/ui/gtk/print_dialog_gtk.cc b/ui/gtk/print_dialog_gtk.cc
index 3d140b7..9dbe823 100644
--- a/ui/gtk/print_dialog_gtk.cc
+++ b/ui/gtk/print_dialog_gtk.cc
@@ -519,8 +519,7 @@
FROM_HERE,
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN},
- base::BindOnce(base::IgnoreResult(&base::DeleteFile), path_to_pdf_,
- false));
+ base::BindOnce(base::GetDeleteFileCallback(), path_to_pdf_));
// Printing finished. Matches AddRef() in PrintDocument();
Release();
}