| Index: components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java b/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java
|
| index 0427c40d9b683e7da4e448a601ac1901ef3ca809..37864f5e073b36ca8250f21674a4d9905f58819a 100644
|
| --- a/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java
|
| +++ b/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java
|
| @@ -52,9 +52,9 @@ final class CronetUploadDataStream implements UploadDataSink {
|
| // to robustly detect getting read/rewind results more often than expected.
|
| private final Object mLock = new Object();
|
|
|
| - // Native adapter delegate object, owned by the CronetUploadDataStream.
|
| - // It's only deleted after the native UploadDataStream object is destroyed.
|
| - // All access to the delegate is synchronized, for safe usage and cleanup.
|
| + // Native delegate object, owned by the CronetUploadDataStream. It's only
|
| + // deleted after the native UploadDataStream object is destroyed. All access
|
| + // to the delegate is synchronized, for safe usage and cleanup.
|
| private long mUploadDataStreamDelegate = 0;
|
|
|
| private boolean mReading = false;
|
| @@ -115,12 +115,13 @@ final class CronetUploadDataStream implements UploadDataSink {
|
| }
|
|
|
| /**
|
| - * Called by native code to destroy the native adapter delegate, when the
|
| - * adapter is destroyed.
|
| + * Called when the native UploadDataStream is destroyed. At this point,
|
| + * the native delegate needs to be destroyed, but only after any pending
|
| + * read operation completes, as the delegate owns the read buffer.
|
| */
|
| @SuppressWarnings("unused")
|
| @CalledByNative
|
| - void onAdapterDestroyed() {
|
| + void onUploadDataStreamDestroyed() {
|
| Runnable task = new Runnable() {
|
| @Override
|
| public void run() {
|
| @@ -149,8 +150,8 @@ final class CronetUploadDataStream implements UploadDataSink {
|
|
|
| // Just fail the request - simpler to fail directly, and
|
| // UploadDataStream only supports failing during initialization, not
|
| - // while reading. This should be safe, even if we deleted the adapter,
|
| - // because in that case, the request has already been cancelled.
|
| + // while reading. The request is smart enough to handle the case where
|
| + // it was already cancelled by the embedder.
|
| mRequest.onUploadException(exception);
|
| }
|
|
|
| @@ -266,23 +267,24 @@ final class CronetUploadDataStream implements UploadDataSink {
|
| }
|
|
|
| /**
|
| - * Creates a native UploadDataStreamDelegate and UploadDataStreamAdapter
|
| - * for testing.
|
| - * @return the address of the native CronetUploadDataStreamAdapter object.
|
| + * Creates a native CronetUploadDataStreamDelegate and
|
| + * CronetUploadDataStream for testing.
|
| + * @return the address of the native CronetUploadDataStream object.
|
| */
|
| - public long createAdapterForTesting() {
|
| + public long createUploadDataStreamForTesting() {
|
| mUploadDataStreamDelegate = nativeCreateDelegateForTesting();
|
| - return nativeCreateAdapterForTesting(mLength, mUploadDataStreamDelegate);
|
| + return nativeCreateUploadDataStreamForTesting(mLength,
|
| + mUploadDataStreamDelegate);
|
| }
|
|
|
| - // Native methods are implemented in upload_data_stream_adapter.cc.
|
| + // Native methods are implemented in upload_data_stream.cc.
|
|
|
| private native long nativeAttachUploadDataToRequest(long urlRequestAdapter,
|
| long length);
|
|
|
| private native long nativeCreateDelegateForTesting();
|
|
|
| - private native long nativeCreateAdapterForTesting(long length,
|
| + private native long nativeCreateUploadDataStreamForTesting(long length,
|
| long delegate);
|
|
|
| @NativeClassQualifiedName("CronetUploadDataStreamDelegate")
|
|
|