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

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: Rebase to CronetEngine builders. 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. Sent on every call to the {@link
17 * UrlRequestListener}.
18 * Each call to {@link UrlRequestListener#onReceivedRedirect
19 * UrlRequestListener.onReceivedRedirect()}
20 * gets a different copy of UrlResponseInfo describing particular redirect respo nse.
xunjieli 2015/10/05 20:39:02 Suggest the following changes: "Sent on every ca
mef 2015/10/05 22:09:18 Done.
21 * The received bytes count is not valid until request has completion or cancela tion.
xunjieli 2015/10/05 20:39:02 Suggest moving this comment to mReceivedBytesCount
mef 2015/10/05 22:09:18 Done.
22 */
23 public final class UrlResponseInfo {
24 private final List<String> mResponseInfoUrlChain;
25 private final int mHttpStatusCode;
26 private final String mHttpStatusText;
27 private final boolean mWasCached;
28 private final String mNegotiatedProtocol;
29 private final String mProxyServer;
30 private final List<Map.Entry<String, String>> mAllHeadersList;
31 private Map<String, List<String>> mResponseHeaders;
32 private final AtomicLong mReceivedBytesCount = new AtomicLong();
33
34 UrlResponseInfo(List<String> urlChain, int httpStatusCode, String httpStatus Text,
35 List<Map.Entry<String, String>> allHeadersList, boolean wasCached,
36 String negotiatedProtocol, String proxyServer) {
37 mResponseInfoUrlChain = Collections.unmodifiableList(urlChain);
38 mHttpStatusCode = httpStatusCode;
39 mHttpStatusText = httpStatusText;
40 mAllHeadersList = Collections.unmodifiableList(allHeadersList);
41 mWasCached = wasCached;
42 mNegotiatedProtocol = negotiatedProtocol;
43 mProxyServer = proxyServer;
44 }
45
46 /**
47 * Returns the URL the response is for. This is the URL after following
48 * redirects, so it may not be the originally requested URL.
49 * @return the URL the response is for.
50 */
51 public String getUrl() {
52 return mResponseInfoUrlChain.get(mResponseInfoUrlChain.size() - 1);
53 }
54
55 /**
56 * Returns the URL chain. The first entry is the origianlly requested URL;
57 * the following entries are redirects followed.
58 * @return the URL chain.
59 */
60 public List<String> getUrlChain() {
61 return mResponseInfoUrlChain;
62 }
63
64 /**
65 * Returns the HTTP status code. When a resource is retrieved from the cache ,
66 * whether it was revalidated or not, the original status code is returned.
67 * @return the HTTP status code.
68 */
69 public int getHttpStatusCode() {
70 return mHttpStatusCode;
71 }
72
73 /**
74 * Returns the HTTP status text of the status line. For example, if the
75 * request has a "HTTP/1.1 200 OK" response, this method returns "OK".
76 * @return the HTTP status text of the status line.
77 */
78 public String getHttpStatusText() {
79 return mHttpStatusText;
80 }
81
82 /**
83 * Returns an unmodifiable list of response header field and value pairs.
84 * The headers are in the same order they are received over the wire.
85 * @return an unmodifiable list of response header field and value pairs.
86 */
87 public List<Map.Entry<String, String>> getAllHeadersAsList() {
88 return mAllHeadersList;
89 }
90
91 /**
92 * Returns an unmodifiable map of the response-header fields and values.
93 * Each list of values for a single header field is in the same order they
94 * were received over the wire.
95 * @return an unmodifiable map of the response-header fields and values.
96 */
97 public Map<String, List<String>> getAllHeaders() {
98 if (mResponseHeaders != null) {
99 return mResponseHeaders;
100 }
101 Map<String, List<String>> map =
102 new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER) ;
103 for (Map.Entry<String, String> entry : mAllHeadersList) {
104 List<String> values = new ArrayList<String>();
105 if (map.containsKey(entry.getKey())) {
106 values.addAll(map.get(entry.getKey()));
107 }
108 values.add(entry.getValue());
109 map.put(entry.getKey(), Collections.unmodifiableList(values));
110 }
111 mResponseHeaders = Collections.unmodifiableMap(map);
112 return mResponseHeaders;
113 }
114
115 /**
116 * Returns {@code true} if the response came from the cache, including
117 * requests that were revalidated over the network before being retrieved
118 * from the cache.
119 * @return {@code true} if the response came from the cache, {@code false}
120 * otherwise.
121 */
122 public boolean wasCached() {
123 return mWasCached;
124 }
125
126 /**
127 * Returns the protocol (e.g. "quic/1+spdy/3") negotiated with the server.
128 * Returns an empty string if no protocol was negotiated, the protocol is
129 * not known, or when using plain HTTP or HTTPS.
130 * @return the protocol negotiated with the server.
131 */
132 // TODO(mef): Figure out what this returns in the cached case, both with
133 // and without a revalidation request.
134 public String getNegotiatedProtocol() {
135 return mNegotiatedProtocol;
136 }
137
138 /**
139 * Returns the proxy server that was used for the request.
140 * @return the proxy server that was used for the request.
141 */
142 public String getProxyServer() {
143 return mProxyServer;
144 }
145
146 /**
147 * Returns a minimum count of bytes received from the network to process thi s
148 * request. This count may ignore certain overheads (e.g. IP and TCP/UDP fra ming, SSL
149 * handshake and framing, proxy handling). This count is taken prior to gzip and SDCH
150 * decompression.
151 * Available on request completion or cancelation.
xunjieli 2015/10/05 20:39:02 Maybe add a TODO here for implementating it for ca
mef 2015/10/05 22:09:18 Done.
152 */
153 public long getReceivedBytesCount() {
154 return mReceivedBytesCount.get();
155 }
156
157 public String toString() {
xunjieli 2015/10/05 20:39:02 add @Override
mef 2015/10/05 22:09:18 Done.
158 return String.format(Locale.ROOT, "UrlResponseInfo[%s]: urlChain = %s, "
159 + "httpStatus = %d %s, headers = %s, wasCached = %b, "
160 + "negotiatedProtocol = %s, proxyServer= %s, receivedByt esCount = %d",
161 getUrl(), getUrlChain().toString(), getHttpStatusCode(), getHttp StatusText(),
162 getAllHeadersAsList().toString(), wasCached(), getNegotiatedProt ocol(),
163 getProxyServer(), getReceivedBytesCount());
164 }
165
166 // Set ReceivedBytesCount up requirest completion or cancelation.
xunjieli 2015/10/05 20:39:02 nit: there is a typo in this comment.
mef 2015/10/05 22:09:18 Done.
167 void setReceivedBytesCount(long currentReceivedBytesCount) {
168 mReceivedBytesCount.set(currentReceivedBytesCount);
169 }
170 }
171 ;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698