| 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..fdcfc82e803d009fa93a548ca87214b21a5528d1 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;
|
| + UploadDataProvider getUploadDataProvider() {
|
| + 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));
|
| + }
|
| }
|
| }
|
|
|