Chromium Code Reviews| Index: components/cronet/android/test/src/org/chromium/net/UploadDataStreamHandler.java |
| diff --git a/components/cronet/android/test/src/org/chromium/net/UploadDataStreamHandler.java b/components/cronet/android/test/src/org/chromium/net/UploadDataStreamHandler.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..edecef43e6c5bc72dce38696207dfa5e8eb4db49 |
| --- /dev/null |
| +++ b/components/cronet/android/test/src/org/chromium/net/UploadDataStreamHandler.java |
| @@ -0,0 +1,170 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.net; |
| + |
| +import android.os.ConditionVariable; |
| + |
| +import junit.framework.Assert; |
| + |
| +import org.chromium.base.CalledByNative; |
| +import org.chromium.base.JNINamespace; |
| +import org.chromium.base.NativeClassQualifiedName; |
| + |
| +/** |
| + * A wrapper class on top of the native UploadDataStream. This class is used in |
| + * tests to drive the native UploadDataStream directly. |
| + */ |
| +@JNINamespace("cronet") |
| +public final class UploadDataStreamHandler { |
|
mmenke
2015/02/18 17:08:41
optional: Maybe TestUploadDataStreamHandler? Thi
xunjieli
2015/02/19 14:59:11
Done. Good idea!
|
| + private long mUploadDataStreamHandler; |
| + private ConditionVariable mWaitInitComplete; |
| + private ConditionVariable mWaitInitCalled; |
| + private ConditionVariable mWaitReadComplete; |
| + private ConditionVariable mWaitResetComplete; |
| + // Waits for checkIfInitCallbackInvoked() returns result asynchronously. |
| + private ConditionVariable mWaitCheckInitCallback; |
| + // Waits for checkIfReadCallbackInvoked() returns result asynchronously. |
| + private ConditionVariable mWaitCheckReadCallback; |
|
mmenke
2015/02/18 17:08:41
optional: Suggest removing the "Callback" from th
xunjieli
2015/02/19 14:59:11
Done.
|
| + // If true, init completes synchronously. |
| + private boolean mInitCompletedSynchronously = false; |
| + private String mData; |
| + |
| + public UploadDataStreamHandler(final long adapter) { |
| + mWaitReadComplete = new ConditionVariable(); |
| + mWaitInitComplete = new ConditionVariable(); |
| + mWaitInitCalled = new ConditionVariable(); |
| + mWaitResetComplete = new ConditionVariable(); |
| + mWaitCheckInitCallback = new ConditionVariable(); |
| + mWaitCheckReadCallback = new ConditionVariable(); |
| + mData = ""; |
|
mmenke
2015/02/18 17:08:41
Should probably inline all these initializations a
xunjieli
2015/02/19 14:59:11
Done.
|
| + mUploadDataStreamHandler = nativeCreateUploadDataStreamHandler(adapter); |
| + } |
| + |
| + public void destroyNativeObjects() { |
| + nativeDestroy(mUploadDataStreamHandler); |
| + mUploadDataStreamHandler = 0; |
| + } |
| + |
| + /** |
| + * Init and returns whether init completes synchronously. |
| + */ |
| + public boolean init() { |
| + mWaitInitCalled.close(); |
| + mData = ""; |
| + nativeInit(mUploadDataStreamHandler); |
| + mWaitInitCalled.block(); |
| + return mInitCompletedSynchronously; |
| + } |
| + |
| + public void read() { |
| + nativeRead(mUploadDataStreamHandler); |
| + } |
| + |
| + public void reset() { |
| + mWaitResetComplete.close(); |
| + mData = ""; |
| + nativeReset(mUploadDataStreamHandler); |
| + mWaitResetComplete.block(); |
| + } |
| + |
| + public void checkInitCallbackNotInvoked() { |
| + mWaitCheckInitCallback.close(); |
| + nativeCheckInitCallbackNotInvoked(mUploadDataStreamHandler); |
| + mWaitCheckInitCallback.block(); |
| + } |
| + |
| + public void checkReadCallbackNotInvoked() { |
| + mWaitCheckReadCallback.close(); |
| + nativeCheckReadCallbackNotInvoked(mUploadDataStreamHandler); |
| + mWaitCheckReadCallback.block(); |
| + } |
| + |
| + public String getData() { |
| + return mData; |
| + } |
| + |
| + public void waitForReadComplete() { |
| + mWaitReadComplete.block(); |
| + } |
| + |
| + public void resetWaitForReadComplete() { |
| + mWaitReadComplete.close(); |
| + } |
| + |
| + public void resetWaitForInitComplete() { |
|
mmenke
2015/02/18 21:06:23
Rather than have these close() methods, couldn't y
xunjieli
2015/02/19 14:59:11
Done. Great idea! Thanks for the suggestion. Defin
|
| + mWaitInitComplete.close(); |
| + } |
| + |
| + public void waitForInitComplete() { |
| + mWaitInitComplete.block(); |
| + } |
| + |
| + // Called on network thread. |
| + @CalledByNative |
| + private void onInitCalled(int res) { |
| + if (res == 0) { |
| + mInitCompletedSynchronously = true; |
| + } else { |
| + mInitCompletedSynchronously = false; |
| + } |
| + mWaitInitCalled.open(); |
| + } |
| + |
| + @CalledByNative |
| + // Called on network thread. |
| + private void onReadCompleted(int bytesRead, String data) { |
| + mData = data; |
| + mWaitReadComplete.open(); |
| + } |
| + |
| + @CalledByNative |
| + // Called on network thread. |
| + private void onInitCompleted(int res) { |
| + mWaitInitComplete.open(); |
| + } |
| + |
| + @CalledByNative |
| + // Called on network thread. |
| + private void onResetCompleted() { |
| + mWaitResetComplete.open(); |
| + } |
| + |
| + @CalledByNative |
| + // Called on network thread. |
| + private void onCheckInitCallbackNotInvoked(boolean initCallbackNotInvoked) { |
| + Assert.assertTrue(initCallbackNotInvoked); |
| + mWaitCheckInitCallback.open(); |
| + } |
| + |
| + @CalledByNative |
| + // Called on network thread. |
| + private void onCheckReadCallbackNotInvoked(boolean readCallbackNotInvoked) { |
| + Assert.assertTrue(readCallbackNotInvoked); |
| + mWaitCheckReadCallback.open(); |
| + } |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeInit(long nativePtr); |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeRead(long nativePtr); |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeReset(long nativePtr); |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeCheckInitCallbackNotInvoked( |
| + long nativePtr); |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeCheckReadCallbackNotInvoked( |
| + long nativePtr); |
| + |
| + @NativeClassQualifiedName("UploadDataStreamHandler") |
| + private native void nativeDestroy(long nativePtr); |
| + |
| + private native long nativeCreateUploadDataStreamHandler( |
| + long uploadDataStreamAdapter); |
| +} |