Chromium Code Reviews| Index: components/cronet/android/cronet_bidirectional_stream_adapter.h |
| diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.h b/components/cronet/android/cronet_bidirectional_stream_adapter.h |
| index 4ed2dea985f4ec8e7787da535d563387fea15b25..a807960c3de48ee951348865a63f29b4c499180a 100644 |
| --- a/components/cronet/android/cronet_bidirectional_stream_adapter.h |
| +++ b/components/cronet/android/cronet_bidirectional_stream_adapter.h |
| @@ -28,6 +28,26 @@ namespace cronet { |
| class CronetURLRequestContextAdapter; |
| class IOBufferWithByteBuffer; |
| +// Convenient wrapper to hold Java references and data to represent the pending |
| +// data to be written. |
| +struct PendingWriteData { |
| + PendingWriteData(JNIEnv* env, |
| + jobjectArray jwrite_buffer_list, |
| + jintArray jwrite_buffer_pos_list, |
| + jintArray jwrite_buffer_limit_list, |
| + jboolean jwrite_end_of_stream); |
| + ~PendingWriteData(); |
| + |
| + base::android::ScopedJavaGlobalRef<jobjectArray> jwrite_buffer_list; |
| + base::android::ScopedJavaGlobalRef<jintArray> jwrite_buffer_pos_list; |
| + base::android::ScopedJavaGlobalRef<jintArray> jwrite_buffer_limit_list; |
| + jboolean jwrite_end_of_stream; |
| + std::vector<scoped_refptr<net::IOBuffer>> write_buffer_list; |
|
mef
2016/05/13 15:12:58
My concern about using net::IOBuffer insted of IOB
xunjieli
2016/05/13 15:35:22
But the Java ByteBuffer is not going to be destroy
mef
2016/05/16 13:54:18
Yeah, that's fine.
|
| + std::vector<int> write_buffer_len_list; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PendingWriteData); |
| +}; |
| + |
| // An adapter from Java BidirectionalStream object to net::BidirectionalStream. |
| // Created and configured from a Java thread. Start, ReadData, WritevData and |
| // Destroy can be called on any thread (including network thread), and post |
| @@ -94,8 +114,6 @@ class CronetBidirectionalStreamAdapter |
| jboolean jsend_on_canceled); |
| private: |
| - typedef std::vector<scoped_refptr<IOBufferWithByteBuffer>> |
| - IOBufferWithByteBufferList; |
| // net::BidirectionalStream::Delegate implementations: |
| void OnStreamReady() override; |
| void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers) override; |
| @@ -109,8 +127,8 @@ class CronetBidirectionalStreamAdapter |
| void ReadDataOnNetworkThread( |
| scoped_refptr<IOBufferWithByteBuffer> read_buffer, |
| int buffer_size); |
| - void WritevDataOnNetworkThread(const IOBufferWithByteBufferList& buffers, |
| - bool end_of_stream); |
| + void WritevDataOnNetworkThread( |
| + std::unique_ptr<PendingWriteData> pending_write_data); |
| void DestroyOnNetworkThread(bool send_on_canceled); |
| // Gets headers as a Java array. |
| base::android::ScopedJavaLocalRef<jobjectArray> GetHeadersArray( |
| @@ -127,7 +145,7 @@ class CronetBidirectionalStreamAdapter |
| bool write_end_of_stream_; |
| scoped_refptr<IOBufferWithByteBuffer> read_buffer_; |
| - IOBufferWithByteBufferList write_buffer_list_; |
| + std::unique_ptr<PendingWriteData> pending_write_data_; |
| std::unique_ptr<net::BidirectionalStream> bidi_stream_; |
| // Whether BidirectionalStream::Delegate::OnFailed callback is invoked. |