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)); |
+ } |
} |
} |