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