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

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