| 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(
|
|
|