| Index: content/child/blob_storage/blob_transport_controller.h
|
| diff --git a/content/child/blob_storage/blob_transport_controller.h b/content/child/blob_storage/blob_transport_controller.h
|
| index c9c62ce55ba69e36a4b5bcd6f7ddcc52c421057e..ab970e0e538060d50e0ab450666b635d8b74c47a 100644
|
| --- a/content/child/blob_storage/blob_transport_controller.h
|
| +++ b/content/child/blob_storage/blob_transport_controller.h
|
| @@ -12,6 +12,7 @@
|
| #include <string>
|
| #include <vector>
|
|
|
| +#include "base/callback_forward.h"
|
| #include "base/gtest_prod_util.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| @@ -24,6 +25,7 @@ namespace base {
|
| template <typename T>
|
| struct DefaultLazyInstanceTraits;
|
| class SingleThreadTaskRunner;
|
| +class TaskRunner;
|
| }
|
|
|
| namespace storage {
|
| @@ -53,6 +55,11 @@ class ThreadSafeSender;
|
| // Must be used on the IO thread.
|
| class CONTENT_EXPORT BlobTransportController {
|
| public:
|
| + using ResponseCallback = base::Callback<void(
|
| + const std::vector<storage::BlobItemBytesResponse>& /* responses */)>;
|
| + using CancelCallback =
|
| + base::Callback<void(storage::IPCBlobCreationCancelCode /* reason */)>;
|
| +
|
| static BlobTransportController* GetInstance();
|
|
|
| // This kicks off a blob transfer to the browser thread, which involves
|
| @@ -63,7 +70,7 @@ class CONTENT_EXPORT BlobTransportController {
|
| static void InitiateBlobTransfer(
|
| const std::string& uuid,
|
| const std::string& content_type,
|
| - std::unique_ptr<BlobConsolidation> consolidation,
|
| + scoped_refptr<BlobConsolidation> consolidation,
|
| scoped_refptr<ThreadSafeSender> sender,
|
| base::SingleThreadTaskRunner* io_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> main_runner);
|
| @@ -74,7 +81,11 @@ class CONTENT_EXPORT BlobTransportController {
|
| const std::vector<storage::BlobItemBytesRequest>& requests,
|
| std::vector<base::SharedMemoryHandle>* memory_handles,
|
| const std::vector<IPC::PlatformFileForTransit>& file_handles,
|
| - IPC::Sender* sender);
|
| + IPC::Sender* sender,
|
| + scoped_refptr<base::TaskRunner> io_runner,
|
| + base::TaskRunner* file_runner,
|
| + const ResponseCallback& async_response_callback,
|
| + const CancelCallback& async_cancel_callback);
|
|
|
| void OnCancel(const std::string& uuid,
|
| storage::IPCBlobCreationCancelCode code);
|
| @@ -90,6 +101,7 @@ class CONTENT_EXPORT BlobTransportController {
|
| FRIEND_TEST_ALL_PREFIXES(BlobTransportControllerTest, Descriptions);
|
| FRIEND_TEST_ALL_PREFIXES(BlobTransportControllerTest, Responses);
|
| FRIEND_TEST_ALL_PREFIXES(BlobTransportControllerTest, SharedMemory);
|
| + FRIEND_TEST_ALL_PREFIXES(BlobTransportControllerTest, Disk);
|
| FRIEND_TEST_ALL_PREFIXES(BlobTransportControllerTest, ResponsesErrors);
|
|
|
| static void GetDescriptions(BlobConsolidation* consolidation,
|
| @@ -106,13 +118,18 @@ class CONTENT_EXPORT BlobTransportController {
|
| enum class ResponsesStatus {
|
| BLOB_NOT_FOUND,
|
| SHARED_MEMORY_MAP_FAILED,
|
| + PENDING_IO,
|
| SUCCESS
|
| };
|
| friend struct base::DefaultLazyInstanceTraits<BlobTransportController>;
|
|
|
| + void CancelAsyncBlobTransfer(const CancelCallback& async_cancel_callback,
|
| + const std::string& uuid,
|
| + storage::IPCBlobCreationCancelCode code);
|
| +
|
| void StoreBlobDataForRequests(
|
| const std::string& uuid,
|
| - std::unique_ptr<BlobConsolidation> consolidation,
|
| + scoped_refptr<BlobConsolidation> consolidation,
|
| scoped_refptr<base::SingleThreadTaskRunner> main_runner);
|
|
|
| ResponsesStatus GetResponses(
|
| @@ -120,7 +137,11 @@ class CONTENT_EXPORT BlobTransportController {
|
| const std::vector<storage::BlobItemBytesRequest>& requests,
|
| std::vector<base::SharedMemoryHandle>* memory_handles,
|
| const std::vector<IPC::PlatformFileForTransit>& file_handles,
|
| - std::vector<storage::BlobItemBytesResponse>* output);
|
| + std::vector<storage::BlobItemBytesResponse>* output,
|
| + scoped_refptr<base::TaskRunner> io_runner,
|
| + base::TaskRunner* file_runner,
|
| + const ResponseCallback& response_callback,
|
| + const CancelCallback& error_callback);
|
|
|
| // Deletes the consolidation, and if we removed the last consolidation from
|
| // our map, we call ChildProcess::ReleaseProcess to release our previous
|
| @@ -128,7 +149,7 @@ class CONTENT_EXPORT BlobTransportController {
|
| void ReleaseBlobConsolidation(const std::string& uuid);
|
|
|
| scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner_;
|
| - std::map<std::string, std::unique_ptr<BlobConsolidation>> blob_storage_;
|
| + std::map<std::string, scoped_refptr<BlobConsolidation>> blob_storage_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BlobTransportController);
|
| };
|
|
|