1 // Copyright 2016 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 package org.chromium.net; 5 6 import java.util.Collections; 7 import java.util.Date; 8 import java.util.Set; 9 10 /** 11 * Defines methods that the actual implementation of {@link CronetEngine.Builder} has to implement. 12 * {@code CronetEngine.Builder} uses this interface to delegate the calls. For the documentation of 13 * individual methods, please see the identically named methods in {@link 14 * org.chromium.net.CronetEngine.Builder} and {@link 15 * org.chromium.net.ExperimentalCronetEngine.Builder}. 16 * 17 * <p>{@hide internal class} 18 */ 19 public abstract class ICronetEngineBuilder { 20 // The fields below list values which are known to getSupportedConfigOptions(). 21 // 22 // Given the fields are final the constant value associated with them is compiled into 23 // class using them. This makes it safe for all implementation to use the field in their code 24 // and not worry about version skew (new implementation aware of values the old API is not), 25 // as long as the values don't change meaning. This isn't true of enums and other dynamic 26 // structures, hence we resort to plain old good ints. 27 public static final int CONNECTION_MIGRATION_OPTIONS = 1; 28 public static final int DNS_OPTIONS = 2; 29 public static final int QUIC_OPTIONS = 3; 30 31 // Public API methods. addPublicKeyPins( String hostName, Set<byte[]> pinsSha256, boolean includeSubdomains, Date expirationDate)32 public abstract ICronetEngineBuilder addPublicKeyPins( 33 String hostName, 34 Set<byte[]> pinsSha256, 35 boolean includeSubdomains, 36 Date expirationDate); 37 addQuicHint(String host, int port, int alternatePort)38 public abstract ICronetEngineBuilder addQuicHint(String host, int port, int alternatePort); 39 enableHttp2(boolean value)40 public abstract ICronetEngineBuilder enableHttp2(boolean value); 41 enableHttpCache(int cacheMode, long maxSize)42 public abstract ICronetEngineBuilder enableHttpCache(int cacheMode, long maxSize); 43 enablePublicKeyPinningBypassForLocalTrustAnchors( boolean value)44 public abstract ICronetEngineBuilder enablePublicKeyPinningBypassForLocalTrustAnchors( 45 boolean value); 46 enableQuic(boolean value)47 public abstract ICronetEngineBuilder enableQuic(boolean value); 48 enableSdch(boolean value)49 public abstract ICronetEngineBuilder enableSdch(boolean value); 50 enableBrotli(boolean value)51 public ICronetEngineBuilder enableBrotli(boolean value) { 52 // Do nothing for older implementations. 53 return this; 54 } 55 setQuicOptions(QuicOptions quicOptions)56 public ICronetEngineBuilder setQuicOptions(QuicOptions quicOptions) { 57 return this; 58 } 59 setDnsOptions(DnsOptions dnsOptions)60 public ICronetEngineBuilder setDnsOptions(DnsOptions dnsOptions) { 61 return this; 62 } 63 setConnectionMigrationOptions( ConnectionMigrationOptions connectionMigrationOptions)64 public ICronetEngineBuilder setConnectionMigrationOptions( 65 ConnectionMigrationOptions connectionMigrationOptions) { 66 return this; 67 } 68 setExperimentalOptions(String options)69 public abstract ICronetEngineBuilder setExperimentalOptions(String options); 70 setLibraryLoader( CronetEngine.Builder.LibraryLoader loader)71 public abstract ICronetEngineBuilder setLibraryLoader( 72 CronetEngine.Builder.LibraryLoader loader); 73 setStoragePath(String value)74 public abstract ICronetEngineBuilder setStoragePath(String value); 75 setUserAgent(String userAgent)76 public abstract ICronetEngineBuilder setUserAgent(String userAgent); 77 getDefaultUserAgent()78 public abstract String getDefaultUserAgent(); 79 build()80 public abstract ExperimentalCronetEngine build(); 81 82 /** 83 * Returns the set of configuration options the builder is able to support natively. This is 84 * used internally to emulate newly added functionality using older APIs where possible. 85 * 86 * <p>The default implementation returns an empty set. Subclasses should override this method to 87 * reflect the supported options that are applicable to them. 88 */ getSupportedConfigOptions()89 protected Set<Integer> getSupportedConfigOptions() { 90 return Collections.emptySet(); 91 } 92 93 // Experimental API methods. 94 // 95 // Note: all experimental API methods should have default implementation. This will allow 96 // removing the experimental methods from the implementation layer without breaking 97 // the client. 98 enableNetworkQualityEstimator(boolean value)99 public ICronetEngineBuilder enableNetworkQualityEstimator(boolean value) { 100 return this; 101 } 102 setThreadPriority(int priority)103 public ICronetEngineBuilder setThreadPriority(int priority) { 104 return this; 105 } 106 } 107