OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 package org.chromium.net.impl; |
| 5 |
| 6 import android.support.annotation.IntDef; |
| 7 |
| 8 import static org.chromium.net.UrlRequest.Status.CONNECTING; |
| 9 import static org.chromium.net.UrlRequest.Status.DOWNLOADING_PROXY_SCRIPT; |
| 10 import static org.chromium.net.UrlRequest.Status.ESTABLISHING_PROXY_TUNNEL; |
| 11 import static org.chromium.net.UrlRequest.Status.IDLE; |
| 12 import static org.chromium.net.UrlRequest.Status.INVALID; |
| 13 import static org.chromium.net.UrlRequest.Status.READING_RESPONSE; |
| 14 import static org.chromium.net.UrlRequest.Status.RESOLVING_HOST; |
| 15 import static org.chromium.net.UrlRequest.Status.RESOLVING_HOST_IN_PROXY_SCRIPT; |
| 16 import static org.chromium.net.UrlRequest.Status.RESOLVING_PROXY_FOR_URL; |
| 17 import static org.chromium.net.UrlRequest.Status.SENDING_REQUEST; |
| 18 import static org.chromium.net.UrlRequest.Status.SSL_HANDSHAKE; |
| 19 import static org.chromium.net.UrlRequest.Status.WAITING_FOR_AVAILABLE_SOCKET; |
| 20 import static org.chromium.net.UrlRequest.Status.WAITING_FOR_CACHE; |
| 21 import static org.chromium.net.UrlRequest.Status.WAITING_FOR_DELEGATE; |
| 22 import static org.chromium.net.UrlRequest.Status.WAITING_FOR_RESPONSE; |
| 23 import static org.chromium.net.UrlRequest.Status.WAITING_FOR_STALLED_SOCKET_POOL
; |
| 24 |
| 25 import org.chromium.net.ExperimentalUrlRequest; |
| 26 import org.chromium.net.UploadDataProvider; |
| 27 import org.chromium.net.UrlRequest; |
| 28 |
| 29 import java.lang.annotation.Retention; |
| 30 import java.lang.annotation.RetentionPolicy; |
| 31 import java.util.concurrent.Executor; |
| 32 |
| 33 /** |
| 34 * Base class for classes that implement {@link UrlRequest} including experiment
al |
| 35 * features. {@link CronetUrlRequest} and {@link JavaUrlRequest} extends this cl
ass. |
| 36 */ |
| 37 public abstract class UrlRequestBase extends ExperimentalUrlRequest { |
| 38 /** |
| 39 * Sets the HTTP method verb to use for this request. Must be done before |
| 40 * request has started. |
| 41 * |
| 42 * <p>The default when this method is not called is "GET" if the request has |
| 43 * no body or "POST" if it does. |
| 44 * |
| 45 * @param method "GET", "HEAD", "DELETE", "POST" or "PUT". |
| 46 */ |
| 47 protected abstract void setHttpMethod(String method); |
| 48 |
| 49 /** |
| 50 * Adds a request header. Must be done before request has started. |
| 51 * |
| 52 * @param header header name. |
| 53 * @param value header value. |
| 54 */ |
| 55 protected abstract void addHeader(String header, String value); |
| 56 |
| 57 /** |
| 58 * Sets upload data provider. Must be done before request has started. May o
nly be |
| 59 * invoked once per request. Switches method to "POST" if not explicitly |
| 60 * set. Starting the request will throw an exception if a Content-Type |
| 61 * header is not set. |
| 62 * |
| 63 * @param uploadDataProvider responsible for providing the upload data. |
| 64 * @param executor All {@code uploadDataProvider} methods will be invoked |
| 65 * using this {@code Executor}. May optionally be the same |
| 66 * {@code Executor} the request itself is using. |
| 67 */ |
| 68 protected abstract void setUploadDataProvider( |
| 69 UploadDataProvider uploadDataProvider, Executor executor); |
| 70 |
| 71 /** |
| 72 * Possible URL Request statuses. |
| 73 */ |
| 74 public static class StatusConverter { |
| 75 @IntDef({ |
| 76 INVALID, IDLE, WAITING_FOR_STALLED_SOCKET_POOL, WAITING_FOR_AVAI
LABLE_SOCKET, |
| 77 WAITING_FOR_DELEGATE, WAITING_FOR_CACHE, DOWNLOADING_PROXY_SCRIP
T, |
| 78 RESOLVING_PROXY_FOR_URL, RESOLVING_HOST_IN_PROXY_SCRIPT, ESTABLI
SHING_PROXY_TUNNEL, |
| 79 RESOLVING_HOST, CONNECTING, SSL_HANDSHAKE, SENDING_REQUEST, WAIT
ING_FOR_RESPONSE, |
| 80 READING_RESPONSE, |
| 81 }) |
| 82 @Retention(RetentionPolicy.SOURCE) |
| 83 public @interface StatusValues {} |
| 84 |
| 85 /** |
| 86 * Convert a LoadState int to one of values listed above. |
| 87 * @param loadState a LoadState to convert. |
| 88 * @return static int Status. |
| 89 */ |
| 90 @StatusValues |
| 91 public static int convertLoadState(int loadState) { |
| 92 assert loadState >= LoadState.IDLE && loadState <= LoadState.READING
_RESPONSE; |
| 93 switch (loadState) { |
| 94 case (LoadState.IDLE): |
| 95 return IDLE; |
| 96 |
| 97 case (LoadState.WAITING_FOR_STALLED_SOCKET_POOL): |
| 98 return WAITING_FOR_STALLED_SOCKET_POOL; |
| 99 |
| 100 case (LoadState.WAITING_FOR_AVAILABLE_SOCKET): |
| 101 return WAITING_FOR_AVAILABLE_SOCKET; |
| 102 |
| 103 case (LoadState.WAITING_FOR_DELEGATE): |
| 104 return WAITING_FOR_DELEGATE; |
| 105 |
| 106 case (LoadState.WAITING_FOR_CACHE): |
| 107 return WAITING_FOR_CACHE; |
| 108 |
| 109 case (LoadState.DOWNLOADING_PROXY_SCRIPT): |
| 110 return DOWNLOADING_PROXY_SCRIPT; |
| 111 |
| 112 case (LoadState.RESOLVING_PROXY_FOR_URL): |
| 113 return RESOLVING_PROXY_FOR_URL; |
| 114 |
| 115 case (LoadState.RESOLVING_HOST_IN_PROXY_SCRIPT): |
| 116 return RESOLVING_HOST_IN_PROXY_SCRIPT; |
| 117 |
| 118 case (LoadState.ESTABLISHING_PROXY_TUNNEL): |
| 119 return ESTABLISHING_PROXY_TUNNEL; |
| 120 |
| 121 case (LoadState.RESOLVING_HOST): |
| 122 return RESOLVING_HOST; |
| 123 |
| 124 case (LoadState.CONNECTING): |
| 125 return CONNECTING; |
| 126 |
| 127 case (LoadState.SSL_HANDSHAKE): |
| 128 return SSL_HANDSHAKE; |
| 129 |
| 130 case (LoadState.SENDING_REQUEST): |
| 131 return SENDING_REQUEST; |
| 132 |
| 133 case (LoadState.WAITING_FOR_RESPONSE): |
| 134 return WAITING_FOR_RESPONSE; |
| 135 |
| 136 case (LoadState.READING_RESPONSE): |
| 137 return READING_RESPONSE; |
| 138 |
| 139 default: |
| 140 // A load state is retrieved but there is no corresponding |
| 141 // request status. This most likely means that the mapping i
s |
| 142 // incorrect. |
| 143 throw new IllegalArgumentException("No request status found.
"); |
| 144 } |
| 145 } |
| 146 } |
| 147 } |
OLD | NEW |