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

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

Issue 1414123002: [BlobAsync] Renderer support for blob file writing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blob-hookup
Patch Set: comments Created 4 years, 7 months 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
Index: content/child/blob_storage/blob_consolidation.cc
diff --git a/content/child/blob_storage/blob_consolidation.cc b/content/child/blob_storage/blob_consolidation.cc
index c912699d37579d6aefb78fed0320d7f4c54397b2..ffcd12f089eefa839ef4ab3e0e1d5c0e07e5f60b 100644
--- a/content/child/blob_storage/blob_consolidation.cc
+++ b/content/child/blob_storage/blob_consolidation.cc
@@ -4,16 +4,27 @@
#include "content/child/blob_storage/blob_consolidation.h"
-#include <stdint.h>
-
#include <algorithm>
#include <limits>
#include <string>
+#include "base/bind.h"
+#include "base/callback.h"
+
using storage::DataElement;
using blink::WebThreadSafeData;
namespace content {
+namespace {
+bool WriteMemory(void* memory_out,
+ size_t* total_read,
+ const char* memory,
+ size_t size) {
+ memcpy(static_cast<char*>(memory_out) + *total_read, memory, size);
+ *total_read += size;
+ return true;
+}
+} // namespace
using ReadStatus = BlobConsolidation::ReadStatus;
@@ -99,11 +110,10 @@ void BlobConsolidation::AddFileSystemItem(const GURL& url,
item.expected_modification_time = expected_modification_time;
}
-ReadStatus BlobConsolidation::ReadMemory(size_t consolidated_item_index,
- size_t consolidated_offset,
- size_t consolidated_size,
- void* memory_out) {
- CHECK(memory_out);
+ReadStatus BlobConsolidation::VisitMemory(size_t consolidated_item_index,
+ size_t consolidated_offset,
+ size_t consolidated_size,
+ const MemoryVisitor& visitor) const {
if (consolidated_item_index >= consolidated_items_.size())
return ReadStatus::ERROR_OUT_OF_BOUNDS;
@@ -112,9 +122,6 @@ ReadStatus BlobConsolidation::ReadMemory(size_t consolidated_item_index,
return ReadStatus::ERROR_WRONG_TYPE;
if (consolidated_size + consolidated_offset > item.length) {
- LOG(ERROR) << "Invalid consolidated size " << consolidated_size
- << " and offset " << consolidated_offset << " vs item length of "
- << item.length;
return ReadStatus::ERROR_OUT_OF_BOUNDS;
}
@@ -155,12 +162,24 @@ ReadStatus BlobConsolidation::ReadMemory(size_t consolidated_item_index,
mid < num_items && memory_read < consolidated_size; mid++) {
size_t read_size = std::min(item.data[mid].size() - offset_from_mid,
consolidated_size - memory_read);
- memcpy(static_cast<char*>(memory_out) + memory_read,
- item.data[mid].data() + offset_from_mid, read_size);
+ bool continu =
+ visitor.Run(item.data[mid].data() + offset_from_mid, read_size);
+ if (!continu)
+ return ReadStatus::CANCELLED_BY_VISITOR;
offset_from_mid = 0;
memory_read += read_size;
}
return ReadStatus::OK;
}
+ReadStatus BlobConsolidation::ReadMemory(size_t consolidated_item_index,
+ size_t consolidated_offset,
+ size_t consolidated_size,
+ void* memory_out) const {
+ size_t total_read = 0;
+ return VisitMemory(consolidated_item_index, consolidated_offset,
+ consolidated_size,
+ base::Bind(&WriteMemory, memory_out, &total_read));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698