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

Side by Side Diff: components/cronet/android/java/src/org/chromium/net/UrlRequest.java

Issue 1363723002: [Cronet] Create Builders, rename UrlRequestContext to CronetEngine (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Ben's tests Created 5 years, 2 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.util.Pair;
8
7 import java.nio.ByteBuffer; 9 import java.nio.ByteBuffer;
10 import java.util.ArrayList;
8 import java.util.concurrent.Executor; 11 import java.util.concurrent.Executor;
9 12
10 /** 13 /**
11 * Controls an HTTP request (GET, PUT, POST etc). 14 * Controls an HTTP request (GET, PUT, POST etc).
12 * Created using {@link UrlRequestContext#createRequest UrlRequestContext.create Request()}. 15 * Created using {@link UrlRequest.Builder}.
13 * Note: All methods must be called on the {@link Executor} passed in during cre ation. 16 * Note: All methods must be called on the {@link Executor} passed in during cre ation.
14 */ 17 */
15 public interface UrlRequest { 18 public interface UrlRequest {
16 /** 19 /**
20 * Builder for {@link UrlRequest}s. Allows configuring requests before const ructing them
21 * with {@link Builder#build}.
22 */
23 public static final class Builder {
24 // All fields are temporary storage of UrlRequest configuration to be
25 // copied to built UrlRequests.
26
27 // CronetEngine to execute request.
28 final CronetEngine mCronetEngine;
29 // URL to request.
30 final String mUrl;
31 // Listener to receive progress callbacks.
32 final UrlRequestListener mListener;
33 // Executor to call listener on.
34 final Executor mExecutor;
35 // HTTP method (e.g. GET, POST etc).
36 String mMethod;
37 // List of request headers, stored as header field name and value pairs.
38 final ArrayList<Pair<String, String>> mRequestHeaders =
39 new ArrayList<Pair<String, String>>();
40 // Disable the cache for just this request.
41 boolean mDisableCache;
42 // Priority of request.
43 int mPriority = REQUEST_PRIORITY_MEDIUM;
44 // If request is an upload, this provides the request body data.
45 UploadDataProvider mUploadDataProvider;
46 // Executor to call upload data provider back on.
47 Executor mUploadDataProviderExecutor;
48
49 /**
50 * Creates a builder for {@link UrlRequest} objects. All callbacks for
51 * generated {@link UrlRequest} objects will be called on
52 * {@code executor}'s thread. {@code executor} must not run tasks on the
53 * current thread to prevent blocking networking operations and causing
54 * exceptions during shutdown.
55 *
56 * @param url {@link java.net.URL} for the generated requests.
57 * @param listener callback class that gets called on different events.
58 * @param executor {@link Executor} on which all callbacks will be calle d.
59 * @param cronetEngine {@link CronetEngine} used to execute this request .
60 */
61 public Builder(String url, UrlRequestListener listener, Executor executo r,
62 CronetEngine cronetEngine) {
63 if (url == null) {
64 throw new NullPointerException("URL is required.");
65 }
66 if (listener == null) {
67 throw new NullPointerException("Listener is required.");
68 }
69 if (executor == null) {
70 throw new NullPointerException("Executor is required.");
71 }
72 if (cronetEngine == null) {
73 throw new NullPointerException("CronetEngine is required.");
74 }
75 mUrl = url;
76 mListener = listener;
77 mExecutor = executor;
78 mCronetEngine = cronetEngine;
79 }
80
81 /**
82 * Sets the HTTP method verb to use for this request.
83 *
84 * <p>The default when this method is not called is "GET" if the request has
85 * no body or "POST" if it does.
86 *
87 * @param method "GET", "HEAD", "DELETE", "POST" or "PUT".
88 * @return the builder to facilitate chaining.
89 */
90 public Builder setHttpMethod(String method) {
91 if (method == null) {
92 throw new NullPointerException("Method is required.");
93 }
94 mMethod = method;
95 return this;
96 }
97
98 /**
99 * Adds a request header.
100 *
101 * @param header header name.
102 * @param value header value.
103 * @return the builder to facilitate chaining.
104 */
105 public Builder addHeader(String header, String value) {
106 if (header == null) {
107 throw new NullPointerException("Invalid header name.");
108 }
109 if (value == null) {
110 throw new NullPointerException("Invalid header value.");
111 }
112 mRequestHeaders.add(Pair.create(header, value));
113 return this;
114 }
115
116 /**
117 * Disables cache for the request. If context is not set up to use cache ,
118 * this call has no effect.
119 * @return the builder to facilitate chaining.
120 */
121 public Builder disableCache() {
122 mDisableCache = true;
123 return this;
124 }
125
126 /**
127 * Lowest request priority. Passed to {@link #setPriority}.
128 */
129 public static final int REQUEST_PRIORITY_IDLE = 0;
130 /**
131 * Very low request priority. Passed to {@link #setPriority}.
132 */
133 public static final int REQUEST_PRIORITY_LOWEST = 1;
134 /**
135 * Low request priority. Passed to {@link #setPriority}.
136 */
137 public static final int REQUEST_PRIORITY_LOW = 2;
138 /**
139 * Medium request priority. Passed to {@link #setPriority}.
140 */
141 public static final int REQUEST_PRIORITY_MEDIUM = 3;
142 /**
143 * Highest request priority. Passed to {@link #setPriority}.
144 */
145 public static final int REQUEST_PRIORITY_HIGHEST = 4;
146
147 /**
148 * Sets priority of the request which should be one of the
149 * {@link #REQUEST_PRIORITY_IDLE REQUEST_PRIORITY_*} values.
150 * Defaults to {@link #REQUEST_PRIORITY_MEDIUM}
151 *
152 * @param priority priority of the request which should be one of the
153 * {@link #REQUEST_PRIORITY_IDLE REQUEST_PRIORITY_*} values.
154 * @return the builder to facilitate chaining.
155 */
156 public Builder setPriority(int priority) {
157 mPriority = priority;
158 return this;
159 }
160
161 /**
162 * Sets upload data provider. Switches method to "POST" if not
163 * explicitly set. Starting the request will throw an exception if a
164 * Content-Type header is not set.
165 *
166 * @param uploadDataProvider responsible for providing the upload data.
167 * @param executor All {@code uploadDataProvider} methods will be called
168 * using this {@code Executor}. May optionally be the same
169 * {@code Executor} the request itself is using.
170 * @return the builder to facilitate chaining.
171 */
172 public Builder setUploadDataProvider(
173 UploadDataProvider uploadDataProvider, Executor executor) {
174 if (uploadDataProvider == null) {
175 throw new NullPointerException("Invalid UploadDataProvider.");
176 }
177 if (executor == null) {
178 throw new NullPointerException("Invalid UploadDataProvider Execu tor.");
179 }
180 if (mMethod == null) {
181 mMethod = "POST";
182 }
183 mUploadDataProvider = uploadDataProvider;
184 mUploadDataProviderExecutor = executor;
185 return this;
186 }
187
188 /**
189 * Creates a {@link UrlRequest} using configuration within this
190 * {@link Builder}. The returned {@code UrlRequest} can then be started
191 * by calling {@link UrlRequest#start}.
192 *
193 * @return constructed {@link UrlRequest} using configuration within
194 * this {@link Builder}.
195 */
196 public UrlRequest build() {
197 final UrlRequest request =
198 mCronetEngine.createRequest(mUrl, mListener, mExecutor, mPri ority);
199 if (mMethod != null) {
200 request.setHttpMethod(mMethod);
201 }
202 if (mDisableCache) {
203 request.disableCache();
204 }
205 for (Pair<String, String> header : mRequestHeaders) {
206 request.addHeader(header.first, header.second);
207 }
208 if (mUploadDataProvider != null) {
209 request.setUploadDataProvider(mUploadDataProvider, mUploadDataPr oviderExecutor);
210 }
211 return request;
212 }
213 }
214
215 /**
17 * Request status values returned by {@link #getStatus}. 216 * Request status values returned by {@link #getStatus}.
18 */ 217 */
19 public static class Status { 218 public static class Status {
20 /** 219 /**
21 * This state indicates that the request is completed, canceled, or is n ot 220 * This state indicates that the request is completed, canceled, or is n ot
22 * started. 221 * started.
23 */ 222 */
24 public static final int INVALID = -1; 223 public static final int INVALID = -1;
25 /** 224 /**
26 * This state corresponds to a resource load that has either not yet beg un 225 * This state corresponds to a resource load that has either not yet beg un
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 /** 388 /**
190 * Called on {@link UrlRequest}'s {@link Executor}'s thread when request 389 * Called on {@link UrlRequest}'s {@link Executor}'s thread when request
191 * status is obtained. 390 * status is obtained.
192 * @param status integer representing the status of the request. It is 391 * @param status integer representing the status of the request. It is
193 * one of the values defined in {@link Status}. 392 * one of the values defined in {@link Status}.
194 */ 393 */
195 public abstract void onStatus(int status); 394 public abstract void onStatus(int status);
196 } 395 }
197 396
198 /** 397 /**
199 * Lowest request priority. Passed to {@link UrlRequestContext#createRequest (String,
200 * UrlRequestListener, Executor, int) UrlRequestContext.createRequest()}.
201 */
202 public static final int REQUEST_PRIORITY_IDLE = 0;
203 /**
204 * Very low request priority. Passed to {@link UrlRequestContext#createReque st(String,
205 * UrlRequestListener, Executor, int) UrlRequestContext.createRequest()}.
206 */
207 public static final int REQUEST_PRIORITY_LOWEST = 1;
208 /**
209 * Low request priority. Passed to {@link UrlRequestContext#createRequest(St ring,
210 * UrlRequestListener, Executor, int) UrlRequestContext.createRequest()}.
211 */
212 public static final int REQUEST_PRIORITY_LOW = 2;
213 /**
214 * Medium request priority. Passed to {@link UrlRequestContext#createRequest (String,
215 * UrlRequestListener, Executor, int) UrlRequestContext.createRequest()}.
216 */
217 public static final int REQUEST_PRIORITY_MEDIUM = 3;
218 /**
219 * Highest request priority. Passed to {@link UrlRequestContext#createReques t(String,
220 * UrlRequestListener, Executor, int) UrlRequestContext.createRequest()}.
221 */
222 public static final int REQUEST_PRIORITY_HIGHEST = 4;
223
224 // More setters go here. They may only be called before start (Maybe
225 // also allow during redirects). Could optionally instead use arguments
226 // to URLRequestFactory when creating the request.
227
228 /**
229 * Sets the HTTP method verb to use for this request. Must be done before 398 * Sets the HTTP method verb to use for this request. Must be done before
230 * request has started. 399 * request has started.
231 * 400 *
232 * <p>The default when this method is not called is "GET" if the request has 401 * <p>The default when this method is not called is "GET" if the request has
233 * no body or "POST" if it does. 402 * no body or "POST" if it does.
234 * 403 *
235 * @param method "GET", "HEAD", "DELETE", "POST" or "PUT". 404 * @param method "GET", "HEAD", "DELETE", "POST" or "PUT".
405 * @deprecated Use {@link Builder#setHttpMethod}.
236 */ 406 */
237 public void setHttpMethod(String method); 407 @Deprecated public void setHttpMethod(String method);
238 408
239 /** 409 /**
240 * Adds a request header. Must be done before request has started. 410 * Adds a request header. Must be done before request has started.
241 * 411 *
242 * @param header header name. 412 * @param header header name.
243 * @param value header value. 413 * @param value header value.
414 * @deprecated Use {@link Builder#setPriority}.
244 */ 415 */
245 public void addHeader(String header, String value); 416 @Deprecated public void addHeader(String header, String value);
246 417
247 /** 418 /**
248 * Sets upload data provider. Must be done before request has started. May o nly be 419 * Sets upload data provider. Must be done before request has started. May o nly be
249 * invoked once per request. Switches method to "POST" if not explicitly 420 * invoked once per request. Switches method to "POST" if not explicitly
250 * set. Starting the request will throw an exception if a Content-Type 421 * set. Starting the request will throw an exception if a Content-Type
251 * header is not set. 422 * header is not set.
252 * 423 *
253 * @param uploadDataProvider responsible for providing the upload data. 424 * @param uploadDataProvider responsible for providing the upload data.
254 * @param executor All {@code uploadDataProvider} methods will be called 425 * @param executor All {@code uploadDataProvider} methods will be called
255 * using this {@code Executor}. May optionally be the same 426 * using this {@code Executor}. May optionally be the same
256 * {@code Executor} the request itself is using. 427 * {@code Executor} the request itself is using.
428 * @deprecated Use {@link Builder#setUploadDataProvider}.
257 */ 429 */
430 @Deprecated
258 public void setUploadDataProvider(UploadDataProvider uploadDataProvider, Exe cutor executor); 431 public void setUploadDataProvider(UploadDataProvider uploadDataProvider, Exe cutor executor);
259 432
260 /** 433 /**
261 * Starts the request, all callbacks go to listener. May only be called 434 * Starts the request, all callbacks go to listener. May only be called
262 * once. May not be called if {@link #cancel} has been called. 435 * once. May not be called if {@link #cancel} has been called.
263 */ 436 */
264 public void start(); 437 public void start();
265 438
266 /** 439 /**
267 * Follows a pending redirect. Must only be called at most once for each 440 * Follows a pending redirect. Must only be called at most once for each
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 * Returns {@code true} if the request was successfully started and is now 512 * Returns {@code true} if the request was successfully started and is now
340 * done (completed, canceled, or failed). 513 * done (completed, canceled, or failed).
341 * @return {@code true} if the request was successfully started and is now 514 * @return {@code true} if the request was successfully started and is now
342 * done (completed, canceled, or failed). 515 * done (completed, canceled, or failed).
343 */ 516 */
344 public boolean isDone(); 517 public boolean isDone();
345 518
346 /** 519 /**
347 * Disables cache for the request. If context is not set up to use cache, 520 * Disables cache for the request. If context is not set up to use cache,
348 * this call has no effect. 521 * this call has no effect.
522 * @deprecated Use {@link Builder#disableCache}.
349 */ 523 */
350 public void disableCache(); 524 @Deprecated public void disableCache();
351 525
352 /** 526 /**
353 * Queries the status of the request. 527 * Queries the status of the request.
354 * @param listener a {@link StatusListener} that will be called back with 528 * @param listener a {@link StatusListener} that will be called back with
355 * the request's current status. {@code listener} will be called 529 * the request's current status. {@code listener} will be called
356 * back on the {@link Executor} passed in when the request was 530 * back on the {@link Executor} passed in when the request was
357 * created. 531 * created.
358 */ 532 */
359 public void getStatus(final StatusListener listener); 533 public void getStatus(final StatusListener listener);
360 534
361 // Note: There are deliberately no accessors for the results of the request 535 // Note: There are deliberately no accessors for the results of the request
362 // here. Having none removes any ambiguity over when they are populated, 536 // here. Having none removes any ambiguity over when they are populated,
363 // particularly in the redirect case. 537 // particularly in the redirect case.
364 } 538 }
365 539
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698