Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: components/cronet/android/api/src/org/chromium/net/CronetEngine.java

Issue 1429863008: [Cronet] Remove JSON serialization of CronetEngine.Builder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address Helen's comments Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.support.annotation.IntDef; 8 import android.support.annotation.IntDef;
9 import android.text.TextUtils;
9 import android.util.Log; 10 import android.util.Log;
10 11
11 import org.json.JSONArray;
12 import org.json.JSONException;
13 import org.json.JSONObject;
14
15 import java.io.File; 12 import java.io.File;
16 import java.lang.annotation.Retention; 13 import java.lang.annotation.Retention;
17 import java.lang.annotation.RetentionPolicy; 14 import java.lang.annotation.RetentionPolicy;
18 import java.lang.reflect.Constructor; 15 import java.lang.reflect.Constructor;
19 import java.net.Proxy; 16 import java.net.Proxy;
20 import java.net.URL; 17 import java.net.URL;
21 import java.net.URLConnection; 18 import java.net.URLConnection;
22 import java.net.URLStreamHandlerFactory; 19 import java.net.URLStreamHandlerFactory;
20 import java.util.LinkedList;
23 import java.util.List; 21 import java.util.List;
24 import java.util.Map; 22 import java.util.Map;
25 import java.util.concurrent.Executor; 23 import java.util.concurrent.Executor;
26 24
27 /** 25 /**
28 * An engine to process {@link UrlRequest}s, which uses the best HTTP stack 26 * An engine to process {@link UrlRequest}s, which uses the best HTTP stack
29 * available on the current platform. 27 * available on the current platform.
30 */ 28 */
31 public abstract class CronetEngine { 29 public abstract class CronetEngine {
32 /** 30 /**
33 * A builder for {@link CronetEngine}s, which allows runtime configuration o f 31 * A builder for {@link CronetEngine}s, which allows runtime configuration o f
34 * {@code CronetEngine}. Configuration options are set on the builder and 32 * {@code CronetEngine}. Configuration options are set on the builder and
35 * then {@link #build} is called to create the {@code CronetEngine}. 33 * then {@link #build} is called to create the {@code CronetEngine}.
36 */ 34 */
37 public static class Builder { 35 public static class Builder {
38 private final JSONObject mConfig; 36 // A hint that a host supports QUIC.
37 static class QuicHint {
38 // The host.
39 final String mHost;
40 // Port of the server that supports QUIC.
41 final int mPort;
42 // Alternate protocol port.
43 final int mAlternatePort;
44
45 QuicHint(String host, int port, int alternatePort) {
46 mHost = host;
47 mPort = port;
48 mAlternatePort = alternatePort;
49 }
50 }
51
52 // Private fields are simply storage of configuration for the resulting CronetEngine.
53 // See setters below for verbose descriptions.
39 private final Context mContext; 54 private final Context mContext;
55 private final List<QuicHint> mQuicHints = new LinkedList<QuicHint>();
56 private String mUserAgent;
57 private String mStoragePath;
58 private boolean mLegacyModeEnabled;
59 private String mLibraryName;
60 private boolean mQuicEnabled;
61 private boolean mHttp2Enabled;
62 private boolean mSdchEnabled;
63 private String mDataReductionProxyKey;
64 private String mDataReductionProxyPrimaryProxy;
65 private String mDataReductionProxyFallbackProxy;
66 private String mDataReductionProxySecureProxyCheckUrl;
67 private boolean mDisableCache;
68 private int mHttpCacheMode;
69 private long mHttpCacheMaxSize;
70 private String mExperimentalOptions;
71 private long mMockCertVerifier;
40 72
41 /** 73 /**
42 * Default config enables SPDY, disables QUIC, SDCH and HTTP cache. 74 * Default config enables SPDY, disables QUIC, SDCH and HTTP cache.
43 * @param context Android {@link Context} for engine to use. 75 * @param context Android {@link Context} for engine to use.
44 */ 76 */
45 public Builder(Context context) { 77 public Builder(Context context) {
46 mConfig = new JSONObject();
47 mContext = context; 78 mContext = context;
79 setLibraryName("cronet");
48 enableLegacyMode(false); 80 enableLegacyMode(false);
49 enableQUIC(false); 81 enableQUIC(false);
50 enableHTTP2(true); 82 enableHTTP2(true);
51 enableSDCH(false); 83 enableSDCH(false);
52 enableHttpCache(HTTP_CACHE_DISABLED, 0); 84 enableHttpCache(HTTP_CACHE_DISABLED, 0);
53 } 85 }
54 86
55 /** 87 /**
56 * Constructs a User-Agent string including Cronet version, and 88 * Constructs a User-Agent string including Cronet version, and
57 * application name and version. 89 * application name and version.
58 * 90 *
59 * @return User-Agent string. 91 * @return User-Agent string.
60 */ 92 */
61 public String getDefaultUserAgent() { 93 public String getDefaultUserAgent() {
62 return UserAgent.from(mContext); 94 return UserAgent.from(mContext);
63 } 95 }
64 96
65 /** 97 /**
66 * Overrides the User-Agent header for all requests. 98 * Overrides the User-Agent header for all requests.
67 * @return the builder to facilitate chaining. 99 * @return the builder to facilitate chaining.
68 */ 100 */
69 public Builder setUserAgent(String userAgent) { 101 public Builder setUserAgent(String userAgent) {
70 return putString(CronetEngineBuilderList.USER_AGENT, userAgent); 102 mUserAgent = userAgent;
103 return this;
71 } 104 }
72 105
73 String getUserAgent() { 106 String getUserAgent() {
74 return mConfig.optString(CronetEngineBuilderList.USER_AGENT); 107 return mUserAgent;
75 } 108 }
76 109
77 /** 110 /**
78 * Sets directory for HTTP Cache and Cookie Storage. The directory must 111 * Sets directory for HTTP Cache and Cookie Storage. The directory must
79 * exist. 112 * exist.
80 * <p> 113 * <p>
81 * <b>NOTE:</b> Do not use the same storage directory with more than one 114 * <b>NOTE:</b> Do not use the same storage directory with more than one
82 * {@code CronetEngine} at a time. Access to the storage directory does 115 * {@code CronetEngine} at a time. Access to the storage directory does
83 * not support concurrent access by multiple {@code CronetEngine}s. 116 * not support concurrent access by multiple {@code CronetEngine}s.
84 * 117 *
85 * @param value path to existing directory. 118 * @param value path to existing directory.
86 * @return the builder to facilitate chaining. 119 * @return the builder to facilitate chaining.
87 */ 120 */
88 public Builder setStoragePath(String value) { 121 public Builder setStoragePath(String value) {
89 if (!new File(value).isDirectory()) { 122 if (!new File(value).isDirectory()) {
90 throw new IllegalArgumentException( 123 throw new IllegalArgumentException(
91 "Storage path must be set to existing directory"); 124 "Storage path must be set to existing directory");
92 } 125 }
93 126 mStoragePath = value;
94 return putString(CronetEngineBuilderList.STORAGE_PATH, value); 127 return this;
95 } 128 }
96 129
97 String storagePath() { 130 String storagePath() {
98 return mConfig.optString(CronetEngineBuilderList.STORAGE_PATH); 131 return mStoragePath;
99 } 132 }
100 133
101 /** 134 /**
102 * Sets whether falling back to implementation based on system's 135 * Sets whether falling back to implementation based on system's
103 * {@link java.net.HttpURLConnection} implementation is enabled. 136 * {@link java.net.HttpURLConnection} implementation is enabled.
104 * Defaults to disabled. 137 * Defaults to disabled.
105 * @return the builder to facilitate chaining. 138 * @return the builder to facilitate chaining.
106 * @deprecated Not supported by the new API. 139 * @deprecated Not supported by the new API.
107 */ 140 */
108 @Deprecated 141 @Deprecated
109 public Builder enableLegacyMode(boolean value) { 142 public Builder enableLegacyMode(boolean value) {
110 return putBoolean(CronetEngineBuilderList.ENABLE_LEGACY_MODE, value) ; 143 mLegacyModeEnabled = value;
144 return this;
111 } 145 }
112 146
113 boolean legacyMode() { 147 boolean legacyMode() {
114 return mConfig.optBoolean(CronetEngineBuilderList.ENABLE_LEGACY_MODE ); 148 return mLegacyModeEnabled;
115 } 149 }
116 150
117 /** 151 /**
118 * Overrides the name of the native library backing Cronet. 152 * Overrides the name of the native library backing Cronet.
119 * @return the builder to facilitate chaining. 153 * @return the builder to facilitate chaining.
120 */ 154 */
121 Builder setLibraryName(String libName) { 155 Builder setLibraryName(String libName) {
122 return putString(CronetEngineBuilderList.NATIVE_LIBRARY_NAME, libNam e); 156 mLibraryName = libName;
157 return this;
123 } 158 }
124 159
125 String libraryName() { 160 String libraryName() {
126 return mConfig.optString(CronetEngineBuilderList.NATIVE_LIBRARY_NAME , "cronet"); 161 return mLibraryName;
127 } 162 }
128 163
129 /** 164 /**
130 * Sets whether <a href="https://www.chromium.org/quic">QUIC</a> protoco l 165 * Sets whether <a href="https://www.chromium.org/quic">QUIC</a> protoco l
131 * is enabled. Defaults to disabled. 166 * is enabled. Defaults to disabled.
132 * @return the builder to facilitate chaining. 167 * @return the builder to facilitate chaining.
133 */ 168 */
134 public Builder enableQUIC(boolean value) { 169 public Builder enableQUIC(boolean value) {
135 return putBoolean(CronetEngineBuilderList.ENABLE_QUIC, value); 170 mQuicEnabled = value;
171 return this;
172 }
173
174 boolean quicEnabled() {
175 return mQuicEnabled;
136 } 176 }
137 177
138 /** 178 /**
139 * Sets whether <a href="https://tools.ietf.org/html/rfc7540">HTTP/2</a> 179 * Sets whether <a href="https://tools.ietf.org/html/rfc7540">HTTP/2</a>
140 * protocol is enabled. Defaults to enabled. 180 * protocol is enabled. Defaults to enabled.
141 * @return the builder to facilitate chaining. 181 * @return the builder to facilitate chaining.
142 */ 182 */
143 public Builder enableHTTP2(boolean value) { 183 public Builder enableHTTP2(boolean value) {
144 return putBoolean(CronetEngineBuilderList.ENABLE_SPDY, value); 184 mHttp2Enabled = value;
185 return this;
186 }
187
188 boolean http2Enabled() {
189 return mHttp2Enabled;
145 } 190 }
146 191
147 /** 192 /**
148 * Sets whether 193 * Sets whether
149 * <a 194 * <a
150 * href="https://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/at t-0441/Shared_Dictionary_Compression_over_HTTP.pdf"> 195 * href="https://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/at t-0441/Shared_Dictionary_Compression_over_HTTP.pdf">
151 * SDCH</a> compression is enabled. Defaults to disabled. 196 * SDCH</a> compression is enabled. Defaults to disabled.
152 * @return the builder to facilitate chaining. 197 * @return the builder to facilitate chaining.
153 */ 198 */
154 public Builder enableSDCH(boolean value) { 199 public Builder enableSDCH(boolean value) {
155 return putBoolean(CronetEngineBuilderList.ENABLE_SDCH, value); 200 mSdchEnabled = value;
201 return this;
202 }
203
204 boolean sdchEnabled() {
205 return mSdchEnabled;
156 } 206 }
157 207
158 /** 208 /**
159 * Enables 209 * Enables
160 * <a href="https://developer.chrome.com/multidevice/data-compression">D ata 210 * <a href="https://developer.chrome.com/multidevice/data-compression">D ata
161 * Reduction Proxy</a>. Defaults to disabled. 211 * Reduction Proxy</a>. Defaults to disabled.
162 * @param key key to use when authenticating with the proxy. 212 * @param key key to use when authenticating with the proxy.
163 * @return the builder to facilitate chaining. 213 * @return the builder to facilitate chaining.
164 */ 214 */
165 public Builder enableDataReductionProxy(String key) { 215 public Builder enableDataReductionProxy(String key) {
166 return (putString(CronetEngineBuilderList.DATA_REDUCTION_PROXY_KEY, key)); 216 mDataReductionProxyKey = key;
217 return this;
218 }
219
220 String dataReductionProxyKey() {
221 return mDataReductionProxyKey;
167 } 222 }
168 223
169 /** 224 /**
170 * Overrides 225 * Overrides
171 * <a href="https://developer.chrome.com/multidevice/data-compression"> 226 * <a href="https://developer.chrome.com/multidevice/data-compression">
172 * Data Reduction Proxy</a> configuration parameters with a primary 227 * Data Reduction Proxy</a> configuration parameters with a primary
173 * proxy name, fallback proxy name, and a secure proxy check URL. Proxie s 228 * proxy name, fallback proxy name, and a secure proxy check URL. Proxie s
174 * are specified as [scheme://]host[:port]. Used for testing. 229 * are specified as [scheme://]host[:port]. Used for testing.
175 * @param primaryProxy the primary data reduction proxy to use. 230 * @param primaryProxy the primary data reduction proxy to use.
176 * @param fallbackProxy a fallback data reduction proxy to use. 231 * @param fallbackProxy a fallback data reduction proxy to use.
177 * @param secureProxyCheckUrl a URL to fetch to determine if using a sec ure 232 * @param secureProxyCheckUrl a URL to fetch to determine if using a sec ure
178 * proxy is allowed. 233 * proxy is allowed.
179 * @return the builder to facilitate chaining. 234 * @return the builder to facilitate chaining.
180 * @hide 235 * @hide
181 * @deprecated Marked as deprecated because @hide doesn't properly hide but 236 * @deprecated Marked as deprecated because @hide doesn't properly hide but
182 * javadocs are built with nodeprecated="yes". 237 * javadocs are built with nodeprecated="yes".
183 */ 238 */
184 @SuppressWarnings("DepAnn") 239 @SuppressWarnings("DepAnn")
185 public Builder setDataReductionProxyOptions( 240 public Builder setDataReductionProxyOptions(
186 String primaryProxy, String fallbackProxy, String secureProxyChe ckUrl) { 241 String primaryProxy, String fallbackProxy, String secureProxyChe ckUrl) {
187 if (primaryProxy.isEmpty() || fallbackProxy.isEmpty() 242 if (primaryProxy.isEmpty() || fallbackProxy.isEmpty()
188 || secureProxyCheckUrl.isEmpty()) { 243 || secureProxyCheckUrl.isEmpty()) {
189 throw new IllegalArgumentException( 244 throw new IllegalArgumentException(
190 "Primary and fallback proxies and check url must be set" ); 245 "Primary and fallback proxies and check url must be set" );
191 } 246 }
192 putString(CronetEngineBuilderList.DATA_REDUCTION_PRIMARY_PROXY, prim aryProxy); 247 mDataReductionProxyPrimaryProxy = primaryProxy;
193 putString(CronetEngineBuilderList.DATA_REDUCTION_FALLBACK_PROXY, fal lbackProxy); 248 mDataReductionProxyFallbackProxy = fallbackProxy;
194 putString(CronetEngineBuilderList.DATA_REDUCTION_SECURE_PROXY_CHECK_ URL, 249 mDataReductionProxySecureProxyCheckUrl = secureProxyCheckUrl;
195 secureProxyCheckUrl);
196 return this; 250 return this;
197 } 251 }
198 252
253 String dataReductionProxyPrimaryProxy() {
254 return mDataReductionProxyPrimaryProxy;
255 }
256
257 String dataReductionProxyFallbackProxy() {
258 return mDataReductionProxyFallbackProxy;
259 }
260
261 String dataReductionProxySecureProxyCheckUrl() {
262 return mDataReductionProxySecureProxyCheckUrl;
263 }
264
199 /** @deprecated not really deprecated but hidden. */ 265 /** @deprecated not really deprecated but hidden. */
200 @IntDef({ 266 @IntDef({
201 HTTP_CACHE_DISABLED, HTTP_CACHE_IN_MEMORY, HTTP_CACHE_DISK_NO_HT TP, HTTP_CACHE_DISK, 267 HTTP_CACHE_DISABLED, HTTP_CACHE_IN_MEMORY, HTTP_CACHE_DISK_NO_HT TP, HTTP_CACHE_DISK,
202 }) 268 })
203 @Retention(RetentionPolicy.SOURCE) 269 @Retention(RetentionPolicy.SOURCE)
204 @SuppressWarnings("DepAnn") 270 @SuppressWarnings("DepAnn")
205 public @interface HttpCacheSetting {} 271 public @interface HttpCacheSetting {}
206 272
207 /** 273 /**
208 * Setting to disable HTTP cache. Some data may still be temporarily sto red in memory. 274 * Setting to disable HTTP cache. Some data may still be temporarily sto red in memory.
(...skipping 25 matching lines...) Expand all
234 * Enables or disables caching of HTTP data and other information like Q UIC 300 * Enables or disables caching of HTTP data and other information like Q UIC
235 * server information. 301 * server information.
236 * @param cacheMode control location and type of cached data. Must be on e of 302 * @param cacheMode control location and type of cached data. Must be on e of
237 * {@link #HTTP_CACHE_DISABLED HTTP_CACHE_*}. 303 * {@link #HTTP_CACHE_DISABLED HTTP_CACHE_*}.
238 * @param maxSize maximum size in bytes used to cache data (advisory and maybe 304 * @param maxSize maximum size in bytes used to cache data (advisory and maybe
239 * exceeded at times). 305 * exceeded at times).
240 * @return the builder to facilitate chaining. 306 * @return the builder to facilitate chaining.
241 */ 307 */
242 public Builder enableHttpCache(@HttpCacheSetting int cacheMode, long max Size) { 308 public Builder enableHttpCache(@HttpCacheSetting int cacheMode, long max Size) {
243 if (cacheMode == HTTP_CACHE_DISK || cacheMode == HTTP_CACHE_DISK_NO_ HTTP) { 309 if (cacheMode == HTTP_CACHE_DISK || cacheMode == HTTP_CACHE_DISK_NO_ HTTP) {
244 if (storagePath().isEmpty()) { 310 if (TextUtils.isEmpty(storagePath())) {
xunjieli 2015/12/02 13:06:46 I don't understand why we need TextUtils.isEmpty.
pauljensen 2015/12/02 18:11:09 Done. I was using TextUtils.isEmpty() to match th
245 throw new IllegalArgumentException("Storage path must be set "); 311 throw new IllegalArgumentException("Storage path must be set ");
246 } 312 }
247 } else { 313 } else {
248 if (!storagePath().isEmpty()) { 314 if (!TextUtils.isEmpty(storagePath())) {
249 throw new IllegalArgumentException("Storage path must be emp ty"); 315 throw new IllegalArgumentException("Storage path must be emp ty");
250 } 316 }
251 } 317 }
252 putBoolean(CronetEngineBuilderList.LOAD_DISABLE_CACHE, 318 mDisableCache =
253 cacheMode == HTTP_CACHE_DISABLED || cacheMode == HTTP_CACHE_ DISK_NO_HTTP); 319 (cacheMode == HTTP_CACHE_DISABLED || cacheMode == HTTP_CACHE _DISK_NO_HTTP);
254 putLong(CronetEngineBuilderList.HTTP_CACHE_MAX_SIZE, maxSize); 320 mHttpCacheMaxSize = maxSize;
255 321
256 switch (cacheMode) { 322 switch (cacheMode) {
257 case HTTP_CACHE_DISABLED: 323 case HTTP_CACHE_DISABLED:
258 return putString(CronetEngineBuilderList.HTTP_CACHE, 324 mHttpCacheMode = HttpCacheType.DISABLED;
259 CronetEngineBuilderList.HTTP_CACHE_DISABLED); 325 break;
260 case HTTP_CACHE_DISK_NO_HTTP: 326 case HTTP_CACHE_DISK_NO_HTTP:
261 case HTTP_CACHE_DISK: 327 case HTTP_CACHE_DISK:
262 return putString(CronetEngineBuilderList.HTTP_CACHE, 328 mHttpCacheMode = HttpCacheType.DISK;
263 CronetEngineBuilderList.HTTP_CACHE_DISK); 329 break;
264
265 case HTTP_CACHE_IN_MEMORY: 330 case HTTP_CACHE_IN_MEMORY:
266 return putString(CronetEngineBuilderList.HTTP_CACHE, 331 mHttpCacheMode = HttpCacheType.MEMORY;
267 CronetEngineBuilderList.HTTP_CACHE_MEMORY); 332 break;
333 default:
334 throw new IllegalArgumentException("Unknown cache mode");
268 } 335 }
269 return this; 336 return this;
270 } 337 }
271 338
339 boolean cacheDisabled() {
340 return mDisableCache;
341 }
342
343 long httpCacheMaxSize() {
344 return mHttpCacheMaxSize;
345 }
346
347 int httpCacheMode() {
348 return mHttpCacheMode;
349 }
350
272 /** 351 /**
273 * Adds hint that {@code host} supports QUIC. 352 * Adds hint that {@code host} supports QUIC.
274 * Note that {@link #enableHttpCache enableHttpCache} 353 * Note that {@link #enableHttpCache enableHttpCache}
275 * ({@link #HTTP_CACHE_DISK}) is needed to take advantage of 0-RTT 354 * ({@link #HTTP_CACHE_DISK}) is needed to take advantage of 0-RTT
276 * connection establishment between sessions. 355 * connection establishment between sessions.
277 * 356 *
278 * @param host hostname of the server that supports QUIC. 357 * @param host hostname of the server that supports QUIC.
279 * @param port host of the server that supports QUIC. 358 * @param port host of the server that supports QUIC.
280 * @param alternatePort alternate port to use for QUIC. 359 * @param alternatePort alternate port to use for QUIC.
281 * @return the builder to facilitate chaining. 360 * @return the builder to facilitate chaining.
282 */ 361 */
283 public Builder addQuicHint(String host, int port, int alternatePort) { 362 public Builder addQuicHint(String host, int port, int alternatePort) {
284 if (host.contains("/")) { 363 if (host.contains("/")) {
285 throw new IllegalArgumentException("Illegal QUIC Hint Host: " + host); 364 throw new IllegalArgumentException("Illegal QUIC Hint Host: " + host);
286 } 365 }
287 try { 366 mQuicHints.add(new QuicHint(host, port, alternatePort));
288 JSONArray quicHints = mConfig.optJSONArray(CronetEngineBuilderLi st.QUIC_HINTS); 367 return this;
289 if (quicHints == null) { 368 }
290 quicHints = new JSONArray();
291 mConfig.put(CronetEngineBuilderList.QUIC_HINTS, quicHints);
292 }
293 369
294 JSONObject hint = new JSONObject(); 370 List<QuicHint> quicHints() {
295 hint.put(CronetEngineBuilderList.QUIC_HINT_HOST, host); 371 return mQuicHints;
296 hint.put(CronetEngineBuilderList.QUIC_HINT_PORT, port);
297 hint.put(CronetEngineBuilderList.QUIC_HINT_ALT_PORT, alternatePo rt);
298 quicHints.put(hint);
299 } catch (JSONException e) {
300 // Intentionally do nothing.
301 }
302 return this;
303 } 372 }
304 373
305 /** 374 /**
306 * Sets experimental options to be used in Cronet. 375 * Sets experimental options to be used in Cronet.
307 * 376 *
308 * @param options JSON formatted experimental options. 377 * @param options JSON formatted experimental options.
309 * @return the builder to facilitate chaining. 378 * @return the builder to facilitate chaining.
310 */ 379 */
311 public Builder setExperimentalOptions(String options) { 380 public Builder setExperimentalOptions(String options) {
312 return putString(CronetEngineBuilderList.EXPERIMENTAL_OPTIONS, optio ns); 381 mExperimentalOptions = options;
382 return this;
383 }
384
385 String experimentalOptions() {
386 return mExperimentalOptions;
313 } 387 }
314 388
315 /** 389 /**
316 * Sets a native MockCertVerifier for testing. 390 * Sets a native MockCertVerifier for testing.
317 */ 391 */
318 Builder setMockCertVerifierForTesting(long mockCertVerifier) { 392 Builder setMockCertVerifierForTesting(long mockCertVerifier) {
319 return putString( 393 mMockCertVerifier = mockCertVerifier;
320 CronetEngineBuilderList.MOCK_CERT_VERIFIER, String.valueOf(m ockCertVerifier)); 394 return this;
395 }
396
397 long mockCertVerifier() {
398 return mMockCertVerifier;
321 } 399 }
322 400
323 /** 401 /**
324 * Gets a JSON string representation of the builder.
325 */
326 String toJSONString() {
327 return mConfig.toString();
328 }
329
330 /**
331 * Returns {@link Context} for builder. 402 * Returns {@link Context} for builder.
332 * 403 *
333 * @return {@link Context} for builder. 404 * @return {@link Context} for builder.
334 */ 405 */
335 Context getContext() { 406 Context getContext() {
336 return mContext; 407 return mContext;
337 } 408 }
338 409
339 /** 410 /**
340 * Sets a boolean value in the config. Returns a reference to the same
341 * config object, so you can chain put calls together.
342 * @return the builder to facilitate chaining.
343 */
344 private Builder putBoolean(String key, boolean value) {
345 try {
346 mConfig.put(key, value);
347 } catch (JSONException e) {
348 // Intentionally do nothing.
349 }
350 return this;
351 }
352
353 /**
354 * Sets a long value in the config. Returns a reference to the same
355 * config object, so you can chain put calls together.
356 * @return the builder to facilitate chaining.
357 */
358 private Builder putLong(String key, long value) {
359 try {
360 mConfig.put(key, value);
361 } catch (JSONException e) {
362 // Intentionally do nothing.
363 }
364 return this;
365 }
366
367 /**
368 * Sets a string value in the config. Returns a reference to the same
369 * config object, so you can chain put calls together.
370 * @return the builder to facilitate chaining.
371 */
372 private Builder putString(String key, String value) {
373 try {
374 mConfig.put(key, value);
375 } catch (JSONException e) {
376 // Intentionally do nothing.
377 }
378 return this;
379 }
380
381 /**
382 * Build a {@link CronetEngine} using this builder's configuration. 411 * Build a {@link CronetEngine} using this builder's configuration.
383 */ 412 */
384 public CronetEngine build() { 413 public CronetEngine build() {
385 CronetEngine engine = createContext(this); 414 CronetEngine engine = createContext(this);
386 // Clear MOCK_CERT_VERIFIER reference if there is any, since 415 // Clear MOCK_CERT_VERIFIER reference if there is any, since
387 // the ownership has been transferred to the engine. 416 // the ownership has been transferred to the engine.
388 mConfig.remove(CronetEngineBuilderList.MOCK_CERT_VERIFIER); 417 mMockCertVerifier = 0;
389 return engine; 418 return engine;
390 } 419 }
391 } 420 }
392 421
393 private static final String TAG = "UrlRequestFactory"; 422 private static final String TAG = "UrlRequestFactory";
394 private static final String CRONET_URL_REQUEST_CONTEXT = 423 private static final String CRONET_URL_REQUEST_CONTEXT =
395 "org.chromium.net.CronetUrlRequestContext"; 424 "org.chromium.net.CronetUrlRequestContext";
396 425
397 /** 426 /**
398 * Creates a {@link UrlRequest} object. All callbacks will 427 * Creates a {@link UrlRequest} object. All callbacks will
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 /** 683 /**
655 * Creates a {@link CronetEngine} with the given {@link Builder}. 684 * Creates a {@link CronetEngine} with the given {@link Builder}.
656 * 685 *
657 * @param builder builder to used for creating the CronetEngine instance. 686 * @param builder builder to used for creating the CronetEngine instance.
658 * @return the created CronetEngine instance. 687 * @return the created CronetEngine instance.
659 * @deprecated Use {@link CronetEngine.Builder}. 688 * @deprecated Use {@link CronetEngine.Builder}.
660 */ 689 */
661 @Deprecated 690 @Deprecated
662 public static CronetEngine createContext(Builder builder) { 691 public static CronetEngine createContext(Builder builder) {
663 CronetEngine cronetEngine = null; 692 CronetEngine cronetEngine = null;
664 if (builder.getUserAgent().isEmpty()) { 693 if (TextUtils.isEmpty(builder.getUserAgent())) {
xunjieli 2015/12/02 13:06:46 Same here. Can we do null test? If the embedder wa
pauljensen 2015/12/02 18:11:08 Done. I was using TextUtils.isEmpty() to match th
665 builder.setUserAgent(builder.getDefaultUserAgent()); 694 builder.setUserAgent(builder.getDefaultUserAgent());
666 } 695 }
667 if (!builder.legacyMode()) { 696 if (!builder.legacyMode()) {
668 cronetEngine = createCronetEngine(builder); 697 cronetEngine = createCronetEngine(builder);
669 } 698 }
670 if (cronetEngine == null) { 699 if (cronetEngine == null) {
671 // TODO(mef): Fallback to stub implementation. Once stub 700 // TODO(mef): Fallback to stub implementation. Once stub
672 // implementation is available merge with createCronetFactory. 701 // implementation is available merge with createCronetFactory.
673 cronetEngine = createCronetEngine(builder); 702 cronetEngine = createCronetEngine(builder);
674 } 703 }
(...skipping 15 matching lines...) Expand all
690 cronetEngine = possibleEngine; 719 cronetEngine = possibleEngine;
691 } 720 }
692 } catch (ClassNotFoundException e) { 721 } catch (ClassNotFoundException e) {
693 // Leave as null. 722 // Leave as null.
694 } catch (Exception e) { 723 } catch (Exception e) {
695 throw new IllegalStateException("Cannot instantiate: " + CRONET_URL_ REQUEST_CONTEXT, e); 724 throw new IllegalStateException("Cannot instantiate: " + CRONET_URL_ REQUEST_CONTEXT, e);
696 } 725 }
697 return cronetEngine; 726 return cronetEngine;
698 } 727 }
699 } 728 }
OLDNEW
« no previous file with comments | « components/cronet.gypi ('k') | components/cronet/android/api/src/org/chromium/net/HttpUrlConnectionUrlRequestFactory.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698