| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 package org.chromium.net.impl; | 4 package org.chromium.net.impl; |
| 5 | 5 |
| 6 import android.content.Context; | 6 import android.content.Context; |
| 7 import android.support.annotation.IntDef; | 7 import android.support.annotation.IntDef; |
| 8 import android.support.annotation.VisibleForTesting; | 8 import android.support.annotation.VisibleForTesting; |
| 9 import android.util.Log; | |
| 10 | 9 |
| 11 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISABLED; | 10 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISABLED; |
| 12 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISK; | 11 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISK; |
| 13 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP; | 12 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP; |
| 14 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; | 13 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; |
| 15 | 14 |
| 16 import org.chromium.net.CronetEngine; | 15 import org.chromium.net.CronetEngine; |
| 17 import org.chromium.net.ExperimentalCronetEngine; | |
| 18 import org.chromium.net.ICronetEngineBuilder; | 16 import org.chromium.net.ICronetEngineBuilder; |
| 19 | 17 |
| 20 import java.io.File; | 18 import java.io.File; |
| 21 import java.lang.annotation.Retention; | 19 import java.lang.annotation.Retention; |
| 22 import java.lang.annotation.RetentionPolicy; | 20 import java.lang.annotation.RetentionPolicy; |
| 23 import java.lang.reflect.Constructor; | |
| 24 import java.net.IDN; | 21 import java.net.IDN; |
| 25 import java.util.Date; | 22 import java.util.Date; |
| 26 import java.util.HashSet; | 23 import java.util.HashSet; |
| 27 import java.util.LinkedList; | 24 import java.util.LinkedList; |
| 28 import java.util.List; | 25 import java.util.List; |
| 29 import java.util.Set; | 26 import java.util.Set; |
| 30 import java.util.regex.Pattern; | 27 import java.util.regex.Pattern; |
| 31 | 28 |
| 32 /** | 29 /** |
| 33 * Implementation of {@link ICronetEngineBuilder}. | 30 * Implementation of {@link ICronetEngineBuilder}. |
| 34 */ | 31 */ |
| 35 public class CronetEngineBuilderImpl extends ICronetEngineBuilder { | 32 public abstract class CronetEngineBuilderImpl extends ICronetEngineBuilder { |
| 36 /** | 33 /** |
| 37 * A hint that a host supports QUIC. | 34 * A hint that a host supports QUIC. |
| 38 */ | 35 */ |
| 39 public static class QuicHint { | 36 public static class QuicHint { |
| 40 // The host. | 37 // The host. |
| 41 final String mHost; | 38 final String mHost; |
| 42 // Port of the server that supports QUIC. | 39 // Port of the server that supports QUIC. |
| 43 final int mPort; | 40 final int mPort; |
| 44 // Alternate protocol port. | 41 // Alternate protocol port. |
| 45 final int mAlternatePort; | 42 final int mAlternatePort; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 65 final Date mExpirationDate; | 62 final Date mExpirationDate; |
| 66 | 63 |
| 67 Pkp(String host, byte[][] hashes, boolean includeSubdomains, Date expira
tionDate) { | 64 Pkp(String host, byte[][] hashes, boolean includeSubdomains, Date expira
tionDate) { |
| 68 mHost = host; | 65 mHost = host; |
| 69 mHashes = hashes; | 66 mHashes = hashes; |
| 70 mIncludeSubdomains = includeSubdomains; | 67 mIncludeSubdomains = includeSubdomains; |
| 71 mExpirationDate = expirationDate; | 68 mExpirationDate = expirationDate; |
| 72 } | 69 } |
| 73 } | 70 } |
| 74 | 71 |
| 75 private static final String TAG = CronetEngineBuilderImpl.class.getSimpleNam
e(); | |
| 76 private static final String NATIVE_CRONET_IMPL_CLASS = | |
| 77 "org.chromium.net.impl.CronetUrlRequestContext"; | |
| 78 private static final String JAVA_CRONET_IMPL_CLASS = "org.chromium.net.impl.
JavaCronetEngine"; | |
| 79 private static final Pattern INVALID_PKP_HOST_NAME = Pattern.compile("^[0-9\
\.]*$"); | 72 private static final Pattern INVALID_PKP_HOST_NAME = Pattern.compile("^[0-9\
\.]*$"); |
| 80 | 73 |
| 81 // Private fields are simply storage of configuration for the resulting Cron
etEngine. | 74 // Private fields are simply storage of configuration for the resulting Cron
etEngine. |
| 82 // See setters below for verbose descriptions. | 75 // See setters below for verbose descriptions. |
| 83 private final Context mApplicationContext; | 76 private final Context mApplicationContext; |
| 84 private final List<QuicHint> mQuicHints = new LinkedList<>(); | 77 private final List<QuicHint> mQuicHints = new LinkedList<>(); |
| 85 private final List<Pkp> mPkps = new LinkedList<>(); | 78 private final List<Pkp> mPkps = new LinkedList<>(); |
| 86 private boolean mPublicKeyPinningBypassForLocalTrustAnchorsEnabled; | 79 private boolean mPublicKeyPinningBypassForLocalTrustAnchorsEnabled; |
| 87 private String mUserAgent; | 80 private String mUserAgent; |
| 88 private String mStoragePath; | 81 private String mStoragePath; |
| 89 private boolean mLegacyModeEnabled; | |
| 90 private VersionSafeCallbacks.LibraryLoader mLibraryLoader; | 82 private VersionSafeCallbacks.LibraryLoader mLibraryLoader; |
| 91 private boolean mQuicEnabled; | 83 private boolean mQuicEnabled; |
| 92 private boolean mHttp2Enabled; | 84 private boolean mHttp2Enabled; |
| 93 private boolean mSdchEnabled; | 85 private boolean mSdchEnabled; |
| 94 private String mDataReductionProxyKey; | 86 private String mDataReductionProxyKey; |
| 95 private String mDataReductionProxyPrimaryProxy; | 87 private String mDataReductionProxyPrimaryProxy; |
| 96 private String mDataReductionProxyFallbackProxy; | 88 private String mDataReductionProxyFallbackProxy; |
| 97 private String mDataReductionProxySecureProxyCheckUrl; | 89 private String mDataReductionProxySecureProxyCheckUrl; |
| 98 private boolean mDisableCache; | 90 private boolean mDisableCache; |
| 99 private int mHttpCacheMode; | 91 private int mHttpCacheMode; |
| 100 private long mHttpCacheMaxSize; | 92 private long mHttpCacheMaxSize; |
| 101 private String mExperimentalOptions; | 93 private String mExperimentalOptions; |
| 102 private long mMockCertVerifier; | 94 protected long mMockCertVerifier; |
| 103 private boolean mNetworkQualityEstimatorEnabled; | 95 private boolean mNetworkQualityEstimatorEnabled; |
| 104 private String mCertVerifierData; | 96 private String mCertVerifierData; |
| 105 | 97 |
| 106 /** | 98 /** |
| 107 * Default config enables SPDY, disables QUIC, SDCH and HTTP cache. | 99 * Default config enables SPDY, disables QUIC, SDCH and HTTP cache. |
| 108 * @param context Android {@link Context} for engine to use. | 100 * @param context Android {@link Context} for engine to use. |
| 109 */ | 101 */ |
| 110 public CronetEngineBuilderImpl(Context context) { | 102 public CronetEngineBuilderImpl(Context context) { |
| 111 mApplicationContext = context.getApplicationContext(); | 103 mApplicationContext = context.getApplicationContext(); |
| 112 enableLegacyMode(false); | |
| 113 enableQuic(false); | 104 enableQuic(false); |
| 114 enableHttp2(true); | 105 enableHttp2(true); |
| 115 enableSdch(false); | 106 enableSdch(false); |
| 116 enableHttpCache(HTTP_CACHE_DISABLED, 0); | 107 enableHttpCache(HTTP_CACHE_DISABLED, 0); |
| 117 enableNetworkQualityEstimator(false); | 108 enableNetworkQualityEstimator(false); |
| 118 enablePublicKeyPinningBypassForLocalTrustAnchors(true); | 109 enablePublicKeyPinningBypassForLocalTrustAnchors(true); |
| 119 } | 110 } |
| 120 | 111 |
| 121 @Override | 112 @Override |
| 122 public String getDefaultUserAgent() { | 113 public String getDefaultUserAgent() { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 140 } | 131 } |
| 141 mStoragePath = value; | 132 mStoragePath = value; |
| 142 return this; | 133 return this; |
| 143 } | 134 } |
| 144 | 135 |
| 145 String storagePath() { | 136 String storagePath() { |
| 146 return mStoragePath; | 137 return mStoragePath; |
| 147 } | 138 } |
| 148 | 139 |
| 149 @Override | 140 @Override |
| 150 public CronetEngineBuilderImpl enableLegacyMode(boolean value) { | |
| 151 mLegacyModeEnabled = value; | |
| 152 return this; | |
| 153 } | |
| 154 | |
| 155 private boolean legacyMode() { | |
| 156 return mLegacyModeEnabled; | |
| 157 } | |
| 158 | |
| 159 @Override | |
| 160 public CronetEngineBuilderImpl setLibraryLoader(CronetEngine.Builder.Library
Loader loader) { | 141 public CronetEngineBuilderImpl setLibraryLoader(CronetEngine.Builder.Library
Loader loader) { |
| 161 mLibraryLoader = new VersionSafeCallbacks.LibraryLoader(loader); | 142 mLibraryLoader = new VersionSafeCallbacks.LibraryLoader(loader); |
| 162 return this; | 143 return this; |
| 163 } | 144 } |
| 164 | 145 |
| 165 VersionSafeCallbacks.LibraryLoader libraryLoader() { | 146 VersionSafeCallbacks.LibraryLoader libraryLoader() { |
| 166 return mLibraryLoader; | 147 return mLibraryLoader; |
| 167 } | 148 } |
| 168 | 149 |
| 169 @Override | 150 @Override |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 } | 415 } |
| 435 | 416 |
| 436 /** | 417 /** |
| 437 * Returns {@link Context} for builder. | 418 * Returns {@link Context} for builder. |
| 438 * | 419 * |
| 439 * @return {@link Context} for builder. | 420 * @return {@link Context} for builder. |
| 440 */ | 421 */ |
| 441 Context getContext() { | 422 Context getContext() { |
| 442 return mApplicationContext; | 423 return mApplicationContext; |
| 443 } | 424 } |
| 444 | |
| 445 @Override | |
| 446 public ExperimentalCronetEngine build() { | |
| 447 final ClassLoader loader = getClass().getClassLoader(); | |
| 448 if (getUserAgent() == null) { | |
| 449 setUserAgent(getDefaultUserAgent()); | |
| 450 } | |
| 451 | |
| 452 ExperimentalCronetEngine cronetEngine = null; | |
| 453 if (!legacyMode()) { | |
| 454 cronetEngine = createNativeCronetEngine(loader); | |
| 455 } | |
| 456 if (cronetEngine == null) { | |
| 457 cronetEngine = createJavaCronetEngine(loader); | |
| 458 } | |
| 459 | |
| 460 if (cronetEngine == null) { | |
| 461 Log.i(TAG, | |
| 462 "Class loader " + loader + " couldn't find any Cronet engine
implementation."); | |
| 463 } else { | |
| 464 Log.i(TAG, loader.toString() + " found Cronet engine implementation
" | |
| 465 + cronetEngine.getClass() + ". Network stack version
" | |
| 466 + cronetEngine.getVersionString()); | |
| 467 // Clear MOCK_CERT_VERIFIER reference if there is any, since | |
| 468 // the ownership has been transferred to the engine. | |
| 469 mMockCertVerifier = 0; | |
| 470 } | |
| 471 return cronetEngine; | |
| 472 } | |
| 473 | |
| 474 private ExperimentalCronetEngine createNativeCronetEngine(ClassLoader loader
) { | |
| 475 return createCronetEngine(loader, NATIVE_CRONET_IMPL_CLASS, this); | |
| 476 } | |
| 477 | |
| 478 private ExperimentalCronetEngine createJavaCronetEngine(ClassLoader loader)
{ | |
| 479 return createCronetEngine(loader, JAVA_CRONET_IMPL_CLASS, getUserAgent()
); | |
| 480 } | |
| 481 | |
| 482 private ExperimentalCronetEngine createCronetEngine( | |
| 483 ClassLoader loader, String name, Object argument) { | |
| 484 ExperimentalCronetEngine cronetEngine = null; | |
| 485 try { | |
| 486 Class<? extends ExperimentalCronetEngine> engineClass = | |
| 487 loader.loadClass(name).asSubclass(ExperimentalCronetEngine.c
lass); | |
| 488 Constructor<? extends ExperimentalCronetEngine> constructor = | |
| 489 engineClass.getConstructor(argument.getClass()); | |
| 490 cronetEngine = constructor.newInstance(argument); | |
| 491 } catch (ClassNotFoundException e) { | |
| 492 // Leave as null. | |
| 493 Log.i(TAG, "Class loader " + loader + " cannot find Cronet engine im
plementation: " | |
| 494 + name + ". Will try to find an alternative implemen
tation."); | |
| 495 } catch (Exception e) { | |
| 496 throw new IllegalStateException("Cannot instantiate: " + name, e); | |
| 497 } | |
| 498 return cronetEngine; | |
| 499 } | |
| 500 } | 425 } |
| OLD | NEW |