• 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 android.net.http.HttpEngine;
11 
12 import androidx.annotation.RequiresExtension;
13 
14 import org.chromium.base.Log;
15 import org.chromium.net.CronetEngine;
16 import org.chromium.net.ExperimentalCronetEngine;
17 import org.chromium.net.ICronetEngineBuilder;
18 
19 import java.util.Date;
20 import java.util.Set;
21 
22 @RequiresExtension(extension = EXT_API_LEVEL, version = EXT_VERSION)
23 class AndroidHttpEngineBuilderWrapper extends ICronetEngineBuilder {
24     private static final String TAG = "HttpEngBuilderWrap";
25 
26     private final HttpEngine.Builder mBackend;
27 
AndroidHttpEngineBuilderWrapper(HttpEngine.Builder backend)28     public AndroidHttpEngineBuilderWrapper(HttpEngine.Builder backend) {
29         this.mBackend = backend;
30     }
31 
32     @Override
getDefaultUserAgent()33     public String getDefaultUserAgent() {
34         return mBackend.getDefaultUserAgent();
35     }
36 
37     @Override
setUserAgent(String userAgent)38     public ICronetEngineBuilder setUserAgent(String userAgent) {
39         mBackend.setUserAgent(userAgent);
40         return this;
41     }
42 
43     @Override
setStoragePath(String value)44     public ICronetEngineBuilder setStoragePath(String value) {
45         mBackend.setStoragePath(value);
46         return this;
47     }
48 
49     @Override
setLibraryLoader(CronetEngine.Builder.LibraryLoader loader)50     public ICronetEngineBuilder setLibraryLoader(CronetEngine.Builder.LibraryLoader loader) {
51         Log.w(
52                 TAG,
53                 "Custom library loader isn't supported when using the platform Cronet provider."
54                         + " Ignoring...");
55         return this;
56     }
57 
58     @Override
enableQuic(boolean value)59     public ICronetEngineBuilder enableQuic(boolean value) {
60         mBackend.setEnableQuic(value);
61         return this;
62     }
63 
64     @Override
enableSdch(boolean value)65     public ICronetEngineBuilder enableSdch(boolean value) {
66         // Deprecated and unused by upper layers, do nothing.
67         return this;
68     }
69 
70     @Override
enableHttp2(boolean value)71     public ICronetEngineBuilder enableHttp2(boolean value) {
72         mBackend.setEnableHttp2(value);
73         return this;
74     }
75 
76     @Override
enableBrotli(boolean value)77     public ICronetEngineBuilder enableBrotli(boolean value) {
78         mBackend.setEnableBrotli(value);
79         return this;
80     }
81 
82     @Override
setExperimentalOptions(String options)83     public ICronetEngineBuilder setExperimentalOptions(String options) {
84         // TODO(danstahr): Hidden API. This should ideally extract values we know how to handle as a
85         // main API
86         return this;
87     }
88 
89     @Override
enableHttpCache(int cacheMode, long maxSize)90     public ICronetEngineBuilder enableHttpCache(int cacheMode, long maxSize) {
91         mBackend.setEnableHttpCache(cacheMode, maxSize);
92         return this;
93     }
94 
95     @Override
addQuicHint(String host, int port, int alternatePort)96     public ICronetEngineBuilder addQuicHint(String host, int port, int alternatePort) {
97         mBackend.addQuicHint(host, port, alternatePort);
98         return this;
99     }
100 
101     @Override
addPublicKeyPins( String hostName, Set<byte[]> pinsSha256, boolean includeSubdomains, Date expirationDate)102     public ICronetEngineBuilder addPublicKeyPins(
103             String hostName,
104             Set<byte[]> pinsSha256,
105             boolean includeSubdomains,
106             Date expirationDate) {
107         mBackend.addPublicKeyPins(
108                 hostName, pinsSha256, includeSubdomains, expirationDate.toInstant());
109         return this;
110     }
111 
112     @Override
enablePublicKeyPinningBypassForLocalTrustAnchors(boolean value)113     public ICronetEngineBuilder enablePublicKeyPinningBypassForLocalTrustAnchors(boolean value) {
114         mBackend.setEnablePublicKeyPinningBypassForLocalTrustAnchors(value);
115         return this;
116     }
117 
118     /**
119      * Build a {@link CronetEngine} using this builder's configuration.
120      *
121      * @return constructed {@link CronetEngine}.
122      */
123     @Override
build()124     public ExperimentalCronetEngine build() {
125         return new AndroidHttpEngineWrapper(mBackend.build());
126     }
127 }
128