Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: content/child/blob_storage/blob_transport_controller.h

Issue 1414123002: [BlobAsync] Renderer support for blob file writing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blob-hookup
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698