Chromium Code Reviews| Index: components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java |
| diff --git a/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java b/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dd6bf7894896d0a43dca62c69e43b987ae1893a0 |
| --- /dev/null |
| +++ b/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java |
| @@ -0,0 +1,147 @@ |
| +// Copyright 2016 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.impl; |
| + |
| +import android.support.annotation.IntDef; |
| + |
| +import static org.chromium.net.UrlRequest.Status.CONNECTING; |
| +import static org.chromium.net.UrlRequest.Status.DOWNLOADING_PROXY_SCRIPT; |
| +import static org.chromium.net.UrlRequest.Status.ESTABLISHING_PROXY_TUNNEL; |
| +import static org.chromium.net.UrlRequest.Status.IDLE; |
| +import static org.chromium.net.UrlRequest.Status.INVALID; |
| +import static org.chromium.net.UrlRequest.Status.READING_RESPONSE; |
| +import static org.chromium.net.UrlRequest.Status.RESOLVING_HOST; |
| +import static org.chromium.net.UrlRequest.Status.RESOLVING_HOST_IN_PROXY_SCRIPT; |
| +import static org.chromium.net.UrlRequest.Status.RESOLVING_PROXY_FOR_URL; |
| +import static org.chromium.net.UrlRequest.Status.SENDING_REQUEST; |
| +import static org.chromium.net.UrlRequest.Status.SSL_HANDSHAKE; |
| +import static org.chromium.net.UrlRequest.Status.WAITING_FOR_AVAILABLE_SOCKET; |
| +import static org.chromium.net.UrlRequest.Status.WAITING_FOR_CACHE; |
| +import static org.chromium.net.UrlRequest.Status.WAITING_FOR_DELEGATE; |
| +import static org.chromium.net.UrlRequest.Status.WAITING_FOR_RESPONSE; |
| +import static org.chromium.net.UrlRequest.Status.WAITING_FOR_STALLED_SOCKET_POOL; |
| + |
| +import org.chromium.net.ExperimentalUrlRequest; |
| +import org.chromium.net.UploadDataProvider; |
| +import org.chromium.net.UrlRequest; |
| + |
| +import java.lang.annotation.Retention; |
| +import java.lang.annotation.RetentionPolicy; |
| +import java.util.concurrent.Executor; |
| + |
| +/** |
| + * Base class for classes that implement {@link UrlRequest} including experimental |
| + * features. {@link CronetUrlRequest} and {@link JavaUrlRequest} extends this class. |
| + */ |
| +public abstract class UrlRequestBase extends ExperimentalUrlRequest { |
| + /** |
| + * Sets the HTTP method verb to use for this request. Must be done before |
| + * request has started. |
| + * |
| + * <p>The default when this method is not called is "GET" if the request has |
| + * no body or "POST" if it does. |
| + * |
| + * @param method "GET", "HEAD", "DELETE", "POST" or "PUT". |
| + */ |
| + protected abstract void setHttpMethod(String method); |
| + |
| + /** |
| + * Adds a request header. Must be done before request has started. |
| + * |
| + * @param header header name. |
| + * @param value header value. |
| + */ |
| + protected abstract void addHeader(String header, String value); |
| + |
| + /** |
| + * Sets upload data provider. Must be done before request has started. May only be |
| + * invoked once per request. Switches method to "POST" if not explicitly |
| + * set. Starting the request will throw an exception if a Content-Type |
| + * header is not set. |
| + * |
| + * @param uploadDataProvider responsible for providing the upload data. |
| + * @param executor All {@code uploadDataProvider} methods will be invoked |
| + * using this {@code Executor}. May optionally be the same |
| + * {@code Executor} the request itself is using. |
| + */ |
| + protected abstract void setUploadDataProvider( |
| + UploadDataProvider uploadDataProvider, Executor executor); |
| + |
| + /** |
| + * Possible URL Request statuses. |
| + */ |
| + public static class StatusConverter { |
|
pauljensen
2016/10/03 15:22:38
why wrap in a class?
kapishnikov
2016/10/03 23:49:28
Good point. Done.
|
| + @IntDef({ |
| + INVALID, IDLE, WAITING_FOR_STALLED_SOCKET_POOL, WAITING_FOR_AVAILABLE_SOCKET, |
| + WAITING_FOR_DELEGATE, WAITING_FOR_CACHE, DOWNLOADING_PROXY_SCRIPT, |
| + RESOLVING_PROXY_FOR_URL, RESOLVING_HOST_IN_PROXY_SCRIPT, ESTABLISHING_PROXY_TUNNEL, |
| + RESOLVING_HOST, CONNECTING, SSL_HANDSHAKE, SENDING_REQUEST, WAITING_FOR_RESPONSE, |
| + READING_RESPONSE, |
| + }) |
| + @Retention(RetentionPolicy.SOURCE) |
| + public @interface StatusValues {} |
| + |
| + /** |
| + * Convert a LoadState int to one of values listed above. |
| + * @param loadState a LoadState to convert. |
| + * @return static int Status. |
| + */ |
| + @StatusValues |
| + public static int convertLoadState(int loadState) { |
| + assert loadState >= LoadState.IDLE && loadState <= LoadState.READING_RESPONSE; |
| + switch (loadState) { |
| + case (LoadState.IDLE): |
| + return IDLE; |
| + |
| + case (LoadState.WAITING_FOR_STALLED_SOCKET_POOL): |
| + return WAITING_FOR_STALLED_SOCKET_POOL; |
| + |
| + case (LoadState.WAITING_FOR_AVAILABLE_SOCKET): |
| + return WAITING_FOR_AVAILABLE_SOCKET; |
| + |
| + case (LoadState.WAITING_FOR_DELEGATE): |
| + return WAITING_FOR_DELEGATE; |
| + |
| + case (LoadState.WAITING_FOR_CACHE): |
| + return WAITING_FOR_CACHE; |
| + |
| + case (LoadState.DOWNLOADING_PROXY_SCRIPT): |
| + return DOWNLOADING_PROXY_SCRIPT; |
| + |
| + case (LoadState.RESOLVING_PROXY_FOR_URL): |
| + return RESOLVING_PROXY_FOR_URL; |
| + |
| + case (LoadState.RESOLVING_HOST_IN_PROXY_SCRIPT): |
| + return RESOLVING_HOST_IN_PROXY_SCRIPT; |
| + |
| + case (LoadState.ESTABLISHING_PROXY_TUNNEL): |
| + return ESTABLISHING_PROXY_TUNNEL; |
| + |
| + case (LoadState.RESOLVING_HOST): |
| + return RESOLVING_HOST; |
| + |
| + case (LoadState.CONNECTING): |
| + return CONNECTING; |
| + |
| + case (LoadState.SSL_HANDSHAKE): |
| + return SSL_HANDSHAKE; |
| + |
| + case (LoadState.SENDING_REQUEST): |
| + return SENDING_REQUEST; |
| + |
| + case (LoadState.WAITING_FOR_RESPONSE): |
| + return WAITING_FOR_RESPONSE; |
| + |
| + case (LoadState.READING_RESPONSE): |
| + return READING_RESPONSE; |
| + |
| + default: |
| + // A load state is retrieved but there is no corresponding |
| + // request status. This most likely means that the mapping is |
| + // incorrect. |
| + throw new IllegalArgumentException("No request status found."); |
| + } |
| + } |
| + } |
| +} |