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..a13eeb479c44d299a11506dc6369234344d877e0 |
--- /dev/null |
+++ b/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java |
@@ -0,0 +1,145 @@ |
+// 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. |
+ */ |
+ @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."); |
+ } |
+ } |
+} |