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

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, build fix Created 4 years, 8 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..c07ea0f8ff8b618c8e8dad69672e3faeefa33464 100644
--- a/content/child/blob_storage/blob_consolidation.cc
+++ b/content/child/blob_storage/blob_consolidation.cc
@@ -10,10 +10,23 @@
#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 +112,12 @@ 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,
+ base::Callback<bool(const char* /* memory */, size_t /* memory_size */)>
michaeln 2016/04/28 00:16:56 ditto VisitorFunction
dmurph 2016/05/09 19:55:47 Done.
+ visitor) const {
if (consolidated_item_index >= consolidated_items_.size())
return ReadStatus::ERROR_OUT_OF_BOUNDS;
@@ -112,9 +126,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 +166,25 @@ 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 the visitor doesn't want to continue then we return early.
michaeln 2016/04/28 00:16:56 return CANCELLED_BY_VISITOR makes it pretty clear
dmurph 2016/05/09 19:55:47 ok.
+ 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