1 // Copyright 2023 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 5 package org.chromium.net.impl; 6 7 import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_API_LEVEL; 8 import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_VERSION; 9 10 import androidx.annotation.RequiresExtension; 11 12 import java.util.List; 13 import java.util.Map; 14 15 @RequiresExtension(extension = EXT_API_LEVEL, version = EXT_VERSION) 16 class AndroidUrlResponseInfoWrapper extends org.chromium.net.UrlResponseInfo { 17 private final android.net.http.UrlResponseInfo mBackend; 18 /* org.chromium.net.UrlRequest and org.chromium.net.BidirectionalStream map the direct or 19 * no-proxy scenarios to different values of org.chromium.net.UrlResponseInfo#getProxyServer: 20 * UrlRequest will return ":0", while BidirectionalStream will return a null string. 21 * This variable is needed to maintain compatibility with this non-documented behavior, as 22 * android.net.http.UrlResponseInfo doesn't expose a getProxyServer method. 23 * TODO(b/309121551): Clean this up. 24 */ 25 private final String mProxyServerCompat; 26 AndroidUrlResponseInfoWrapper( android.net.http.UrlResponseInfo backend, String proxyServerCompat)27 private AndroidUrlResponseInfoWrapper( 28 android.net.http.UrlResponseInfo backend, String proxyServerCompat) { 29 this.mBackend = backend; 30 this.mProxyServerCompat = proxyServerCompat; 31 } 32 33 // See mProxyServerCompat's Javadoc. createForUrlRequest( android.net.http.UrlResponseInfo backend)34 public static AndroidUrlResponseInfoWrapper createForUrlRequest( 35 android.net.http.UrlResponseInfo backend) { 36 // From //components/cronet/cronet_url_request.cc's GetProxy. 37 return new AndroidUrlResponseInfoWrapper(backend, ":0"); 38 } 39 40 // See mProxyServerCompat's Javadoc. createForBidirectionalStream( android.net.http.UrlResponseInfo backend)41 public static AndroidUrlResponseInfoWrapper createForBidirectionalStream( 42 android.net.http.UrlResponseInfo backend) { 43 // From 44 // //components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java 45 // prepareResponseInfoOnNetworkThread. 46 return new AndroidUrlResponseInfoWrapper(backend, null); 47 } 48 49 @Override getUrl()50 public String getUrl() { 51 return mBackend.getUrl(); 52 } 53 54 @Override getUrlChain()55 public List<String> getUrlChain() { 56 return mBackend.getUrlChain(); 57 } 58 59 @Override getHttpStatusCode()60 public int getHttpStatusCode() { 61 return mBackend.getHttpStatusCode(); 62 } 63 64 @Override getHttpStatusText()65 public String getHttpStatusText() { 66 return mBackend.getHttpStatusText(); 67 } 68 69 @Override getAllHeadersAsList()70 public List<Map.Entry<String, String>> getAllHeadersAsList() { 71 return mBackend.getHeaders().getAsList(); 72 } 73 74 @Override getAllHeaders()75 public Map<String, List<String>> getAllHeaders() { 76 return mBackend.getHeaders().getAsMap(); 77 } 78 79 @Override wasCached()80 public boolean wasCached() { 81 return mBackend.wasCached(); 82 } 83 84 @Override getNegotiatedProtocol()85 public String getNegotiatedProtocol() { 86 return mBackend.getNegotiatedProtocol(); 87 } 88 89 @Override getProxyServer()90 public String getProxyServer() { 91 return mProxyServerCompat; 92 } 93 94 @Override getReceivedByteCount()95 public long getReceivedByteCount() { 96 return mBackend.getReceivedByteCount(); 97 } 98 } 99