Chromium Code Reviews| Index: components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java | 
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java | 
| index da46d1b9c1858b3f569c2a4d846388181ece8dc3..ffef02d4213b11f3e3b777385e0fd17cbafa5575 100644 | 
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java | 
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java | 
| @@ -19,6 +19,7 @@ import java.util.concurrent.Executor; | 
| import java.util.concurrent.ExecutorService; | 
| import java.util.concurrent.Executors; | 
| import java.util.concurrent.ThreadFactory; | 
| +import java.util.concurrent.TimeUnit; | 
| /** | 
| * Callback that tracks information from different callbacks and and has a | 
| @@ -45,6 +46,8 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| // When false, the consumer is responsible for all calls into the request | 
| // that advance it. | 
| private boolean mAutoAdvance = true; | 
| + // Whether an exception is thrown by maybeThrowCancelOrPause(). | 
| + private boolean mListenerExceptionThrown; | 
| // Conditionally fail on certain steps. | 
| private FailureType mFailureType = FailureType.NONE; | 
| @@ -91,7 +94,9 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| ON_RECEIVED_REDIRECT, | 
| ON_RESPONSE_STARTED, | 
| ON_READ_COMPLETED, | 
| - ON_SUCCEEDED | 
| + ON_SUCCEEDED, | 
| + ON_FAILED, | 
| + ON_CANCELED, | 
| } | 
| public enum FailureType { | 
| @@ -130,6 +135,21 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| mExecutorService.shutdown(); | 
| } | 
| + /** | 
| + * Shuts down the ExecutorService and waits until it executes all posted | 
| + * tasks. | 
| + */ | 
| + public void shutdownExecutorAndWait() { | 
| + mExecutorService.shutdown(); | 
| + try { | 
| + // Termination shouldn't take long. Use 5 min which should be more than enough. | 
| + mExecutorService.awaitTermination(5, TimeUnit.MINUTES); | 
| 
 
kapishnikov
2016/08/31 20:35:15
Nit: Also, can we make the waiting interval smalle
 
xunjieli
2016/08/31 20:44:46
Done.
 
 | 
| + } catch (InterruptedException e) { | 
| + assertTrue(false); | 
| 
 
kapishnikov
2016/08/31 20:13:20
It would be good to add a message to the assert. E
 
xunjieli
2016/08/31 20:44:46
Done.
 
 | 
| + } | 
| + assertTrue(mExecutorService.isTerminated()); | 
| + } | 
| + | 
| @Override | 
| public void onRedirectReceived( | 
| UrlRequest request, UrlResponseInfo info, String newLocationUrl) { | 
| @@ -218,7 +238,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| assertFalse(mOnErrorCalled); | 
| assertFalse(mOnCanceledCalled); | 
| assertNull(mError); | 
| - if (mFailureType == FailureType.THROW_SYNC) { | 
| + if (mListenerExceptionThrown) { | 
| assertEquals(UrlRequestError.LISTENER_EXCEPTION_THROWN, error.getErrorCode()); | 
| assertEquals(0, error.getCronetInternalErrorCode()); | 
| assertEquals("Exception received from UrlRequest.Callback", error.getMessage()); | 
| @@ -228,6 +248,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| assertFalse(error.immediatelyRetryable()); | 
| } | 
| + mResponseStep = ResponseStep.ON_FAILED; | 
| mOnErrorCalled = true; | 
| mError = error; | 
| openDone(); | 
| @@ -243,6 +264,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| assertFalse(mOnErrorCalled); | 
| assertNull(mError); | 
| + mResponseStep = ResponseStep.ON_CANCELED; | 
| mOnCanceledCalled = true; | 
| openDone(); | 
| maybeThrowCancelOrPause(request); | 
| @@ -273,6 +295,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| * request. | 
| */ | 
| private boolean maybeThrowCancelOrPause(final UrlRequest request) { | 
| + assertEquals(mExecutorThread, Thread.currentThread()); | 
| if (mResponseStep != mFailureStep || mFailureType == FailureType.NONE) { | 
| if (!mAutoAdvance) { | 
| mStepBlock.open(); | 
| @@ -282,6 +305,8 @@ class TestUrlRequestCallback extends UrlRequest.Callback { | 
| } | 
| if (mFailureType == FailureType.THROW_SYNC) { | 
| + assertFalse(mListenerExceptionThrown); | 
| + mListenerExceptionThrown = true; | 
| throw new IllegalStateException("Listener Exception."); | 
| } | 
| Runnable task = new Runnable() { |