remove_stale_data.cc 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/android/remove_stale_data.h"
  5. #include "base/files/file_path.h"
  6. #include "base/files/file_util.h"
  7. #include "base/metrics/histogram_functions.h"
  8. #include "base/task/task_traits.h"
  9. #include "base/task/thread_pool.h"
  10. #include "base/trace_event/base_tracing.h"
  11. namespace base {
  12. namespace android {
  13. namespace {
  14. // These values are persisted to logs. Entries should not be renumbered and
  15. // numeric values should never be reused.
  16. enum class DeleteResult {
  17. kNotFound = 0,
  18. kDeleted = 1,
  19. kDeleteError = 2,
  20. kMaxValue = kDeleteError,
  21. };
  22. void RecordDeleteResult(DeleteResult result) {
  23. base::UmaHistogramEnumeration("NetworkService.ClearStaleDataDirectoryResult",
  24. result);
  25. }
  26. void RemoveStaleDataDirectoryOnPool(const base::FilePath& data_directory) {
  27. TRACE_EVENT0("startup", "RemoveStaleDataDirectoryOnPool");
  28. if (!base::PathExists(data_directory)) {
  29. RecordDeleteResult(DeleteResult::kNotFound);
  30. return;
  31. }
  32. if (base::DeletePathRecursively(data_directory)) {
  33. RecordDeleteResult(DeleteResult::kDeleted);
  34. return;
  35. }
  36. RecordDeleteResult(DeleteResult::kDeleteError);
  37. }
  38. } // namespace
  39. void RemoveStaleDataDirectory(const base::FilePath& data_directory) {
  40. base::ThreadPool::PostTask(
  41. FROM_HERE,
  42. {base::TaskPriority::BEST_EFFORT, base::MayBlock(),
  43. base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
  44. base::BindOnce(&RemoveStaleDataDirectoryOnPool, data_directory));
  45. }
  46. } // namespace android
  47. } // namespace base