// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/android/remove_stale_data.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/metrics/histogram_functions.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" #include "base/trace_event/base_tracing.h" namespace base { namespace android { namespace { // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class DeleteResult { kNotFound = 0, kDeleted = 1, kDeleteError = 2, kMaxValue = kDeleteError, }; void RecordDeleteResult(DeleteResult result) { base::UmaHistogramEnumeration("NetworkService.ClearStaleDataDirectoryResult", result); } void RemoveStaleDataDirectoryOnPool(const base::FilePath& data_directory) { TRACE_EVENT0("startup", "RemoveStaleDataDirectoryOnPool"); if (!base::PathExists(data_directory)) { RecordDeleteResult(DeleteResult::kNotFound); return; } if (base::DeletePathRecursively(data_directory)) { RecordDeleteResult(DeleteResult::kDeleted); return; } RecordDeleteResult(DeleteResult::kDeleteError); } } // namespace void RemoveStaleDataDirectory(const base::FilePath& data_directory) { base::ThreadPool::PostTask( FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, base::BindOnce(&RemoveStaleDataDirectoryOnPool, data_directory)); } } // namespace android } // namespace base