OLD | NEW |
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 | 8 |
9 import static junit.framework.Assert.assertEquals; | 9 import static junit.framework.Assert.assertEquals; |
10 import static junit.framework.Assert.assertFalse; | 10 import static junit.framework.Assert.assertFalse; |
11 import static junit.framework.Assert.assertNull; | 11 import static junit.framework.Assert.assertNull; |
12 import static junit.framework.Assert.assertTrue; | 12 import static junit.framework.Assert.assertTrue; |
13 | 13 |
14 import java.nio.ByteBuffer; | 14 import java.nio.ByteBuffer; |
15 import java.util.ArrayList; | 15 import java.util.ArrayList; |
16 import java.util.concurrent.Executor; | 16 import java.util.concurrent.Executor; |
17 import java.util.concurrent.ExecutorService; | 17 import java.util.concurrent.ExecutorService; |
18 import java.util.concurrent.Executors; | 18 import java.util.concurrent.Executors; |
19 import java.util.concurrent.ThreadFactory; | 19 import java.util.concurrent.ThreadFactory; |
20 | 20 |
21 /** | 21 /** |
22 * Listener that tracks information from different callbacks and and has a | 22 * Listener that tracks information from different callbacks and and has a |
23 * method to block thread until the request completes on another thread. | 23 * method to block thread until the request completes on another thread. |
24 * Allows to cancel, block request or throw an exception from an arbitrary step. | 24 * Allows to cancel, block request or throw an exception from an arbitrary step. |
25 */ | 25 */ |
26 class TestUrlRequestListener extends UrlRequestListener { | 26 class TestUrlRequestListener extends UrlRequestListener { |
27 public ArrayList<ResponseInfo> mRedirectResponseInfoList = | 27 public ArrayList<UrlResponseInfo> mRedirectResponseInfoList = new ArrayList<
UrlResponseInfo>(); |
28 new ArrayList<ResponseInfo>(); | |
29 public ArrayList<String> mRedirectUrlList = new ArrayList<String>(); | 28 public ArrayList<String> mRedirectUrlList = new ArrayList<String>(); |
30 public ResponseInfo mResponseInfo; | 29 public UrlResponseInfo mResponseInfo; |
31 public ExtendedResponseInfo mExtendedResponseInfo; | |
32 public UrlRequestException mError; | 30 public UrlRequestException mError; |
33 | 31 |
34 public ResponseStep mResponseStep = ResponseStep.NOTHING; | 32 public ResponseStep mResponseStep = ResponseStep.NOTHING; |
35 | 33 |
36 public int mRedirectCount = 0; | 34 public int mRedirectCount = 0; |
37 public boolean mOnErrorCalled = false; | 35 public boolean mOnErrorCalled = false; |
38 | 36 |
39 public int mHttpResponseDataLength = 0; | 37 public int mHttpResponseDataLength = 0; |
40 public String mResponseAsString = ""; | 38 public String mResponseAsString = ""; |
41 | 39 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 | 111 |
114 public Executor getExecutor() { | 112 public Executor getExecutor() { |
115 return mExecutorService; | 113 return mExecutorService; |
116 } | 114 } |
117 | 115 |
118 public void shutdownExecutor() { | 116 public void shutdownExecutor() { |
119 mExecutorService.shutdown(); | 117 mExecutorService.shutdown(); |
120 } | 118 } |
121 | 119 |
122 @Override | 120 @Override |
123 public void onReceivedRedirect(UrlRequest request, | 121 public void onReceivedRedirect( |
124 ResponseInfo info, | 122 UrlRequest request, UrlResponseInfo info, String newLocationUrl) { |
125 String newLocationUrl) { | |
126 assertEquals(mExecutorThread, Thread.currentThread()); | 123 assertEquals(mExecutorThread, Thread.currentThread()); |
127 assertFalse(request.isDone()); | 124 assertFalse(request.isDone()); |
128 assertTrue(mResponseStep == ResponseStep.NOTHING | 125 assertTrue(mResponseStep == ResponseStep.NOTHING |
129 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); | 126 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); |
130 assertNull(mError); | 127 assertNull(mError); |
131 | 128 |
132 mResponseStep = ResponseStep.ON_RECEIVED_REDIRECT; | 129 mResponseStep = ResponseStep.ON_RECEIVED_REDIRECT; |
133 mRedirectUrlList.add(newLocationUrl); | 130 mRedirectUrlList.add(newLocationUrl); |
134 mRedirectResponseInfoList.add(info); | 131 mRedirectResponseInfoList.add(info); |
135 ++mRedirectCount; | 132 ++mRedirectCount; |
136 if (maybeThrowCancelOrPause(request)) { | 133 if (maybeThrowCancelOrPause(request)) { |
137 return; | 134 return; |
138 } | 135 } |
139 request.followRedirect(); | 136 request.followRedirect(); |
140 } | 137 } |
141 | 138 |
142 @Override | 139 @Override |
143 public void onResponseStarted(UrlRequest request, ResponseInfo info) { | 140 public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { |
144 assertEquals(mExecutorThread, Thread.currentThread()); | 141 assertEquals(mExecutorThread, Thread.currentThread()); |
145 assertFalse(request.isDone()); | 142 assertFalse(request.isDone()); |
146 assertTrue(mResponseStep == ResponseStep.NOTHING | 143 assertTrue(mResponseStep == ResponseStep.NOTHING |
147 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); | 144 || mResponseStep == ResponseStep.ON_RECEIVED_REDIRECT); |
148 assertNull(mError); | 145 assertNull(mError); |
149 | 146 |
150 mResponseStep = ResponseStep.ON_RESPONSE_STARTED; | 147 mResponseStep = ResponseStep.ON_RESPONSE_STARTED; |
151 mResponseInfo = info; | 148 mResponseInfo = info; |
152 if (maybeThrowCancelOrPause(request)) { | 149 if (maybeThrowCancelOrPause(request)) { |
153 return; | 150 return; |
154 } | 151 } |
155 startNextRead(request); | 152 startNextRead(request); |
156 } | 153 } |
157 | 154 |
158 @Override | 155 @Override |
159 public void onReadCompleted(UrlRequest request, | 156 public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBu
ffer byteBuffer) { |
160 ResponseInfo info, | |
161 ByteBuffer byteBuffer) { | |
162 assertEquals(mExecutorThread, Thread.currentThread()); | 157 assertEquals(mExecutorThread, Thread.currentThread()); |
163 assertFalse(request.isDone()); | 158 assertFalse(request.isDone()); |
164 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED | 159 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED |
165 || mResponseStep == ResponseStep.ON_READ_COMPLETED); | 160 || mResponseStep == ResponseStep.ON_READ_COMPLETED); |
166 assertNull(mError); | 161 assertNull(mError); |
167 | 162 |
168 mResponseStep = ResponseStep.ON_READ_COMPLETED; | 163 mResponseStep = ResponseStep.ON_READ_COMPLETED; |
169 | 164 |
170 final byte[] lastDataReceivedAsBytes; | 165 final byte[] lastDataReceivedAsBytes; |
171 if (mLegacyReadByteBufferAdjustment) { | 166 if (mLegacyReadByteBufferAdjustment) { |
(...skipping 15 matching lines...) Expand all Loading... |
187 } | 182 } |
188 mResponseAsString += new String(lastDataReceivedAsBytes); | 183 mResponseAsString += new String(lastDataReceivedAsBytes); |
189 | 184 |
190 if (maybeThrowCancelOrPause(request)) { | 185 if (maybeThrowCancelOrPause(request)) { |
191 return; | 186 return; |
192 } | 187 } |
193 startNextRead(request); | 188 startNextRead(request); |
194 } | 189 } |
195 | 190 |
196 @Override | 191 @Override |
197 public void onSucceeded(UrlRequest request, ExtendedResponseInfo info) { | 192 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { |
198 assertEquals(mExecutorThread, Thread.currentThread()); | 193 assertEquals(mExecutorThread, Thread.currentThread()); |
199 assertTrue(request.isDone()); | 194 assertTrue(request.isDone()); |
200 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED | 195 assertTrue(mResponseStep == ResponseStep.ON_RESPONSE_STARTED |
201 || mResponseStep == ResponseStep.ON_READ_COMPLETED); | 196 || mResponseStep == ResponseStep.ON_READ_COMPLETED); |
202 assertNull(mError); | 197 assertNull(mError); |
203 | 198 |
204 mResponseStep = ResponseStep.ON_SUCCEEDED; | 199 mResponseStep = ResponseStep.ON_SUCCEEDED; |
205 mExtendedResponseInfo = info; | 200 mResponseInfo = info; |
206 openDone(); | 201 openDone(); |
207 maybeThrowCancelOrPause(request); | 202 maybeThrowCancelOrPause(request); |
208 } | 203 } |
209 | 204 |
210 @Override | 205 @Override |
211 public void onFailed(UrlRequest request, | 206 public void onFailed(UrlRequest request, UrlResponseInfo info, UrlRequestExc
eption error) { |
212 ResponseInfo info, | |
213 UrlRequestException error) { | |
214 assertEquals(mExecutorThread, Thread.currentThread()); | 207 assertEquals(mExecutorThread, Thread.currentThread()); |
215 assertTrue(request.isDone()); | 208 assertTrue(request.isDone()); |
216 // Shouldn't happen after success. | 209 // Shouldn't happen after success. |
217 assertTrue(mResponseStep != ResponseStep.ON_SUCCEEDED); | 210 assertTrue(mResponseStep != ResponseStep.ON_SUCCEEDED); |
218 // Should happen at most once for a single request. | 211 // Should happen at most once for a single request. |
219 assertFalse(mOnErrorCalled); | 212 assertFalse(mOnErrorCalled); |
220 assertNull(mError); | 213 assertNull(mError); |
221 | 214 |
222 mOnErrorCalled = true; | 215 mOnErrorCalled = true; |
223 mError = error; | 216 mError = error; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 if (mFailureType == FailureType.CANCEL_ASYNC | 263 if (mFailureType == FailureType.CANCEL_ASYNC |
271 || mFailureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE) { | 264 || mFailureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE) { |
272 getExecutor().execute(task); | 265 getExecutor().execute(task); |
273 } else { | 266 } else { |
274 task.run(); | 267 task.run(); |
275 } | 268 } |
276 return mFailureType != FailureType.CANCEL_ASYNC_WITHOUT_PAUSE; | 269 return mFailureType != FailureType.CANCEL_ASYNC_WITHOUT_PAUSE; |
277 } | 270 } |
278 } | 271 } |
279 | 272 |
OLD | NEW |