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

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: linker 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..c571442208aa3d9c13bf32647674a55f4b5766b7 100644
--- a/content/child/blob_storage/blob_consolidation.cc
+++ b/content/child/blob_storage/blob_consolidation.cc
@@ -10,10 +10,22 @@
#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);
+ return true;
+}
+} // namespace
using ReadStatus = BlobConsolidation::ReadStatus;
@@ -99,11 +111,13 @@ 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(size_t /* total_memory_read */,
+ const char* /* memory */,
+ size_t /* memory_size */)> visitor) const {
if (consolidated_item_index >= consolidated_items_.size())
return ReadStatus::ERROR_OUT_OF_BOUNDS;
@@ -155,12 +169,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(
kinuko 2016/04/25 14:10:30 nit: continu -> continue ?
dmurph 2016/04/26 22:33:28 It's a keyword :(
michaeln 2016/04/26 22:50:08 i said the same thing, but continue already means
+ memory_read, item.data[mid].data() + offset_from_mid, read_size);
+ // If the visitor doesn't want to continue then we return early.
+ 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 {
+ CHECK(memory_out);
michaeln 2016/04/26 22:50:08 check isn't needed becuase VisitMemory/WriteMemory
dmurph 2016/04/27 19:14:04 ok
+ return VisitMemory(consolidated_item_index, consolidated_offset,
+ consolidated_size, base::Bind(&WriteMemory, memory_out));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698