Chromium Code Reviews| 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 6256d46a80979812729329f57619aebd276b9de8..7684474a686c5781f84c344057fd54c6b45805b4 100644 |
| --- a/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java |
| +++ b/components/cronet/android/java/src/org/chromium/net/CronetUploadDataStream.java |
| @@ -232,7 +232,7 @@ final class CronetUploadDataStream implements UploadDataSink { |
| /** |
| * Posts task to application Executor. |
| */ |
| - private void postTaskToExecutor(Runnable task) { |
| + void postTaskToExecutor(Runnable task) { |
| try { |
| mExecutor.execute(task); |
| } catch (Throwable e) { |
| @@ -293,34 +293,33 @@ 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. |
| + * If data provider throws an exception, then it is reported to the request. |
|
xunjieli
2016/03/10 20:32:21
Could you make a note here to say that that no nat
mef
2016/03/10 22:16:30
Done, although mUploadDataStreamAdapter doesn't ex
|
| + */ |
| + void initializeWithRequest(final CronetUrlRequest request) { |
| + synchronized (mLock) { |
| + mRequest = request; |
| + mInWhichUserCallback = UserCallback.GET_LENGTH; |
| + } |
| + try { |
| + mLength = mDataProvider.getLength(); |
| + } catch (Throwable t) { |
| + onError(t); |
| + } |
| + synchronized (mLock) { |
| + mInWhichUserCallback = UserCallback.NOT_IN_CALLBACK; |
| + } |
| + } |
| + |
| + /** |
| * Creates native objects and attaches them to the underlying request |
| - * adapter object. |
| - * TODO(mmenke): If more types of native upload streams are needed, create |
| - * an interface with just this method, to minimize CronetURLRequest's |
| - * dependencies on each upload stream type. |
| + * adapter object. Always called on executor thread. |
| */ |
| - void attachToRequest(final CronetUrlRequest request, final long requestAdapter, |
| - final Runnable afterAttachCallback) { |
| - mRequest = request; |
| - postTaskToExecutor(new Runnable() { |
| - @Override |
| - public void run() { |
| - synchronized (mLock) { |
| - mInWhichUserCallback = UserCallback.GET_LENGTH; |
| - } |
| - try { |
| - mLength = mDataProvider.getLength(); |
| - } catch (Throwable t) { |
| - onError(t); |
| - } |
| - synchronized (mLock) { |
| - mInWhichUserCallback = UserCallback.NOT_IN_CALLBACK; |
| - mUploadDataStreamAdapter = |
| - nativeAttachUploadDataToRequest(requestAdapter, mLength); |
| - } |
| - afterAttachCallback.run(); |
| - } |
| - }); |
| + void attachNativeAdapterToRequest(final long requestAdapter) { |
| + synchronized (mLock) { |
| + mUploadDataStreamAdapter = nativeAttachUploadDataToRequest(requestAdapter, mLength); |
| + } |
| } |
| /** |
| @@ -330,10 +329,11 @@ final class CronetUploadDataStream implements UploadDataSink { |
| */ |
| @VisibleForTesting |
| long createUploadDataStreamForTesting() throws IOException { |
| - mUploadDataStreamAdapter = nativeCreateAdapterForTesting(); |
| - mLength = mDataProvider.getLength(); |
| - return nativeCreateUploadDataStreamForTesting(mLength, |
| - mUploadDataStreamAdapter); |
| + synchronized (mLock) { |
| + mUploadDataStreamAdapter = nativeCreateAdapterForTesting(); |
| + mLength = mDataProvider.getLength(); |
| + return nativeCreateUploadDataStreamForTesting(mLength, mUploadDataStreamAdapter); |
| + } |
| } |
| @VisibleForTesting |