[go: nahoru, domu]

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();
 }