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

Unified Diff: components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequest.java

Issue 2339223002: Cronet API Refactoring (Closed)
Patch Set: Moved CronetSampleApp to AppCompat 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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequest.java
diff --git a/components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequest.java b/components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequest.java
deleted file mode 100644
index da092933716cfd3ed0d1ec33cb95b4c8d09cead9..0000000000000000000000000000000000000000
--- a/components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequest.java
+++ /dev/null
@@ -1,530 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.net;
-
-import android.content.Context;
-import android.text.TextUtils;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.ProtocolException;
-import java.net.URL;
-import java.nio.ByteBuffer;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Network request using the HttpUrlConnection implementation.
- * @deprecated Use {@link UrlRequest} instead.
- * {@hide as it's deprecated}
- */
-@Deprecated
-class HttpUrlConnectionUrlRequest implements HttpUrlRequest {
-
- private static final int MAX_CHUNK_SIZE = 8192;
-
- private static final int CONNECT_TIMEOUT = 3000;
-
- private static final int READ_TIMEOUT = 90000;
-
- private final Context mContext;
-
- private final String mDefaultUserAgent;
-
- private final String mUrl;
-
- private final Map<String, String> mHeaders;
-
- private final WritableByteChannel mSink;
-
- private final HttpUrlRequestListener mListener;
-
- private IOException mException;
-
- private HttpURLConnection mConnection;
-
- private long mOffset;
-
- private int mContentLength;
-
- private int mUploadContentLength;
-
- private long mContentLengthLimit;
-
- private boolean mCancelIfContentLengthOverLimit;
-
- private boolean mContentLengthOverLimit;
-
- private boolean mSkippingToOffset;
-
- private long mSize;
-
- private String mPostContentType;
-
- private byte[] mPostData;
-
- private ReadableByteChannel mPostDataChannel;
-
- private String mContentType;
-
- private int mHttpStatusCode;
-
- private String mHttpStatusText;
-
- private boolean mStarted;
-
- private boolean mCanceled;
-
- private String mMethod;
-
- private InputStream mResponseStream;
-
- private final Object mLock;
-
- private static ExecutorService sExecutorService;
-
- private static final Object sExecutorServiceLock = new Object();
-
- HttpUrlConnectionUrlRequest(Context context, String defaultUserAgent,
- String url, int requestPriority, Map<String, String> headers,
- HttpUrlRequestListener listener) {
- this(context, defaultUserAgent, url, requestPriority, headers,
- new ChunkedWritableByteChannel(), listener);
- }
-
- HttpUrlConnectionUrlRequest(Context context, String defaultUserAgent,
- String url, int requestPriority, Map<String, String> headers,
- WritableByteChannel sink, HttpUrlRequestListener listener) {
- if (context == null) {
- throw new NullPointerException("Context is required");
- }
- if (url == null) {
- throw new NullPointerException("URL is required");
- }
- mContext = context;
- mDefaultUserAgent = defaultUserAgent;
- mUrl = url;
- mHeaders = headers;
- mSink = sink;
- mListener = listener;
- mLock = new Object();
- }
-
- private static ExecutorService getExecutor() {
- synchronized (sExecutorServiceLock) {
- if (sExecutorService == null) {
- ThreadFactory threadFactory = new ThreadFactory() {
- private final AtomicInteger mCount = new AtomicInteger(1);
-
- @Override
- public Thread newThread(Runnable r) {
- Thread thread = new Thread(r,
- "HttpUrlConnection #"
- + mCount.getAndIncrement());
- // Note that this thread is not doing actual networking.
- // It's only a controller.
- thread.setPriority(Thread.NORM_PRIORITY);
- return thread;
- }
- };
- sExecutorService = Executors.newCachedThreadPool(threadFactory);
- }
- return sExecutorService;
- }
- }
-
- @Override
- public String getUrl() {
- return mUrl;
- }
-
- @Override
- public void setOffset(long offset) {
- mOffset = offset;
- }
-
- @Override
- public void setContentLengthLimit(long limit, boolean cancelEarly) {
- mContentLengthLimit = limit;
- mCancelIfContentLengthOverLimit = cancelEarly;
- }
-
- @Override
- public void setUploadData(String contentType, byte[] data) {
- validateNotStarted();
- mPostContentType = contentType;
- mPostData = data;
- mPostDataChannel = null;
- }
-
- @Override
- public void setUploadChannel(String contentType,
- ReadableByteChannel channel, long contentLength) {
- validateNotStarted();
- if (contentLength > Integer.MAX_VALUE) {
- throw new IllegalArgumentException(
- "Upload contentLength is too big.");
- }
- mUploadContentLength = (int) contentLength;
- mPostContentType = contentType;
- mPostDataChannel = channel;
- mPostData = null;
- }
-
-
- @Override
- public void setHttpMethod(String method) {
- validateNotStarted();
- mMethod = method;
- }
-
- @Override
- public void disableRedirects() {
- validateNotStarted();
- HttpURLConnection.setFollowRedirects(false);
- }
-
- @Override
- public void start() {
- getExecutor().execute(new Runnable() {
- @Override
- public void run() {
- startOnExecutorThread();
- }
- });
- }
-
- private void startOnExecutorThread() {
- boolean readingResponse = false;
- try {
- synchronized (mLock) {
- if (mCanceled) {
- return;
- }
- }
-
- URL url = new URL(mUrl);
- mConnection = (HttpURLConnection) url.openConnection();
- // If configured, use the provided http verb.
- if (mMethod != null) {
- try {
- mConnection.setRequestMethod(mMethod);
- } catch (ProtocolException e) {
- // Since request hasn't started earlier, it
- // must be an illegal HTTP verb.
- throw new IllegalArgumentException(e);
- }
- }
- mConnection.setConnectTimeout(CONNECT_TIMEOUT);
- mConnection.setReadTimeout(READ_TIMEOUT);
- mConnection.setInstanceFollowRedirects(true);
- if (mHeaders != null) {
- for (Entry<String, String> header : mHeaders.entrySet()) {
- mConnection.setRequestProperty(header.getKey(),
- header.getValue());
- }
- }
-
- if (mOffset != 0) {
- mConnection.setRequestProperty("Range",
- "bytes=" + mOffset + "-");
- }
-
- if (mConnection.getRequestProperty("User-Agent") == null) {
- mConnection.setRequestProperty("User-Agent", mDefaultUserAgent);
- }
-
- if (mPostData != null || mPostDataChannel != null) {
- uploadData();
- }
-
- InputStream stream = null;
- try {
- // We need to open the stream before asking for the response
- // code.
- stream = mConnection.getInputStream();
- } catch (FileNotFoundException ex) {
- // Ignore - the response has no body.
- }
-
- mHttpStatusCode = mConnection.getResponseCode();
- mHttpStatusText = mConnection.getResponseMessage();
- mContentType = mConnection.getContentType();
- mContentLength = mConnection.getContentLength();
- if (mContentLengthLimit > 0 && mContentLength > mContentLengthLimit
- && mCancelIfContentLengthOverLimit) {
- onContentLengthOverLimit();
- return;
- }
-
- mListener.onResponseStarted(this);
-
- mResponseStream = isError(mHttpStatusCode) ? mConnection
- .getErrorStream()
- : stream;
-
- if (mResponseStream != null
- && "gzip".equals(mConnection.getContentEncoding())) {
- mResponseStream = new GZIPInputStream(mResponseStream);
- mContentLength = -1;
- }
-
- if (mOffset != 0) {
- // The server may ignore the request for a byte range.
- if (mHttpStatusCode == HttpURLConnection.HTTP_OK) {
- if (mContentLength != -1) {
- mContentLength -= mOffset;
- }
- mSkippingToOffset = true;
- } else {
- mSize = mOffset;
- }
- }
-
- if (mResponseStream != null) {
- readingResponse = true;
- readResponseAsync();
- }
- } catch (IOException e) {
- mException = e;
- } finally {
- if (mPostDataChannel != null) {
- try {
- mPostDataChannel.close();
- } catch (IOException e) {
- // Ignore
- }
- }
-
- // Don't call onRequestComplete yet if we are reading the response
- // on a separate thread
- if (!readingResponse) {
- mListener.onRequestComplete(this);
- }
- }
- }
-
- private void uploadData() throws IOException {
- mConnection.setDoOutput(true);
- if (!TextUtils.isEmpty(mPostContentType)) {
- mConnection.setRequestProperty("Content-Type", mPostContentType);
- }
-
- OutputStream uploadStream = null;
- try {
- if (mPostData != null) {
- mConnection.setFixedLengthStreamingMode(mPostData.length);
- uploadStream = mConnection.getOutputStream();
- uploadStream.write(mPostData);
- } else {
- mConnection.setFixedLengthStreamingMode(mUploadContentLength);
- uploadStream = mConnection.getOutputStream();
- byte[] bytes = new byte[MAX_CHUNK_SIZE];
- ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
- while (mPostDataChannel.read(byteBuffer) > 0) {
- byteBuffer.flip();
- uploadStream.write(bytes, 0, byteBuffer.limit());
- byteBuffer.clear();
- }
- }
- } finally {
- if (uploadStream != null) {
- uploadStream.close();
- }
- }
- }
-
- private void readResponseAsync() {
- getExecutor().execute(new Runnable() {
- @Override
- public void run() {
- readResponse();
- }
- });
- }
-
- private void readResponse() {
- try {
- if (mResponseStream != null) {
- readResponseStream();
- }
- } catch (IOException e) {
- mException = e;
- } finally {
- try {
- mConnection.disconnect();
- } catch (ArrayIndexOutOfBoundsException t) {
- // Ignore it.
- }
-
- try {
- mSink.close();
- } catch (IOException e) {
- if (mException == null) {
- mException = e;
- }
- }
- }
- mListener.onRequestComplete(this);
- }
-
- private void readResponseStream() throws IOException {
- byte[] buffer = new byte[MAX_CHUNK_SIZE];
- int size;
- while (!isCanceled() && (size = mResponseStream.read(buffer)) != -1) {
- int start = 0;
- int count = size;
- mSize += size;
- if (mSkippingToOffset) {
- if (mSize <= mOffset) {
- continue;
- } else {
- mSkippingToOffset = false;
- start = (int) (mOffset - (mSize - size));
- count -= start;
- }
- }
-
- if (mContentLengthLimit != 0 && mSize > mContentLengthLimit) {
- count -= (int) (mSize - mContentLengthLimit);
- if (count > 0) {
- mSink.write(ByteBuffer.wrap(buffer, start, count));
- }
- onContentLengthOverLimit();
- return;
- }
-
- mSink.write(ByteBuffer.wrap(buffer, start, count));
- }
- }
-
- @Override
- public void cancel() {
- synchronized (mLock) {
- if (mCanceled) {
- return;
- }
-
- mCanceled = true;
- }
- }
-
- @Override
- public boolean isCanceled() {
- synchronized (mLock) {
- return mCanceled;
- }
- }
-
- @Override
- public String getNegotiatedProtocol() {
- return "";
- }
-
- @Override
- public boolean wasCached() {
- return false;
- }
-
- @Override
- public int getHttpStatusCode() {
- int httpStatusCode = mHttpStatusCode;
-
- // If we have been able to successfully resume a previously interrupted
- // download,
- // the status code will be 206, not 200. Since the rest of the
- // application is
- // expecting 200 to indicate success, we need to fake it.
- if (httpStatusCode == HttpURLConnection.HTTP_PARTIAL) {
- httpStatusCode = HttpURLConnection.HTTP_OK;
- }
- return httpStatusCode;
- }
-
- @Override
- public String getHttpStatusText() {
- return mHttpStatusText;
- }
-
- @Override
- public IOException getException() {
- if (mException == null && mContentLengthOverLimit) {
- mException = new ResponseTooLargeException();
- }
- return mException;
- }
-
- private void onContentLengthOverLimit() {
- mContentLengthOverLimit = true;
- cancel();
- }
-
- private static boolean isError(int statusCode) {
- return (statusCode / 100) != 2;
- }
-
- /**
- * Returns the response as a ByteBuffer.
- */
- @Override
- public ByteBuffer getByteBuffer() {
- return ((ChunkedWritableByteChannel) mSink).getByteBuffer();
- }
-
- @Override
- public byte[] getResponseAsBytes() {
- return ((ChunkedWritableByteChannel) mSink).getBytes();
- }
-
- @Override
- public long getContentLength() {
- return mContentLength;
- }
-
- @Override
- public String getContentType() {
- return mContentType;
- }
-
- @Override
- public String getHeader(String name) {
- if (mConnection == null) {
- throw new IllegalStateException("Response headers not available");
- }
- Map<String, List<String>> headerFields = mConnection.getHeaderFields();
- if (headerFields != null) {
- List<String> headerValues = headerFields.get(name);
- if (headerValues != null) {
- return TextUtils.join(", ", headerValues);
- }
- }
- return null;
- }
-
- @Override
- public Map<String, List<String>> getAllHeaders() {
- if (mConnection == null) {
- throw new IllegalStateException("Response headers not available");
- }
- return mConnection.getHeaderFields();
- }
-
- private void validateNotStarted() {
- if (mStarted) {
- throw new IllegalStateException("Request already started");
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698