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