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

Side by Side Diff: components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.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.urlconnection; 5 package org.chromium.net.urlconnection;
6 6
7 import android.util.Pair; 7 import android.util.Pair;
8 8
9 import org.chromium.base.Log; 9 import org.chromium.base.Log;
10 import org.chromium.net.CronetEngine;
10 import org.chromium.net.ExtendedResponseInfo; 11 import org.chromium.net.ExtendedResponseInfo;
11 import org.chromium.net.ResponseInfo; 12 import org.chromium.net.ResponseInfo;
12 import org.chromium.net.UrlRequest; 13 import org.chromium.net.UrlRequest;
13 import org.chromium.net.UrlRequestContext;
14 import org.chromium.net.UrlRequestException; 14 import org.chromium.net.UrlRequestException;
15 import org.chromium.net.UrlRequestListener; 15 import org.chromium.net.UrlRequestListener;
16 16
17 import java.io.FileNotFoundException; 17 import java.io.FileNotFoundException;
18 import java.io.IOException; 18 import java.io.IOException;
19 import java.io.InputStream; 19 import java.io.InputStream;
20 import java.io.OutputStream; 20 import java.io.OutputStream;
21 import java.net.HttpURLConnection; 21 import java.net.HttpURLConnection;
22 import java.net.MalformedURLException; 22 import java.net.MalformedURLException;
23 import java.net.ProtocolException; 23 import java.net.ProtocolException;
24 import java.net.URL; 24 import java.net.URL;
25 import java.nio.ByteBuffer; 25 import java.nio.ByteBuffer;
26 import java.util.ArrayList; 26 import java.util.ArrayList;
27 import java.util.Collections; 27 import java.util.Collections;
28 import java.util.List; 28 import java.util.List;
29 import java.util.Map; 29 import java.util.Map;
30 import java.util.TreeMap; 30 import java.util.TreeMap;
31 31
32 /** 32 /**
33 * An implementation of {@link HttpURLConnection} that uses Cronet to send 33 * An implementation of {@link HttpURLConnection} that uses Cronet to send
34 * requests and receive responses. 34 * requests and receive responses.
35 */ 35 */
36 class CronetHttpURLConnection extends HttpURLConnection { 36 class CronetHttpURLConnection extends HttpURLConnection {
37 private static final String TAG = "cr.CronetHttpURLConn"; 37 private static final String TAG = "cr.CronetHttpURLConn";
38 private static final String CONTENT_LENGTH = "Content-Length"; 38 private static final String CONTENT_LENGTH = "Content-Length";
39 private final UrlRequestContext mUrlRequestContext; 39 private final CronetEngine mCronetEngine;
40 private final MessageLoop mMessageLoop; 40 private final MessageLoop mMessageLoop;
41 private final UrlRequest mRequest; 41 private UrlRequest mRequest;
42 private final List<Pair<String, String>> mRequestHeaders; 42 private final List<Pair<String, String>> mRequestHeaders;
43 43
44 private CronetInputStream mInputStream; 44 private CronetInputStream mInputStream;
45 private CronetOutputStream mOutputStream; 45 private CronetOutputStream mOutputStream;
46 private ResponseInfo mResponseInfo; 46 private ResponseInfo mResponseInfo;
47 private UrlRequestException mException; 47 private UrlRequestException mException;
48 private boolean mOnRedirectCalled = false; 48 private boolean mOnRedirectCalled = false;
49 private boolean mHasResponse = false; 49 private boolean mHasResponse = false;
50 50
51 public CronetHttpURLConnection(URL url, 51 public CronetHttpURLConnection(URL url, CronetEngine cronetEngine) {
52 UrlRequestContext urlRequestContext) {
53 super(url); 52 super(url);
54 mUrlRequestContext = urlRequestContext; 53 mCronetEngine = cronetEngine;
55 mMessageLoop = new MessageLoop(); 54 mMessageLoop = new MessageLoop();
56 mRequest = mUrlRequestContext.createRequest(url.toString(),
57 new CronetUrlRequestListener(), mMessageLoop);
58 mInputStream = new CronetInputStream(this); 55 mInputStream = new CronetInputStream(this);
59 mRequestHeaders = new ArrayList<Pair<String, String>>(); 56 mRequestHeaders = new ArrayList<Pair<String, String>>();
60 } 57 }
61 58
62 /** 59 /**
63 * Opens a connection to the resource. If the connect method is called when 60 * Opens a connection to the resource. If the connect method is called when
64 * the connection has already been opened (indicated by the connected field 61 * the connection has already been opened (indicated by the connected field
65 * having the value {@code true}), the call is ignored. 62 * having the value {@code true}), the call is ignored.
66 */ 63 */
67 @Override 64 @Override
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 return contentLength; 245 return contentLength;
249 } 246 }
250 247
251 /** 248 /**
252 * Starts the request if {@code connected} is false. 249 * Starts the request if {@code connected} is false.
253 */ 250 */
254 private void startRequest() throws IOException { 251 private void startRequest() throws IOException {
255 if (connected) { 252 if (connected) {
256 return; 253 return;
257 } 254 }
255 final UrlRequest.Builder requestBuilder = new UrlRequest.Builder(
256 getURL().toString(), new CronetUrlRequestListener(), mMessageLoo p, mCronetEngine);
258 if (doOutput) { 257 if (doOutput) {
259 if (mOutputStream != null) { 258 if (mOutputStream != null) {
260 mRequest.setUploadDataProvider(mOutputStream.getUploadDataProvid er(), mMessageLoop); 259 requestBuilder.setUploadDataProvider(
260 mOutputStream.getUploadDataProvider(), mMessageLoop);
261 if (getRequestProperty(CONTENT_LENGTH) == null && !isChunkedUplo ad()) { 261 if (getRequestProperty(CONTENT_LENGTH) == null && !isChunkedUplo ad()) {
262 addRequestProperty(CONTENT_LENGTH, 262 addRequestProperty(CONTENT_LENGTH,
263 Long.toString(mOutputStream.getUploadDataProvider(). getLength())); 263 Long.toString(mOutputStream.getUploadDataProvider(). getLength()));
264 } 264 }
265 // Tells mOutputStream that startRequest() has been called, so 265 // Tells mOutputStream that startRequest() has been called, so
266 // the underlying implementation can prepare for reading if need ed. 266 // the underlying implementation can prepare for reading if need ed.
267 mOutputStream.setConnected(); 267 mOutputStream.setConnected();
268 } else { 268 } else {
269 if (getRequestProperty(CONTENT_LENGTH) == null) { 269 if (getRequestProperty(CONTENT_LENGTH) == null) {
270 addRequestProperty(CONTENT_LENGTH, "0"); 270 addRequestProperty(CONTENT_LENGTH, "0");
271 } 271 }
272 } 272 }
273 // Default Content-Type to application/x-www-form-urlencoded 273 // Default Content-Type to application/x-www-form-urlencoded
274 if (getRequestProperty("Content-Type") == null) { 274 if (getRequestProperty("Content-Type") == null) {
275 addRequestProperty("Content-Type", 275 addRequestProperty("Content-Type",
276 "application/x-www-form-urlencoded"); 276 "application/x-www-form-urlencoded");
277 } 277 }
278 } 278 }
279 for (Pair<String, String> requestHeader : mRequestHeaders) { 279 for (Pair<String, String> requestHeader : mRequestHeaders) {
280 mRequest.addHeader(requestHeader.first, requestHeader.second); 280 requestBuilder.addHeader(requestHeader.first, requestHeader.second);
281 } 281 }
282 if (!getUseCaches()) { 282 if (!getUseCaches()) {
283 mRequest.disableCache(); 283 requestBuilder.disableCache();
284 } 284 }
285 connected = true; 285 connected = true;
286 mRequest = requestBuilder.build();
286 // Start the request. 287 // Start the request.
287 mRequest.start(); 288 mRequest.start();
288 } 289 }
289 290
290 /** 291 /**
291 * Returns an input stream from the server in the case of an error such as 292 * Returns an input stream from the server in the case of an error such as
292 * the requested file has not been found on the remote server. 293 * the requested file has not been found on the remote server.
293 */ 294 */
294 @Override 295 @Override
295 public InputStream getErrorStream() { 296 public InputStream getErrorStream() {
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 } 537 }
537 538
538 /** 539 /**
539 * Returns whether the client has used {@link #setChunkedStreamingMode} to 540 * Returns whether the client has used {@link #setChunkedStreamingMode} to
540 * set chunked encoding for upload. 541 * set chunked encoding for upload.
541 */ 542 */
542 private boolean isChunkedUpload() { 543 private boolean isChunkedUpload() {
543 return chunkLength > 0; 544 return chunkLength > 0;
544 } 545 }
545 } 546 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698