blob: aa002bf737f977b9a6f87cb92b92b06d7c4390f8 [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 "services/network/public/cpp/transferable_directory.h"
#include "base/logging.h"
#include "base/notreached.h"
#include "services/network/public/cpp/network_service_buildflags.h"
namespace network {
TransferableDirectory::TransferableDirectory() = default;
TransferableDirectory::TransferableDirectory(TransferableDirectory&& other) {
*this = std::move(other);
}
TransferableDirectory::TransferableDirectory(const base::FilePath& path)
: path_(path) {}
TransferableDirectory::TransferableDirectory(mojo::PlatformHandle handle)
: handle_(std::move(handle)) {}
TransferableDirectory::~TransferableDirectory() = default;
void TransferableDirectory::operator=(TransferableDirectory&& other) {
if (other.HasValidHandle()) {
handle_ = other.TakeHandle();
path_ = {};
} else {
handle_ = {};
path_ = other.path();
}
}
void TransferableDirectory::operator=(const base::FilePath& path) {
// Path cannot be mutated if OpenForTransfer() was called.
DCHECK(!HasValidHandle());
path_ = path;
}
const base::FilePath& TransferableDirectory::path() const {
return path_;
}
void TransferableDirectory::ClearPath() {
path_ = {};
}
// static
bool TransferableDirectory::IsOpenForTransferRequired() {
#if BUILDFLAG(IS_DIRECTORY_TRANSFER_REQUIRED)
return true;
#else
return false;
#endif
}
bool TransferableDirectory::NeedsMount() const {
if (HasValidHandle()) {
return true;
}
return false;
}
mojo::PlatformHandle TransferableDirectory::TakeHandle() {
DCHECK(HasValidHandle());
mojo::PlatformHandle output;
std::swap(handle_, output);
return output;
}
#if !BUILDFLAG(IS_DIRECTORY_TRANSFER_REQUIRED)
void TransferableDirectory::OpenForTransfer() {
NOTREACHED() << "Directory transfer not supported on this platform.";
}
[[nodiscard]] base::OnceClosure TransferableDirectory::Mount() {
NOTREACHED() << "Directory transfer not supported on this platform.";
}
#endif // BUILDFLAG(IS_DIRECTORY_TRANSFER_REQUIRED)
} // namespace network