| Index: components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java
|
| index c6e6c2cb4a8151fe21c3245cc569425c62e25437..835bb28681591c837db0690fc39475741a1d708a 100644
|
| --- a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java
|
| +++ b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java
|
| @@ -13,9 +13,9 @@ import org.chromium.base.JNINamespace;
|
| import java.nio.ByteBuffer;
|
| import java.util.ArrayList;
|
| import java.util.Collections;
|
| -import java.util.HashMap;
|
| import java.util.List;
|
| import java.util.Map;
|
| +import java.util.TreeMap;
|
| import java.util.concurrent.Executor;
|
|
|
| /**
|
| @@ -117,6 +117,8 @@ final class CronetUrlRequest implements UrlRequest {
|
| private final HeadersList mAllHeaders = new HeadersList();
|
| private final boolean mWasCached;
|
| private final String mNegotiatedProtocol;
|
| + private Map<String, List<String>> mResponseHeaders;
|
| + private List<Pair<String, String>> mUnmodifiableAllHeaders;
|
|
|
| NativeResponseInfo(String[] urlChain, int httpStatusCode,
|
| String httpStatusText, boolean wasCached,
|
| @@ -150,22 +152,30 @@ final class CronetUrlRequest implements UrlRequest {
|
|
|
| @Override
|
| public List<Pair<String, String>> getAllHeadersAsList() {
|
| - return Collections.unmodifiableList(mAllHeaders);
|
| + if (mUnmodifiableAllHeaders == null) {
|
| + mUnmodifiableAllHeaders =
|
| + Collections.unmodifiableList(mAllHeaders);
|
| + }
|
| + return mUnmodifiableAllHeaders;
|
| }
|
|
|
| @Override
|
| public Map<String, List<String>> getAllHeaders() {
|
| - Map<String, List<String>> map = new HashMap<String, List<String>>();
|
| + if (mResponseHeaders != null) {
|
| + return mResponseHeaders;
|
| + }
|
| + Map<String, List<String>> map = new TreeMap<String, List<String>>(
|
| + String.CASE_INSENSITIVE_ORDER);
|
| for (Pair<String, String> entry : mAllHeaders) {
|
| + List<String> values = new ArrayList<String>();
|
| if (map.containsKey(entry.first)) {
|
| - map.get(entry.first).add(entry.second);
|
| - } else {
|
| - List<String> values = new ArrayList<String>();
|
| - values.add(entry.second);
|
| - map.put(entry.first, values);
|
| + values.addAll(map.get(entry.first));
|
| }
|
| + values.add(entry.second);
|
| + map.put(entry.first, Collections.unmodifiableList(values));
|
| }
|
| - return Collections.unmodifiableMap(map);
|
| + mResponseHeaders = Collections.unmodifiableMap(map);
|
| + return mResponseHeaders;
|
| }
|
|
|
| @Override
|
|
|