• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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