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); |
}; |