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

Side by Side Diff: components/cronet/android/java/src/org/chromium/net/UrlResponseInfo.java

Issue 1359343005: Update ResponseInfo to UrlResponseInfo with API review comments. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Accumulate Received Bytes Count on redirects. Created 5 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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
5 package org.chromium.net;
6
7 import java.util.ArrayList;
8 import java.util.Collections;
9 import java.util.List;
10 import java.util.Locale;
11 import java.util.Map;
12 import java.util.TreeMap;
13 import java.util.concurrent.atomic.AtomicLong;
14
15 /**
16 * Contains basic information about a response. Included in {@link UrlRequestLis tener} callbacks.
17 * Each {@link UrlRequestListener#onReceivedRedirect UrlRequestListener.onReceiv edRedirect()}
18 * callback gets a different copy of UrlResponseInfo describing a particular red irect response.
19 */
20 public final class UrlResponseInfo {
21 private final List<String> mResponseInfoUrlChain;
22 private final int mHttpStatusCode;
23 private final String mHttpStatusText;
24 private final boolean mWasCached;
25 private final String mNegotiatedProtocol;
26 private final String mProxyServer;
27 private final List<Map.Entry<String, String>> mAllHeadersList;
28 private Map<String, List<String>> mResponseHeaders;
29 private final AtomicLong mReceivedBytesCount = new AtomicLong();
30
31 UrlResponseInfo(List<String> urlChain, int httpStatusCode, String httpStatus Text,
32 List<Map.Entry<String, String>> allHeadersList, boolean wasCached,
33 String negotiatedProtocol, String proxyServer) {
34 mResponseInfoUrlChain = Collections.unmodifiableList(urlChain);
35 mHttpStatusCode = httpStatusCode;
36 mHttpStatusText = httpStatusText;
37 mAllHeadersList = Collections.unmodifiableList(allHeadersList);
38 mWasCached = wasCached;
39 mNegotiatedProtocol = negotiatedProtocol;
40 mProxyServer = proxyServer;
41 }
42
43 /**
44 * Returns the URL the response is for. This is the URL after following
45 * redirects, so it may not be the originally requested URL.
46 * @return the URL the response is for.
47 */
48 public String getUrl() {
49 return mResponseInfoUrlChain.get(mResponseInfoUrlChain.size() - 1);
50 }
51
52 /**
53 * Returns the URL chain. The first entry is the origianlly requested URL;
54 * the following entries are redirects followed.
55 * @return the URL chain.
56 */
57 public List<String> getUrlChain() {
58 return mResponseInfoUrlChain;
59 }
60
61 /**
62 * Returns the HTTP status code. When a resource is retrieved from the cache ,
63 * whether it was revalidated or not, the original status code is returned.
64 * @return the HTTP status code.
65 */
66 public int getHttpStatusCode() {
67 return mHttpStatusCode;
68 }
69
70 /**
71 * Returns the HTTP status text of the status line. For example, if the
72 * request has a "HTTP/1.1 200 OK" response, this method returns "OK".
pauljensen 2015/10/08 14:31:46 has->received
mef 2015/10/08 17:51:30 Done.
73 * @return the HTTP status text of the status line.
74 */
75 public String getHttpStatusText() {
76 return mHttpStatusText;
77 }
78
79 /**
80 * Returns an unmodifiable list of response header field and value pairs.
81 * The headers are in the same order they are received over the wire.
82 * @return an unmodifiable list of response header field and value pairs.
83 */
84 public List<Map.Entry<String, String>> getAllHeadersAsList() {
85 return mAllHeadersList;
86 }
87
88 /**
89 * Returns an unmodifiable map of the response-header fields and values.
90 * Each list of values for a single header field is in the same order they
91 * were received over the wire.
92 * @return an unmodifiable map of the response-header fields and values.
93 */
94 public Map<String, List<String>> getAllHeaders() {
95 if (mResponseHeaders != null) {
96 return mResponseHeaders;
97 }
98 Map<String, List<String>> map =
99 new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER) ;
100 for (Map.Entry<String, String> entry : mAllHeadersList) {
101 List<String> values = new ArrayList<String>();
102 if (map.containsKey(entry.getKey())) {
103 values.addAll(map.get(entry.getKey()));
104 }
105 values.add(entry.getValue());
106 map.put(entry.getKey(), Collections.unmodifiableList(values));
107 }
108 mResponseHeaders = Collections.unmodifiableMap(map);
109 return mResponseHeaders;
110 }
111
112 /**
113 * Returns {@code true} if the response came from the cache, including
114 * requests that were revalidated over the network before being retrieved
115 * from the cache.
116 * @return {@code true} if the response came from the cache, {@code false}
117 * otherwise.
118 */
119 public boolean wasCached() {
120 return mWasCached;
121 }
122
123 /**
124 * Returns the protocol (e.g. "quic/1+spdy/3") negotiated with the server.
pauljensen 2015/10/08 14:31:46 The quote mark here is breaking javadoc summary li
mef 2015/10/08 17:51:30 It turns out that javadoc treats period followed b
125 * Returns an empty string if no protocol was negotiated, the protocol is
126 * not known, or when using plain HTTP or HTTPS.
127 * @return the protocol negotiated with the server.
128 */
129 // TODO(mef): Figure out what this returns in the cached case, both with
130 // and without a revalidation request.
131 public String getNegotiatedProtocol() {
132 return mNegotiatedProtocol;
133 }
134
135 /**
136 * Returns the proxy server that was used for the request.
137 * @return the proxy server that was used for the request.
138 */
139 public String getProxyServer() {
140 return mProxyServer;
141 }
142
143 /**
144 * Returns a minimum count of bytes received from the network to process thi s
145 * request. This count may ignore certain overheads (e.g. IP and TCP/UDP fra ming, SSL
146 * handshake and framing, proxy handling). This count is taken prior to gzip and SDCH
147 * decompression and includes headers and data from all redirects.
pauljensen 2015/10/08 14:31:46 "gzip and SDCH decompression"->"decompression (e.g
mef 2015/10/08 17:51:30 Done.
148 *
149 * This value may change (even for one {@code UrlResponseInfo} instance) as the request
pauljensen 2015/10/08 14:31:46 could maybe change the @code to @link, up to you
mef 2015/10/08 17:51:30 Done.
150 * progresses until completion, when {@link UrlRequestListener#onSuccess} or
151 * {@link UrlRequestListener#onFailure} is called.
152 */
153 public long getReceivedBytesCount() {
154 return mReceivedBytesCount.get();
155 }
156
157 @Override
158 public String toString() {
159 return String.format(Locale.ROOT, "UrlResponseInfo[%s]: urlChain = %s, "
160 + "httpStatus = %d %s, headers = %s, wasCached = %b, "
161 + "negotiatedProtocol = %s, proxyServer= %s, receivedByt esCount = %d",
162 getUrl(), getUrlChain().toString(), getHttpStatusCode(), getHttp StatusText(),
163 getAllHeadersAsList().toString(), wasCached(), getNegotiatedProt ocol(),
164 getProxyServer(), getReceivedBytesCount());
165 }
166
167 // Set ReceivedBytesCount up request completion or cancelation.
pauljensen 2015/10/08 14:31:46 I don't understand this comment. Perhaps reword:
mef 2015/10/08 17:51:30 Done.
168 void setReceivedBytesCount(long currentReceivedBytesCount) {
169 mReceivedBytesCount.set(currentReceivedBytesCount);
170 }
171 }
172 ;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698