| 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 4a2ef0a49ec0cfee3e74863c2b3eb3bf4e19fdf0..f2699abddfff96a766e8f7c916a10fc9336954c3 100644
|
| --- a/content/child/blob_storage/blob_transport_controller.h
|
| +++ b/content/child/blob_storage/blob_transport_controller.h
|
| @@ -23,6 +23,7 @@
|
| namespace base {
|
| template <typename T>
|
| struct DefaultLazyInstanceTraits;
|
| +class SingleThreadTaskRunner;
|
| }
|
|
|
| namespace storage {
|
| @@ -55,10 +56,14 @@ class CONTENT_EXPORT BlobTransportController {
|
|
|
| // This kicks off a blob transfer to the browser thread, which involves
|
| // sending an IPC message and storing the blob consolidation object.
|
| - void InitiateBlobTransfer(const std::string& uuid,
|
| - const std::string& type,
|
| - scoped_ptr<BlobConsolidation> consolidation,
|
| - IPC::Sender* sender);
|
| + // If we have no pending blobs, we also call ChildProcess::AddRefProcess to
|
| + // keep our process around while we transfer. This will be decremented when
|
| + // we finish our last pending transfer (when our map is empty).
|
| + void InitiateBlobTransfer(
|
| + const std::string& uuid,
|
| + scoped_ptr<BlobConsolidation> consolidation,
|
| + IPC::Sender* sender,
|
| + scoped_refptr<base::SingleThreadTaskRunner> main_runner);
|
|
|
| // This responds to the request using the sender.
|
| void OnMemoryRequest(
|
| @@ -73,8 +78,6 @@ class CONTENT_EXPORT BlobTransportController {
|
|
|
| void OnDone(const std::string& uuid);
|
|
|
| - // Clears all internal state for testing and such.
|
| - void Clear();
|
|
|
| bool IsTransporting(const std::string& uuid) {
|
| return blob_storage_.find(uuid) != blob_storage_.end();
|
| @@ -83,11 +86,16 @@ class CONTENT_EXPORT BlobTransportController {
|
| ~BlobTransportController();
|
|
|
| private:
|
| + 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, ResponsesErrors);
|
|
|
| + // Clears all internal state. If our map wasn't previously empty, then we call
|
| + // ChildProcess::ReleaseProcess to release our previous reference.
|
| + void ClearForTesting();
|
| +
|
| enum class ResponsesStatus {
|
| BLOB_NOT_FOUND,
|
| SHARED_MEMORY_MAP_FAILED,
|
| @@ -97,12 +105,6 @@ class CONTENT_EXPORT BlobTransportController {
|
|
|
| BlobTransportController();
|
|
|
| - // Sends the IPC to cancel the blob transfer, and releases the blob from
|
| - // internal storage.
|
| - void CancelBlobTransfer(const std::string& uuid,
|
| - storage::IPCBlobCreationCancelCode code,
|
| - IPC::Sender* sender);
|
| -
|
| void GetDescriptions(BlobConsolidation* consolidation,
|
| size_t max_data_population,
|
| std::vector<storage::DataElement>* out);
|
| @@ -114,8 +116,12 @@ class CONTENT_EXPORT BlobTransportController {
|
| const std::vector<IPC::PlatformFileForTransit>& file_handles,
|
| std::vector<storage::BlobItemBytesResponse>* output);
|
|
|
| + // Deletes the consolidation, and if we removed the last consolidation from
|
| + // our map, we call ChildProcess::ReleaseProcess to release our previous
|
| + // reference.
|
| void ReleaseBlobConsolidation(const std::string& uuid);
|
|
|
| + scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner_;
|
| std::map<std::string, scoped_ptr<BlobConsolidation>> blob_storage_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BlobTransportController);
|
|
|