| Index: components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java
|
| index 8b9519eb5700085a5c168dba297a9337a2a37e18..34c4d8648501c10270b095f7f603bd496bd0034b 100644
|
| --- a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java
|
| +++ b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.net.urlconnection;
|
|
|
| import org.chromium.base.VisibleForTesting;
|
| +import org.chromium.net.UploadDataProvider;
|
| import org.chromium.net.UploadDataSink;
|
|
|
| import java.io.IOException;
|
| @@ -32,6 +33,7 @@ final class CronetFixedModeOutputStream extends CronetOutputStream {
|
| private final MessageLoop mMessageLoop;
|
| private final long mContentLength;
|
| private final ByteBuffer mBuffer;
|
| + private final UploadDataProvider mUploadDataProvider = new UploadDataProviderImpl();
|
| private long mBytesWritten;
|
|
|
| /**
|
| @@ -129,37 +131,44 @@ final class CronetFixedModeOutputStream extends CronetOutputStream {
|
| }
|
|
|
| @Override
|
| - public long getLength() {
|
| - return mContentLength;
|
| + 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();
|
| - } 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();
|
| + private class UploadDataProviderImpl extends UploadDataProvider {
|
| + @Override
|
| + public long getLength() {
|
| + return mContentLength;
|
| }
|
| - uploadDataSink.onReadSucceeded(false);
|
| - }
|
|
|
| - @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();
|
| + } 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(false);
|
| + }
|
| +
|
| + @Override
|
| + public void rewind(UploadDataSink uploadDataSink) {
|
| + uploadDataSink.onRewindError(
|
| + new HttpRetryException("Cannot retry streamed Http body", -1));
|
| + }
|
| }
|
|
|
| /**
|
|
|