blob: e907efa800d3efd21ec4a7325e91d2b2fc2bc509 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/browsing_data/model/system_snapshots_cleaner.h"
#import <UIKit/UIKit.h>
#import "base/apple/foundation_util.h"
#import "base/files/file_util.h"
#import "base/functional/bind.h"
#import "base/location.h"
#import "base/path_service.h"
#import "base/strings/stringprintf.h"
#import "base/task/thread_pool.h"
namespace {
constexpr std::array<std::string_view, 4> kOrientationDescriptions = {
"LandscapeLeft",
"LandscapeRight",
"Portrait",
"PortraitUpsideDown",
};
// Delete all files in `paths`.
void DeleteAllFiles(std::vector<base::FilePath> paths) {
for (const auto& path : paths) {
base::DeleteFile(path);
}
}
// Returns the retina suffix.
std::string_view GetRetinaSuffix() {
CGFloat scale = [UIScreen mainScreen].scale;
if (scale == 2) {
return "@2x";
}
if (scale == 3) {
return "@3x";
}
return {};
}
} // namespace
void ClearIOSSnapshots(base::OnceClosure callback) {
// Generates a list containing all the possible snapshot paths because the
// list of snapshots stored on the device can't be obtained programmatically.
base::ThreadPool::PostTaskAndReply(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
base::BindOnce(&DeleteAllFiles, GetSnapshotsPaths()),
std::move(callback));
}
std::vector<base::FilePath> GetSnapshotsPaths() {
base::FilePath snapshots_dir;
base::PathService::Get(base::DIR_CACHE, &snapshots_dir);
const std::string_view retina_suffix = GetRetinaSuffix();
// Snapshots are located in a path with the bundle ID used twice.
snapshots_dir = snapshots_dir.Append("Snapshots")
.Append(base::apple::BaseBundleID())
.Append(base::apple::BaseBundleID());
std::vector<base::FilePath> snapshots_paths;
snapshots_paths.reserve(kOrientationDescriptions.size());
for (std::string_view orientation_description : kOrientationDescriptions) {
std::string snapshot_filename =
base::StringPrintf("UIApplicationAutomaticSnapshotDefault-%s%s.png",
orientation_description, retina_suffix);
base::FilePath snapshot_path = snapshots_dir.Append(snapshot_filename);
snapshots_paths.push_back(std::move(snapshot_path));
}
return snapshots_paths;
}