| Index: components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java
|
| index 3b2601e61fc1aabdd14c754bdd8d77b72b7b6b3d..a8a8d454be1d33048a11f3cf75cef7e39886c673 100644
|
| --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java
|
| +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java
|
| @@ -300,26 +300,34 @@ public final class CronetUploadDataStream implements UploadDataSink {
|
| }
|
|
|
| /**
|
| - * Initializes upload length by getting it from data provider. Always called
|
| - * on executor thread to allow getLength() to block and/or report errors.
|
| + * Initializes upload length by getting it from data provider. Submits to
|
| + * the user's executor thread to allow getLength() to block and/or report errors.
|
| * If data provider throws an exception, then it is reported to the request.
|
| * No native calls to urlRequest are allowed as this is done before request
|
| * start, so native object may not exist.
|
| */
|
| - void initializeWithRequest(final CronetUrlRequest urlRequest) {
|
| + void initializeWithRequest(final CronetUrlRequest urlRequest, final Runnable callback) {
|
| synchronized (mLock) {
|
| mRequest = urlRequest;
|
| - mInWhichUserCallback = UserCallback.GET_LENGTH;
|
| - }
|
| - try {
|
| - mLength = mDataProvider.getLength();
|
| - mRemainingLength = mLength;
|
| - } catch (Throwable t) {
|
| - onError(t);
|
| - }
|
| - synchronized (mLock) {
|
| - mInWhichUserCallback = UserCallback.NOT_IN_CALLBACK;
|
| }
|
| + postTaskToExecutor(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + synchronized (mLock) {
|
| + mInWhichUserCallback = UserCallback.GET_LENGTH;
|
| + }
|
| + try {
|
| + mLength = mDataProvider.getLength();
|
| + mRemainingLength = mLength;
|
| + } catch (Throwable t) {
|
| + onError(t);
|
| + }
|
| + synchronized (mLock) {
|
| + mInWhichUserCallback = UserCallback.NOT_IN_CALLBACK;
|
| + }
|
| + callback.run();
|
| + }
|
| + });
|
| }
|
|
|
| /**
|
|
|