blob: 5cd90d4e88c5e2ddf1ab2d7ae58d5cbc993f135e [file] [log] [blame]
// 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