• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors
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 androidx.annotation.IntDef;
7 
8 import android.net.http.ExperimentalUrlRequest;
9 import android.net.http.UploadDataProvider;
10 import android.net.http.UrlRequest;
11 
12 import java.lang.annotation.Retention;
13 import java.lang.annotation.RetentionPolicy;
14 import java.util.concurrent.Executor;
15 
16 /**
17  * Base class for classes that implement {@link UrlRequest} including experimental
18  * features.
19  */
20 public abstract class UrlRequestBase extends ExperimentalUrlRequest {
21     /**
22      * Sets the HTTP method verb to use for this request. Must be done before
23      * request has started.
24      *
25      * <p>The default when this method is not called is "GET" if the request has
26      * no body or "POST" if it does.
27      *
28      * @param method "GET", "HEAD", "DELETE", "POST" or "PUT".
29      */
setHttpMethod(String method)30     protected abstract void setHttpMethod(String method);
31 
32     /**
33      * Sets upload data provider. Must be done before request has started. May only be
34      * invoked once per request. Switches method to "POST" if not explicitly
35      * set. Starting the request will throw an exception if a Content-Type
36      * header is not set.
37      *
38      * @param uploadDataProvider responsible for providing the upload data.
39      * @param executor All {@code uploadDataProvider} methods will be invoked
40      *     using this {@code Executor}. May optionally be the same
41      *     {@code Executor} the request itself is using.
42      */
setUploadDataProvider( UploadDataProvider uploadDataProvider, Executor executor)43     protected abstract void setUploadDataProvider(
44             UploadDataProvider uploadDataProvider, Executor executor);
45 
46     /**
47      * Possible URL Request statuses.
48      */
49     @IntDef({Status.INVALID, Status.IDLE, Status.WAITING_FOR_STALLED_SOCKET_POOL,
50             Status.WAITING_FOR_AVAILABLE_SOCKET, Status.WAITING_FOR_DELEGATE,
51             Status.WAITING_FOR_CACHE, Status.DOWNLOADING_PAC_FILE, Status.RESOLVING_PROXY_FOR_URL,
52             Status.RESOLVING_HOST_IN_PAC_FILE, Status.ESTABLISHING_PROXY_TUNNEL,
53             Status.RESOLVING_HOST, Status.CONNECTING, Status.SSL_HANDSHAKE, Status.SENDING_REQUEST,
54             Status.WAITING_FOR_RESPONSE, Status.READING_RESPONSE})
55     @Retention(RetentionPolicy.SOURCE)
56     public @interface StatusValues {}
57 
58     /**
59      * Convert a LoadState int to one of values listed above.
60      * @param loadState a LoadState to convert.
61      * @return static int Status.
62      */
63     @StatusValues
convertLoadState(int loadState)64     public static int convertLoadState(int loadState) {
65         assert loadState >= LoadState.IDLE && loadState <= LoadState.READING_RESPONSE;
66         switch (loadState) {
67             case (LoadState.IDLE):
68                 return Status.IDLE;
69 
70             case (LoadState.WAITING_FOR_STALLED_SOCKET_POOL):
71                 return Status.WAITING_FOR_STALLED_SOCKET_POOL;
72 
73             case (LoadState.WAITING_FOR_AVAILABLE_SOCKET):
74                 return Status.WAITING_FOR_AVAILABLE_SOCKET;
75 
76             case (LoadState.WAITING_FOR_DELEGATE):
77                 return Status.WAITING_FOR_DELEGATE;
78 
79             case (LoadState.WAITING_FOR_CACHE):
80                 return Status.WAITING_FOR_CACHE;
81 
82             case (LoadState.DOWNLOADING_PAC_FILE):
83                 return Status.DOWNLOADING_PAC_FILE;
84 
85             case (LoadState.RESOLVING_PROXY_FOR_URL):
86                 return Status.RESOLVING_PROXY_FOR_URL;
87 
88             case (LoadState.RESOLVING_HOST_IN_PAC_FILE):
89                 return Status.RESOLVING_HOST_IN_PAC_FILE;
90 
91             case (LoadState.ESTABLISHING_PROXY_TUNNEL):
92                 return Status.ESTABLISHING_PROXY_TUNNEL;
93 
94             case (LoadState.RESOLVING_HOST):
95                 return Status.RESOLVING_HOST;
96 
97             case (LoadState.CONNECTING):
98                 return Status.CONNECTING;
99 
100             case (LoadState.SSL_HANDSHAKE):
101                 return Status.SSL_HANDSHAKE;
102 
103             case (LoadState.SENDING_REQUEST):
104                 return Status.SENDING_REQUEST;
105 
106             case (LoadState.WAITING_FOR_RESPONSE):
107                 return Status.WAITING_FOR_RESPONSE;
108 
109             case (LoadState.READING_RESPONSE):
110                 return Status.READING_RESPONSE;
111 
112             default:
113                 // A load state is retrieved but there is no corresponding
114                 // request status. This most likely means that the mapping is
115                 // incorrect.
116                 throw new IllegalArgumentException("No request status found.");
117         }
118     }
119 }
120