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

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: Added test & simplified IPC callback[ 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..dac489bd9f46fa76338d10c0d863a0624596058b 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 {
@@ -33,6 +35,7 @@ struct BlobItemBytesResponse;
}
namespace IPC {
+class Message;
class Sender;
}
@@ -53,6 +56,8 @@ class ThreadSafeSender;
// Must be used on the IO thread.
class CONTENT_EXPORT BlobTransportController {
public:
+ using IPCSender = base::Callback<void(std::unique_ptr<IPC::Message>)>;
+
static BlobTransportController* GetInstance();
// This kicks off a blob transfer to the browser thread, which involves
@@ -63,18 +68,21 @@ 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);
- // This responds to the request using the sender.
+ // This responds to the request using the |ipc_sender| callback. If we need
+ // to save files then the call will happen asynchronously.
michaeln 2016/04/21 18:51:43 maybe also mention that a single call to OnMemoryR
void OnMemoryRequest(
const std::string& uuid,
const std::vector<storage::BlobItemBytesRequest>& requests,
std::vector<base::SharedMemoryHandle>* memory_handles,
const std::vector<IPC::PlatformFileForTransit>& file_handles,
- IPC::Sender* sender);
+ scoped_refptr<base::TaskRunner> io_runner,
michaeln 2016/04/21 01:58:41 this method can only be called on the io thread so
dmurph 2016/04/22 22:37:10 Done.
+ base::TaskRunner* file_runner,
+ const IPCSender& ipc_sender);
michaeln 2016/04/21 01:58:41 we generally use the IPC::Sender interface for thi
dmurph 2016/04/22 22:37:10 Done.
void OnCancel(const std::string& uuid,
storage::IPCBlobCreationCancelCode code);
@@ -86,12 +94,26 @@ class CONTENT_EXPORT BlobTransportController {
}
private:
+ friend struct base::DefaultLazyInstanceTraits<BlobTransportController>;
friend class BlobTransportControllerTest;
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);
+ using ResponseCallback = base::Callback<void(
+ const std::vector<storage::BlobItemBytesResponse>& /* responses */)>;
+ using CancelCallback =
+ base::Callback<void(storage::IPCBlobCreationCancelCode /* reason */)>;
+
+ enum class ResponsesStatus {
+ BLOB_NOT_FOUND,
+ SHARED_MEMORY_MAP_FAILED,
+ PENDING_IO,
+ SUCCESS
+ };
+
static void GetDescriptions(BlobConsolidation* consolidation,
size_t max_data_population,
std::vector<storage::DataElement>* out);
@@ -103,16 +125,19 @@ class CONTENT_EXPORT BlobTransportController {
// ChildProcess::ReleaseProcess to release our previous reference.
void ClearForTesting();
- enum class ResponsesStatus {
- BLOB_NOT_FOUND,
- SHARED_MEMORY_MAP_FAILED,
- SUCCESS
- };
- friend struct base::DefaultLazyInstanceTraits<BlobTransportController>;
+ void SendResponses(
+ const IPCSender& ipc_sender,
+ const std::string& uuid,
+ const std::vector<storage::BlobItemBytesResponse>& responses);
+
+ void SendCancelAndReleaseConsolidation(
+ const IPCSender& ipc_sender,
+ const std::string& uuid,
+ storage::IPCBlobCreationCancelCode reason);
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 +145,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,
michaeln 2016/04/21 01:58:41 io_runner may not needed here for the same reason
dmurph 2016/04/22 22:37:10 Done.
+ base::TaskRunner* file_runner,
+ const ResponseCallback& response_callback,
+ const CancelCallback& error_callback);
michaeln 2016/04/21 01:58:41 ditto IPC::Sender Since IPC::Sender would be a ra
kinuko 2016/04/21 07:54:34 Btw-- why don't we use ThreadSafeSender here and e
dmurph 2016/04/22 22:37:10 I don't have a thread safe version, I just have th
// Deletes the consolidation, and if we removed the last consolidation from
// our map, we call ChildProcess::ReleaseProcess to release our previous
@@ -128,7 +157,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