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 b5cc88416ca6f89b5c319c100d175ac2460b0f8e..5db46a24726647bcf614777b5eb9322ae038a877 100644 |
--- a/content/child/blob_storage/blob_transport_controller.cc |
+++ b/content/child/blob_storage/blob_transport_controller.cc |
@@ -20,7 +20,6 @@ |
#include "base/memory/shared_memory.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/numerics/safe_conversions.h" |
-#include "base/optional.h" |
#include "base/single_thread_task_runner.h" |
#include "base/stl_util.h" |
#include "base/task_runner.h" |
@@ -45,11 +44,10 @@ using storage::BlobItemBytesRequest; |
using storage::BlobItemBytesResponse; |
using storage::IPCBlobItemRequestStrategy; |
using storage::DataElement; |
-using storage::kBlobStorageIPCThresholdBytes; |
using storage::BlobItemBytesResponse; |
using storage::BlobItemBytesRequest; |
-using storage::IPCBlobCreationCancelCode; |
+using storage::BlobStatus; |
namespace content { |
using ConsolidatedItem = BlobConsolidation::ConsolidatedItem; |
@@ -115,10 +113,7 @@ base::Optional<base::Time> WriteSingleRequestToDisk( |
return base::make_optional(info.last_modified); |
} |
-// This returns either the responses, or if they're empty, an error code. |
-std::pair<std::vector<storage::BlobItemBytesResponse>, |
- IPCBlobCreationCancelCode> |
-WriteDiskRequests( |
+base::Optional<std::vector<BlobItemBytesResponse>> WriteDiskRequests( |
scoped_refptr<BlobConsolidation> consolidation, |
std::unique_ptr<std::vector<BlobItemBytesRequest>> requests, |
const std::vector<IPC::PlatformFileForTransit>& file_handles) { |
@@ -136,8 +131,7 @@ WriteDiskRequests( |
base::Optional<base::Time> last_modified = WriteSingleRequestToDisk( |
consolidation.get(), request, &files[request.handle_index]); |
if (!last_modified) { |
- return std::make_pair(std::vector<storage::BlobItemBytesResponse>(), |
- IPCBlobCreationCancelCode::FILE_WRITE_FAILED); |
+ return base::nullopt; |
} |
last_modified_times[request.handle_index] = last_modified.value(); |
} |
@@ -147,7 +141,7 @@ WriteDiskRequests( |
last_modified_times[request.handle_index]; |
} |
- return std::make_pair(responses, IPCBlobCreationCancelCode::UNKNOWN); |
+ return responses; |
} |
} // namespace |
@@ -170,10 +164,10 @@ void BlobTransportController::InitiateBlobTransfer( |
main_runner->PostTask(FROM_HERE, base::Bind(&IncChildProcessRefCount)); |
} |
+ storage::BlobStorageLimits quotas; |
std::vector<storage::DataElement> descriptions; |
- std::set<std::string> referenced_blobs = consolidation->referenced_blobs(); |
BlobTransportController::GetDescriptions( |
- consolidation.get(), kBlobStorageIPCThresholdBytes, &descriptions); |
+ consolidation.get(), quotas.max_ipc_memory_size, &descriptions); |
// I post the task first to make sure that we store our consolidation before |
// we get a request back from the browser. |
io_runner->PostTask( |
@@ -182,10 +176,8 @@ void BlobTransportController::InitiateBlobTransfer( |
base::Unretained(BlobTransportController::GetInstance()), uuid, |
base::Passed(std::move(consolidation)), |
base::Passed(std::move(main_runner)))); |
- // TODO(dmurph): Merge register and start messages. |
- sender->Send(new BlobStorageMsg_RegisterBlobUUID(uuid, content_type, "", |
- referenced_blobs)); |
- sender->Send(new BlobStorageMsg_StartBuildingBlob(uuid, descriptions)); |
+ sender->Send( |
+ new BlobStorageMsg_RegisterBlob(uuid, content_type, "", descriptions)); |
} |
void BlobTransportController::OnMemoryRequest( |
@@ -304,15 +296,12 @@ void BlobTransportController::OnMemoryRequest( |
sender->Send(new BlobStorageMsg_MemoryItemResponse(uuid, responses)); |
} |
-void BlobTransportController::OnCancel( |
- const std::string& uuid, |
- storage::IPCBlobCreationCancelCode code) { |
- DVLOG(1) << "Received blob cancel for blob " << uuid |
- << " with code: " << static_cast<int>(code); |
- ReleaseBlobConsolidation(uuid); |
-} |
- |
-void BlobTransportController::OnDone(const std::string& uuid) { |
+void BlobTransportController::OnBlobFinalStatus(const std::string& uuid, |
+ storage::BlobStatus code) { |
+ DVLOG_IF(1, storage::BlobStatusIsError(code)) |
+ << "Received blob error for blob " << uuid |
+ << " with code: " << static_cast<int>(code); |
+ DCHECK(!BlobStatusIsPending(code)); |
ReleaseBlobConsolidation(uuid); |
} |
@@ -388,16 +377,16 @@ BlobTransportController::~BlobTransportController() {} |
void BlobTransportController::OnFileWriteComplete( |
IPC::Sender* sender, |
const std::string& uuid, |
- const std::pair<std::vector<BlobItemBytesResponse>, |
- IPCBlobCreationCancelCode>& result) { |
+ const base::Optional<std::vector<storage::BlobItemBytesResponse>>& result) { |
if (blob_storage_.find(uuid) == blob_storage_.end()) |
return; |
- if (!result.first.empty()) { |
- sender->Send(new BlobStorageMsg_MemoryItemResponse(uuid, result.first)); |
+ if (!result) { |
+ sender->Send(new BlobStorageMsg_SendBlobStatus( |
+ uuid, BlobStatus::ERR_FILE_WRITE_FAILED)); |
+ ReleaseBlobConsolidation(uuid); |
return; |
} |
- sender->Send(new BlobStorageMsg_CancelBuildingBlob(uuid, result.second)); |
- ReleaseBlobConsolidation(uuid); |
+ sender->Send(new BlobStorageMsg_MemoryItemResponse(uuid, result.value())); |
} |
void BlobTransportController::StoreBlobDataForRequests( |