Chromium Code Reviews| Index: content/child/blob_storage/blob_message_filter.cc |
| diff --git a/content/child/blob_storage/blob_message_filter.cc b/content/child/blob_storage/blob_message_filter.cc |
| index 19491d655fd7eff0dee1f9f8e665b0836480ee54..e95149359da0d82e64d42686f09aca3c3df20fc1 100644 |
| --- a/content/child/blob_storage/blob_message_filter.cc |
| +++ b/content/child/blob_storage/blob_message_filter.cc |
| @@ -4,17 +4,25 @@ |
| #include "content/child/blob_storage/blob_message_filter.h" |
| +#include "base/bind.h" |
| +#include "base/task_runner.h" |
| #include "content/child/blob_storage/blob_transport_controller.h" |
| #include "content/child/thread_safe_sender.h" |
| #include "content/common/fileapi/webblob_messages.h" |
| #include "ipc/ipc_message.h" |
| #include "ipc/ipc_sender.h" |
| #include "storage/common/blob_storage/blob_item_bytes_request.h" |
| +#include "storage/common/blob_storage/blob_item_bytes_response.h" |
| namespace content { |
| -BlobMessageFilter::BlobMessageFilter() |
| - : IPC::MessageFilter(), sender_(nullptr) {} |
| +BlobMessageFilter::BlobMessageFilter( |
| + scoped_refptr<base::TaskRunner> io_runner, |
| + scoped_refptr<base::TaskRunner> file_runner) |
| + : IPC::MessageFilter(), |
|
kinuko
2016/04/15 15:02:32
nit: this line is probably not necessary
dmurph
2016/04/20 21:15:34
Done.
|
| + sender_(nullptr), |
| + io_runner_(std::move(io_runner)), |
| + file_runner_(std::move(file_runner)) {} |
| BlobMessageFilter::~BlobMessageFilter() {} |
| @@ -22,6 +30,10 @@ void BlobMessageFilter::OnFilterAdded(IPC::Sender* sender) { |
| sender_ = sender; |
| } |
| +void BlobMessageFilter::OnChannelClosing() { |
| + sender_ = nullptr; |
| +} |
| + |
| bool BlobMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(BlobMessageFilter, message) |
| @@ -45,7 +57,10 @@ void BlobMessageFilter::OnRequestMemoryItem( |
| std::vector<base::SharedMemoryHandle> memory_handles, |
| const std::vector<IPC::PlatformFileForTransit>& file_handles) { |
| BlobTransportController::GetInstance()->OnMemoryRequest( |
| - uuid, requests, &memory_handles, file_handles, sender_); |
| + uuid, requests, &memory_handles, file_handles, sender_, io_runner_, |
| + file_runner_.get(), |
| + base::Bind(&BlobMessageFilter::SendResponses, this, uuid), |
| + base::Bind(&BlobMessageFilter::SendCancel, this, uuid)); |
|
kinuko
2016/04/15 15:02:32
BlobTransportController already knows the concept
dmurph
2016/04/20 21:15:34
So you're saying we just give them a Send method c
|
| } |
| void BlobMessageFilter::OnCancelBuildingBlob( |
| @@ -54,6 +69,18 @@ void BlobMessageFilter::OnCancelBuildingBlob( |
| BlobTransportController::GetInstance()->OnCancel(uuid, code); |
| } |
| +void BlobMessageFilter::SendResponses( |
| + const std::string& uuid, |
| + const std::vector<storage::BlobItemBytesResponse>& responses) { |
| + if (sender_) |
| + sender_->Send(new BlobStorageMsg_MemoryItemResponse(uuid, responses)); |
| +} |
| +void BlobMessageFilter::SendCancel(const std::string& uuid, |
| + storage::IPCBlobCreationCancelCode code) { |
| + if (sender_) |
| + sender_->Send(new BlobStorageMsg_CancelBuildingBlob(uuid, code)); |
|
kinuko
2016/04/15 15:02:32
Common pattern is that we have Send method that ch
dmurph
2016/04/20 21:15:34
Done.
|
| +} |
| + |
| void BlobMessageFilter::OnDoneBuildingBlob(const std::string& uuid) { |
| BlobTransportController::GetInstance()->OnDone(uuid); |
| } |