Chromium Code Reviews| Index: components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java |
| diff --git a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java |
| index 1709f2f8f2b2aa7910d4950bc18aeb13e6c6ee29..383e2296091a0ded11a13040d0ab8fbda1f52012 100644 |
| --- a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java |
| +++ b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java |
| @@ -4,6 +4,7 @@ |
| package org.chromium.net.urlconnection; |
| +import org.chromium.net.UploadDataProvider; |
| import org.chromium.net.UploadDataSink; |
| import java.io.IOException; |
| @@ -21,6 +22,7 @@ final class CronetChunkedOutputStream extends CronetOutputStream { |
| private final CronetHttpURLConnection mConnection; |
| private final MessageLoop mMessageLoop; |
| private final ByteBuffer mBuffer; |
| + private final UploadDataProvider mUploadDataProvider = new UploadDataProviderImpl(); |
| private long mBytesWritten; |
| private boolean mLastChunk = false; |
| private boolean mClosed = false; |
| @@ -107,36 +109,44 @@ final class CronetChunkedOutputStream extends CronetOutputStream { |
| } |
| @Override |
| - public long getLength() { |
| - return -1; |
| + public UploadDataProvider getUploadDataProvider() { |
|
xunjieli
2015/09/03 04:32:02
nit: can remove "public" modifier.
pauljensen
2015/09/11 15:20:41
Done.
|
| + return mUploadDataProvider; |
| } |
| - @Override |
| - public void read(final UploadDataSink uploadDataSink, final ByteBuffer byteBuffer) { |
| - int availableSpace = byteBuffer.capacity() - byteBuffer.position(); |
| - if (availableSpace < mBuffer.position()) { |
| - // byteBuffer does not have enough capacity, so only put a portion |
| - // of mBuffer in it. |
| - byteBuffer.put(mBuffer.array(), 0, availableSpace); |
| - mBuffer.position(availableSpace); |
| - // Move remaining buffer to the head of the buffer for use in the |
| - // next read call. |
| - mBuffer.compact(); |
| - uploadDataSink.onReadSucceeded(false); |
| - } else { |
| - // byteBuffer has enough capacity to hold the content of mBuffer. |
| - mBuffer.flip(); |
| - byteBuffer.put(mBuffer); |
| - // Reuse this buffer. |
| - mBuffer.clear(); |
| - // Quit message loop so embedder can write more data. |
| - mMessageLoop.quit(); |
| - uploadDataSink.onReadSucceeded(mLastChunk); |
| + private class UploadDataProviderImpl extends UploadDataProvider { |
| + @Override |
| + public long getLength() { |
| + return -1; |
| } |
| - } |
| - @Override |
| - public void rewind(UploadDataSink uploadDataSink) { |
| - uploadDataSink.onRewindError(new HttpRetryException("Cannot retry streamed Http body", -1)); |
| + @Override |
| + public void read(final UploadDataSink uploadDataSink, final ByteBuffer byteBuffer) { |
| + int availableSpace = byteBuffer.capacity() - byteBuffer.position(); |
| + if (availableSpace < mBuffer.position()) { |
| + // byteBuffer does not have enough capacity, so only put a portion |
| + // of mBuffer in it. |
| + byteBuffer.put(mBuffer.array(), 0, availableSpace); |
| + mBuffer.position(availableSpace); |
| + // Move remaining buffer to the head of the buffer for use in the |
| + // next read call. |
| + mBuffer.compact(); |
| + uploadDataSink.onReadSucceeded(false); |
| + } else { |
| + // byteBuffer has enough capacity to hold the content of mBuffer. |
| + mBuffer.flip(); |
| + byteBuffer.put(mBuffer); |
| + // Reuse this buffer. |
| + mBuffer.clear(); |
| + // Quit message loop so embedder can write more data. |
| + mMessageLoop.quit(); |
| + uploadDataSink.onReadSucceeded(mLastChunk); |
| + } |
| + } |
| + |
| + @Override |
| + public void rewind(UploadDataSink uploadDataSink) { |
| + uploadDataSink.onRewindError( |
| + new HttpRetryException("Cannot retry streamed Http body", -1)); |
| + } |
| } |
| } |