| // Copyright 2023 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/sessions/model/session_io_request.h" |
| |
| #import "base/check.h" |
| #import "base/threading/scoped_blocking_call.h" |
| #import "ios/chrome/browser/sessions/model/session_internal_util.h" |
| #import "third_party/protobuf/src/google/protobuf/message_lite.h" |
| |
| namespace ios::sessions { |
| |
| WriteDataIORequest::WriteDataIORequest(base::FilePath path, NSData* data) |
| : path_(std::move(path)), data_(data) { |
| DCHECK(path_.IsAbsolute()); |
| DCHECK(data_.length); |
| } |
| |
| WriteDataIORequest::~WriteDataIORequest() = default; |
| |
| void WriteDataIORequest::Execute() const { |
| // Ignore the result as there is nothing that can be done by this point |
| // if the write fails, and `ios::sessions::WriteFile()` already reports |
| // the failure to the log. |
| base::ScopedBlockingCall _(FROM_HERE, base::BlockingType::MAY_BLOCK); |
| std::ignore = ios::sessions::WriteFile(path_, data_); |
| } |
| |
| WriteProtoIORequest::WriteProtoIORequest(base::FilePath path, |
| std::unique_ptr<Proto> proto) |
| : path_(std::move(path)), proto_(std::move(proto)) { |
| DCHECK(path_.IsAbsolute()); |
| DCHECK(proto_); |
| } |
| |
| WriteProtoIORequest::~WriteProtoIORequest() = default; |
| |
| void WriteProtoIORequest::Execute() const { |
| // Ignore the result as there is nothing that can be done by this point |
| // if the write fails, and `ios::sessions::WriteProto()` already reports |
| // the failure to the log. |
| base::ScopedBlockingCall _(FROM_HERE, base::BlockingType::MAY_BLOCK); |
| std::ignore = ios::sessions::WriteProto(path_, *proto_); |
| } |
| |
| CopyPathIORequest::~CopyPathIORequest() = default; |
| |
| CopyPathIORequest::CopyPathIORequest(base::FilePath from_path, |
| base::FilePath dest_path) |
| : from_path_(std::move(from_path)), dest_path_(std::move(dest_path)) { |
| DCHECK(from_path_.IsAbsolute()); |
| DCHECK(dest_path_.IsAbsolute()); |
| } |
| |
| void CopyPathIORequest::Execute() const { |
| // Ignore the result as there is nothing that can be done by this point |
| // if the write fails. |
| base::ScopedBlockingCall _(FROM_HERE, base::BlockingType::MAY_BLOCK); |
| std::ignore = ios::sessions::CopyDirectory(from_path_, dest_path_); |
| } |
| |
| DeletePathIORequest::~DeletePathIORequest() = default; |
| |
| DeletePathIORequest::DeletePathIORequest(base::FilePath path) |
| : path_(std::move(path)) { |
| DCHECK(path_.IsAbsolute()); |
| } |
| |
| void DeletePathIORequest::Execute() const { |
| // Ignore the result as there is nothing that can be done by this point |
| // if the deletion fails. |
| base::ScopedBlockingCall _(FROM_HERE, base::BlockingType::MAY_BLOCK); |
| std::ignore = ios::sessions::DeleteRecursively(path_); |
| } |
| |
| void ExecuteIORequests(IORequestList requests) { |
| base::ScopedBlockingCall _(FROM_HERE, base::BlockingType::MAY_BLOCK); |
| for (const auto& request : requests) { |
| request->Execute(); |
| } |
| } |
| |
| } // namespace ios::sessions |