Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1387)

Unified Diff: content/child/blob_storage/blob_transport_controller.cc

Issue 2516713002: [BlobStorage] Implementing disk. (Closed)
Patch Set: removed cleanup check, as mac doesn't run out event loops Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/blob_storage/chrome_blob_storage_context.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/blob_storage/blob_transport_controller.cc
diff --git a/content/child/blob_storage/blob_transport_controller.cc b/content/child/blob_storage/blob_transport_controller.cc
index 5db46a24726647bcf614777b5eb9322ae038a877..1b01792079edee0775759258403c09ecddfb653d 100644
--- a/content/child/blob_storage/blob_transport_controller.cc
+++ b/content/child/blob_storage/blob_transport_controller.cc
@@ -90,27 +90,23 @@ bool WriteSingleChunk(base::File* file, const char* memory, size_t size) {
return true;
}
-base::Optional<base::Time> WriteSingleRequestToDisk(
- const BlobConsolidation* consolidation,
- const BlobItemBytesRequest& request,
- File* file) {
+bool WriteSingleRequestToDisk(const BlobConsolidation* consolidation,
+ const BlobItemBytesRequest& request,
+ File* file) {
if (!file->IsValid())
- return base::nullopt;
+ return false;
int64_t seek_distance = file->Seek(
File::FROM_BEGIN, base::checked_cast<int64_t>(request.handle_offset));
bool seek_failed = seek_distance < 0;
UMA_HISTOGRAM_BOOLEAN("Storage.Blob.RendererFileSeekFailed", seek_failed);
- if (seek_failed) {
- return base::nullopt;
- }
+ if (seek_failed)
+ return false;
BlobConsolidation::ReadStatus status = consolidation->VisitMemory(
request.renderer_item_index, request.renderer_item_offset, request.size,
base::Bind(&WriteSingleChunk, file));
if (status != BlobConsolidation::ReadStatus::OK)
- return base::nullopt;
- File::Info info;
- file->GetInfo(&info);
- return base::make_optional(info.last_modified);
+ return false;
+ return true;
}
base::Optional<std::vector<BlobItemBytesResponse>> WriteDiskRequests(
@@ -118,8 +114,6 @@ base::Optional<std::vector<BlobItemBytesResponse>> WriteDiskRequests(
std::unique_ptr<std::vector<BlobItemBytesRequest>> requests,
const std::vector<IPC::PlatformFileForTransit>& file_handles) {
std::vector<BlobItemBytesResponse> responses;
- std::vector<base::Time> last_modified_times;
- last_modified_times.resize(file_handles.size());
// We grab ownership of the file handles here. When this vector is destroyed
// it will close the files.
std::vector<File> files;
@@ -128,13 +122,24 @@ base::Optional<std::vector<BlobItemBytesResponse>> WriteDiskRequests(
files.emplace_back(IPC::PlatformFileForTransitToFile(file_handle));
}
for (const auto& request : *requests) {
- base::Optional<base::Time> last_modified = WriteSingleRequestToDisk(
- consolidation.get(), request, &files[request.handle_index]);
- if (!last_modified) {
+ if (!WriteSingleRequestToDisk(consolidation.get(), request,
+ &files[request.handle_index])) {
return base::nullopt;
}
- last_modified_times[request.handle_index] = last_modified.value();
}
+ // The last modified time needs to be collected after we flush the file.
+ std::vector<base::Time> last_modified_times;
+ last_modified_times.resize(file_handles.size());
+ for (size_t i = 0; i < files.size(); ++i) {
+ auto& file = files[i];
+ if (!file.Flush())
+ return base::nullopt;
+ File::Info info;
+ if (!file.GetInfo(&info))
+ return base::nullopt;
+ last_modified_times[i] = info.last_modified;
+ }
+
for (const auto& request : *requests) {
responses.push_back(BlobItemBytesResponse(request.request_number));
responses.back().time_file_modified =
« no previous file with comments | « content/browser/blob_storage/chrome_blob_storage_context.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698