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 11e85fa978f00029140de5654a396928853f4306..81a04df2e5ce11080e1896c833aab322afaa3ed6 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 |
@@ -49,6 +49,9 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
// Whether an exception is thrown by maybeThrowCancelOrPause(). |
private boolean mListenerExceptionThrown; |
+ // Whether to permit calls on the network thread. |
+ private boolean mAllowDirectExecutor = false; |
+ |
// Conditionally fail on certain steps. |
private FailureType mFailureType = FailureType.NONE; |
private ResponseStep mFailureStep = ResponseStep.NOTHING; |
@@ -113,6 +116,10 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
mAutoAdvance = autoAdvance; |
} |
+ public void setAllowDirectExecutor(boolean allowed) { |
+ mAllowDirectExecutor = allowed; |
+ } |
+ |
public void setFailure(FailureType failureType, ResponseStep failureStep) { |
mFailureStep = failureStep; |
mFailureType = failureType; |
@@ -153,7 +160,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onRedirectReceived( |
UrlRequest request, UrlResponseInfo info, String newLocationUrl) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
assertFalse(request.isDone()); |
assertTrue(mResponseStep == ResponseStep.NOTHING |
|| mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); |
@@ -171,7 +178,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
assertFalse(request.isDone()); |
assertTrue(mResponseStep == ResponseStep.NOTHING |
|| mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); |
@@ -187,7 +194,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
assertFalse(request.isDone()); |
assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED |
|| mResponseStep == ResponseStep.ON_READ_COMPLETED); |
@@ -214,7 +221,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onSucceeded(UrlRequest request, UrlResponseInfo info) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
assertTrue(request.isDone()); |
assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED |
|| mResponseStep == ResponseStep.ON_READ_COMPLETED); |
@@ -230,7 +237,12 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onFailed(UrlRequest request, UrlResponseInfo info, UrlRequestException error) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ // If the failure is because of prohibited direct execution, the test shouldn't fail |
+ // since the request already did. |
+ if (error.getCause() instanceof InlineExecutionProhibitedException) { |
+ mAllowDirectExecutor = true; |
+ } |
+ checkExecutorThread(); |
mef
2016/09/02 15:01:47
Can this be just
if (!error.getCause() instanceof
Charles
2016/09/02 15:03:30
No, because maybeThrowCancelOrPause() also calls c
|
assertTrue(request.isDone()); |
// Shouldn't happen after success. |
assertTrue(mResponseStep != ResponseStep.ON_SUCCEEDED); |
@@ -257,7 +269,7 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
@Override |
public void onCanceled(UrlRequest request, UrlResponseInfo info) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
assertTrue(request.isDone()); |
// Should happen at most once for a single request. |
assertFalse(mOnCanceledCalled); |
@@ -290,12 +302,18 @@ class TestUrlRequestCallback extends UrlRequest.Callback { |
mDone.open(); |
} |
+ private void checkExecutorThread() { |
+ if (!mAllowDirectExecutor) { |
+ assertEquals(mExecutorThread, Thread.currentThread()); |
+ } |
+ } |
+ |
/** |
* Returns {@code false} if the listener should continue to advance the |
* request. |
*/ |
private boolean maybeThrowCancelOrPause(final UrlRequest request) { |
- assertEquals(mExecutorThread, Thread.currentThread()); |
+ checkExecutorThread(); |
if (mResponseStep != mFailureStep || mFailureType == FailureType.NONE) { |
if (!mAutoAdvance) { |
mStepBlock.open(); |