// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/scanning/scanning_file_path_helper.h"
#include <string>
#include "base/check.h"
#include "base/files/file_path.h"
#include "chromeos/strings/grit/chromeos_strings.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
namespace {
// The default root path for connected removable media.
constexpr char kRemovableMediaPath[] = "/media/removable";
// "root" is appended to the user's Google Drive directory to form the
// complete path.
constexpr char kRoot[] = "root";
} // namespace
ScanningFilePathHelper::ScanningFilePathHelper() = default;
ScanningFilePathHelper::ScanningFilePathHelper(
const base::FilePath& google_drive_path,
const base::FilePath& my_files_path)
: google_drive_path_(google_drive_path),
my_files_path_(my_files_path),
removable_media_path_(base::FilePath(kRemovableMediaPath)) {}
ScanningFilePathHelper::ScanningFilePathHelper(ScanningFilePathHelper&& other) =
default;
ScanningFilePathHelper& ScanningFilePathHelper::operator=(
ScanningFilePathHelper&& other) = default;
ScanningFilePathHelper::~ScanningFilePathHelper() = default;
std::string ScanningFilePathHelper::GetBaseNameFromPath(
const base::FilePath& path) const {
DCHECK(!my_files_path_.empty());
// Returns string "Google Drive" from path "/media/fuse/drivefs-xxx/root".
if (!google_drive_path_.empty() && google_drive_path_.Append(kRoot) == path)
return l10n_util::GetStringUTF8(IDS_SCANNING_APP_MY_DRIVE);
// Returns string "My Files" from path "/home/chronos/u-xxx/MyFiles".
if (my_files_path_ == path)
return l10n_util::GetStringUTF8(IDS_SCANNING_APP_MY_FILES_SELECT_OPTION);
// Returns base name as is from |path|.
return path.BaseName().value();
}
base::FilePath ScanningFilePathHelper::GetMyFilesPath() const {
return my_files_path_;
}
bool ScanningFilePathHelper::IsFilePathSupported(
const base::FilePath& path_to_file) const {
DCHECK(!my_files_path_.empty());
return path_to_file == my_files_path_ ||
(!path_to_file.ReferencesParent() &&
((!google_drive_path_.empty() &&
google_drive_path_.IsParent(path_to_file)) ||
my_files_path_.IsParent(path_to_file) ||
removable_media_path_.IsParent(path_to_file)));
}
void ScanningFilePathHelper::SetRemoveableMediaPathForTesting(
const base::FilePath& path) {
removable_media_path_ = path;
}
} // namespace ash