Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(572)

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java

Issue 2283243002: Allow direct executors in cronet. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.os.ConditionVariable; 7 import android.os.ConditionVariable;
8 import android.os.StrictMode; 8 import android.os.StrictMode;
9 9
10 import static junit.framework.Assert.assertEquals; 10 import static junit.framework.Assert.assertEquals;
(...skipping 28 matching lines...) Expand all
39 39
40 public int mHttpResponseDataLength = 0; 40 public int mHttpResponseDataLength = 0;
41 public String mResponseAsString = ""; 41 public String mResponseAsString = "";
42 42
43 private static final int READ_BUFFER_SIZE = 32 * 1024; 43 private static final int READ_BUFFER_SIZE = 32 * 1024;
44 44
45 // When false, the consumer is responsible for all calls into the request 45 // When false, the consumer is responsible for all calls into the request
46 // that advance it. 46 // that advance it.
47 private boolean mAutoAdvance = true; 47 private boolean mAutoAdvance = true;
48 48
49 // Whether to permit calls on the network thread.
50 private boolean mAllowDirectExecutor = false;
51
49 // Conditionally fail on certain steps. 52 // Conditionally fail on certain steps.
50 private FailureType mFailureType = FailureType.NONE; 53 private FailureType mFailureType = FailureType.NONE;
51 private ResponseStep mFailureStep = ResponseStep.NOTHING; 54 private ResponseStep mFailureStep = ResponseStep.NOTHING;
52 55
53 // Signals when request is done either successfully or not. 56 // Signals when request is done either successfully or not.
54 private final ConditionVariable mDone = new ConditionVariable(); 57 private final ConditionVariable mDone = new ConditionVariable();
55 58
56 // Signaled on each step when mAutoAdvance is false. 59 // Signaled on each step when mAutoAdvance is false.
57 private final ConditionVariable mStepBlock = new ConditionVariable(); 60 private final ConditionVariable mStepBlock = new ConditionVariable();
58 61
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 // Same as above, but continues to advance the request after posting 104 // Same as above, but continues to advance the request after posting
102 // the cancellation task. 105 // the cancellation task.
103 CANCEL_ASYNC_WITHOUT_PAUSE, 106 CANCEL_ASYNC_WITHOUT_PAUSE,
104 THROW_SYNC 107 THROW_SYNC
105 } 108 }
106 109
107 public void setAutoAdvance(boolean autoAdvance) { 110 public void setAutoAdvance(boolean autoAdvance) {
108 mAutoAdvance = autoAdvance; 111 mAutoAdvance = autoAdvance;
109 } 112 }
110 113
114 public void setAllowDirectExecutor(boolean allowed) {
mef 2016/08/30 17:55:47 maybe instead of setAllowDirectExecutor() use setU
Charles 2016/08/30 20:11:06 That wouldn't fly for javaurlrequest, which has a
115 mAllowDirectExecutor = allowed;
116 }
117
111 public void setFailure(FailureType failureType, ResponseStep failureStep) { 118 public void setFailure(FailureType failureType, ResponseStep failureStep) {
112 mFailureStep = failureStep; 119 mFailureStep = failureStep;
113 mFailureType = failureType; 120 mFailureType = failureType;
114 } 121 }
115 122
116 public void blockForDone() { 123 public void blockForDone() {
117 mDone.block(); 124 mDone.block();
118 } 125 }
119 126
120 public void waitForNextStep() { 127 public void waitForNextStep() {
(...skipping 23 matching lines...) Expand all
144 mRedirectResponseInfoList.add(info); 151 mRedirectResponseInfoList.add(info);
145 ++mRedirectCount; 152 ++mRedirectCount;
146 if (maybeThrowCancelOrPause(request)) { 153 if (maybeThrowCancelOrPause(request)) {
147 return; 154 return;
148 } 155 }
149 request.followRedirect(); 156 request.followRedirect();
150 } 157 }
151 158
152 @Override 159 @Override
153 public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { 160 public void onResponseStarted(UrlRequest request, UrlResponseInfo info) {
154 assertEquals(mExecutorThread, Thread.currentThread()); 161 if (!mAllowDirectExecutor) {
162 assertEquals(mExecutorThread, Thread.currentThread());
163 }
155 assertFalse(request.isDone()); 164 assertFalse(request.isDone());
156 assertTrue(mResponseStep == ResponseStep.NOTHING 165 assertTrue(mResponseStep == ResponseStep.NOTHING
157 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); 166 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT);
158 assertNull(mError); 167 assertNull(mError);
159 168
160 mResponseStep = ResponseStep.ON_RESPONSE_STARTED; 169 mResponseStep = ResponseStep.ON_RESPONSE_STARTED;
161 mResponseInfo = info; 170 mResponseInfo = info;
162 if (maybeThrowCancelOrPause(request)) { 171 if (maybeThrowCancelOrPause(request)) {
163 return; 172 return;
164 } 173 }
165 startNextRead(request); 174 startNextRead(request);
166 } 175 }
167 176
168 @Override 177 @Override
169 public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBu ffer byteBuffer) { 178 public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBu ffer byteBuffer) {
170 assertEquals(mExecutorThread, Thread.currentThread()); 179 if (!mAllowDirectExecutor) {
180 assertEquals(mExecutorThread, Thread.currentThread());
181 }
171 assertFalse(request.isDone()); 182 assertFalse(request.isDone());
172 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED 183 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED
173 || mResponseStep == ResponseStep.ON_READ_COMPLETED); 184 || mResponseStep == ResponseStep.ON_READ_COMPLETED);
174 assertNull(mError); 185 assertNull(mError);
175 186
176 mResponseStep = ResponseStep.ON_READ_COMPLETED; 187 mResponseStep = ResponseStep.ON_READ_COMPLETED;
177 188
178 final byte[] lastDataReceivedAsBytes; 189 final byte[] lastDataReceivedAsBytes;
179 final int bytesRead = byteBuffer.position() - mBufferPositionBeforeRead; 190 final int bytesRead = byteBuffer.position() - mBufferPositionBeforeRead;
180 mHttpResponseDataLength += bytesRead; 191 mHttpResponseDataLength += bytesRead;
181 lastDataReceivedAsBytes = new byte[bytesRead]; 192 lastDataReceivedAsBytes = new byte[bytesRead];
182 // Rewind |byteBuffer.position()| to pre-read() position. 193 // Rewind |byteBuffer.position()| to pre-read() position.
183 byteBuffer.position(mBufferPositionBeforeRead); 194 byteBuffer.position(mBufferPositionBeforeRead);
184 // This restores |byteBuffer.position()| to its value on entrance to 195 // This restores |byteBuffer.position()| to its value on entrance to
185 // this function. 196 // this function.
186 byteBuffer.get(lastDataReceivedAsBytes); 197 byteBuffer.get(lastDataReceivedAsBytes);
187 mResponseAsString += new String(lastDataReceivedAsBytes); 198 mResponseAsString += new String(lastDataReceivedAsBytes);
188 199
189 if (maybeThrowCancelOrPause(request)) { 200 if (maybeThrowCancelOrPause(request)) {
190 return; 201 return;
191 } 202 }
192 startNextRead(request); 203 startNextRead(request);
193 } 204 }
194 205
195 @Override 206 @Override
196 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { 207 public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
197 assertEquals(mExecutorThread, Thread.currentThread()); 208 if (!mAllowDirectExecutor) {
209 assertEquals(mExecutorThread, Thread.currentThread());
210 }
198 assertTrue(request.isDone()); 211 assertTrue(request.isDone());
199 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED 212 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED
200 || mResponseStep == ResponseStep.ON_READ_COMPLETED); 213 || mResponseStep == ResponseStep.ON_READ_COMPLETED);
201 assertFalse(mOnErrorCalled); 214 assertFalse(mOnErrorCalled);
202 assertFalse(mOnCanceledCalled); 215 assertFalse(mOnCanceledCalled);
203 assertNull(mError); 216 assertNull(mError);
204 217
205 mResponseStep = ResponseStep.ON_SUCCEEDED; 218 mResponseStep = ResponseStep.ON_SUCCEEDED;
206 mResponseInfo = info; 219 mResponseInfo = info;
207 openDone(); 220 openDone();
208 maybeThrowCancelOrPause(request); 221 maybeThrowCancelOrPause(request);
209 } 222 }
210 223
211 @Override 224 @Override
212 public void onFailed(UrlRequest request, UrlResponseInfo info, UrlRequestExc eption error) { 225 public void onFailed(UrlRequest request, UrlResponseInfo info, UrlRequestExc eption error) {
213 assertEquals(mExecutorThread, Thread.currentThread()); 226 // If the failure is because of prohibited direct execution, the test sh ouldn't fail
227 // since the request already did.
228 if (!mAllowDirectExecutor
229 && !(error.getCause() instanceof InlineExecutionProhibitedExcept ion)) {
230 assertEquals(mExecutorThread, Thread.currentThread());
231 }
214 assertTrue(request.isDone()); 232 assertTrue(request.isDone());
215 // Shouldn't happen after success. 233 // Shouldn't happen after success.
216 assertTrue(mResponseStep != ResponseStep.ON_SUCCEEDED); 234 assertTrue(mResponseStep != ResponseStep.ON_SUCCEEDED);
217 // Should happen at most once for a single request. 235 // Should happen at most once for a single request.
218 assertFalse(mOnErrorCalled); 236 assertFalse(mOnErrorCalled);
219 assertFalse(mOnCanceledCalled); 237 assertFalse(mOnCanceledCalled);
220 assertNull(mError); 238 assertNull(mError);
221 if (mFailureType == FailureType.THROW_SYNC) { 239 if (mFailureType == FailureType.THROW_SYNC) {
222 assertEquals(UrlRequestError.LISTENER_EXCEPTION_THROWN, error.getErr orCode()); 240 assertEquals(UrlRequestError.LISTENER_EXCEPTION_THROWN, error.getErr orCode());
223 assertEquals(0, error.getCronetInternalErrorCode()); 241 assertEquals(0, error.getCronetInternalErrorCode());
224 assertEquals("Exception received from UrlRequest.Callback", error.ge tMessage()); 242 assertEquals("Exception received from UrlRequest.Callback", error.ge tMessage());
225 assertNotNull(error.getCause()); 243 assertNotNull(error.getCause());
226 assertTrue(error.getCause() instanceof IllegalStateException); 244 assertTrue(error.getCause() instanceof IllegalStateException);
227 assertEquals("Listener Exception.", error.getCause().getMessage()); 245 assertEquals("Listener Exception.", error.getCause().getMessage());
228 assertFalse(error.immediatelyRetryable()); 246 assertFalse(error.immediatelyRetryable());
229 } 247 }
230 248
231 mOnErrorCalled = true; 249 mOnErrorCalled = true;
232 mError = error; 250 mError = error;
233 openDone(); 251 openDone();
252 System.out.println("opened");
mef 2016/08/30 17:55:47 nit: remove
Charles 2016/08/30 20:11:06 Done.
234 maybeThrowCancelOrPause(request); 253 maybeThrowCancelOrPause(request);
235 } 254 }
236 255
237 @Override 256 @Override
238 public void onCanceled(UrlRequest request, UrlResponseInfo info) { 257 public void onCanceled(UrlRequest request, UrlResponseInfo info) {
239 assertEquals(mExecutorThread, Thread.currentThread()); 258 if (!mAllowDirectExecutor) {
259 assertEquals(mExecutorThread, Thread.currentThread());
260 }
240 assertTrue(request.isDone()); 261 assertTrue(request.isDone());
241 // Should happen at most once for a single request. 262 // Should happen at most once for a single request.
242 assertFalse(mOnCanceledCalled); 263 assertFalse(mOnCanceledCalled);
243 assertFalse(mOnErrorCalled); 264 assertFalse(mOnErrorCalled);
244 assertNull(mError); 265 assertNull(mError);
245 266
246 mOnCanceledCalled = true; 267 mOnCanceledCalled = true;
247 openDone(); 268 openDone();
248 maybeThrowCancelOrPause(request); 269 maybeThrowCancelOrPause(request);
249 } 270 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 }; 312 };
292 if (mFailureType == FailureType.CANCEL_ASYNC 313 if (mFailureType == FailureType.CANCEL_ASYNC
293 || mFailureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE) { 314 || mFailureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE) {
294 getExecutor().execute(task); 315 getExecutor().execute(task);
295 } else { 316 } else {
296 task.run(); 317 task.run();
297 } 318 }
298 return mFailureType != FailureType.CANCEL_ASYNC_WITHOUT_PAUSE; 319 return mFailureType != FailureType.CANCEL_ASYNC_WITHOUT_PAUSE;
299 } 320 }
300 } 321 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698