| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 org.json.JSONArray; | |
| 8 import org.json.JSONException; | 7 import org.json.JSONException; |
| 9 import org.json.JSONObject; | |
| 10 | 8 |
| 11 /** | 9 /** |
| 12 * A config for HttpUrlRequestFactory, which allows runtime configuration of | 10 * A config for HttpUrlRequestFactory, which allows runtime configuration of |
| 13 * HttpUrlRequestFactory. | 11 * HttpUrlRequestFactory. |
| 14 */ | 12 */ |
| 15 public class HttpUrlRequestFactoryConfig { | 13 public class HttpUrlRequestFactoryConfig extends UrlRequestContextConfig { |
| 16 | 14 |
| 17 /** | 15 /** |
| 18 * Default config enables SPDY, QUIC, in memory http cache. | 16 * Default config enables SPDY, QUIC, in memory http cache. |
| 19 */ | 17 */ |
| 20 public HttpUrlRequestFactoryConfig() { | 18 public HttpUrlRequestFactoryConfig() { |
| 21 enableLegacyMode(false); | 19 super(); |
| 22 enableQUIC(false); | |
| 23 enableSPDY(true); | |
| 24 enableHttpCache(HttpCache.IN_MEMORY, 100 * 1024); | |
| 25 } | |
| 26 | |
| 27 /** | |
| 28 * Override the name of the native library backing cronet. | |
| 29 */ | |
| 30 public HttpUrlRequestFactoryConfig setLibraryName(String libName) { | |
| 31 return putString(UrlRequestContextConfig.NATIVE_LIBRARY_NAME, libName); | |
| 32 } | 20 } |
| 33 | 21 |
| 34 /** | 22 /** |
| 35 * Create config from json serialized using @toString. | 23 * Create config from json serialized using @toString. |
| 36 */ | 24 */ |
| 37 public HttpUrlRequestFactoryConfig(String json) throws JSONException { | 25 public HttpUrlRequestFactoryConfig(String json) throws JSONException { |
| 38 mConfig = new JSONObject(json); | 26 super(json); |
| 39 } | 27 } |
| 40 | |
| 41 /** | |
| 42 * Boolean, use HttpUrlRequest-based implementation if true. All other | |
| 43 * keys are not applicable. | |
| 44 */ | |
| 45 public HttpUrlRequestFactoryConfig enableLegacyMode(boolean value) { | |
| 46 return putBoolean(UrlRequestContextConfig.ENABLE_LEGACY_MODE, value); | |
| 47 } | |
| 48 | |
| 49 boolean legacyMode() { | |
| 50 return mConfig.optBoolean(UrlRequestContextConfig.ENABLE_LEGACY_MODE); | |
| 51 } | |
| 52 | |
| 53 /** | |
| 54 * Boolean, enable QUIC if true. | |
| 55 */ | |
| 56 public HttpUrlRequestFactoryConfig enableQUIC(boolean value) { | |
| 57 return putBoolean(UrlRequestContextConfig.ENABLE_QUIC, value); | |
| 58 } | |
| 59 | |
| 60 /** | |
| 61 * Boolean, enable SPDY if true. | |
| 62 */ | |
| 63 public HttpUrlRequestFactoryConfig enableSPDY(boolean value) { | |
| 64 return putBoolean(UrlRequestContextConfig.ENABLE_SPDY, value); | |
| 65 } | |
| 66 | |
| 67 String libraryName() { | |
| 68 return mConfig.optString(UrlRequestContextConfig.NATIVE_LIBRARY_NAME, | |
| 69 "cronet"); | |
| 70 } | |
| 71 | |
| 72 /** | |
| 73 * Enumeration, Disable or Enable Disk or Memory Cache and specify its | |
| 74 * maximum size in bytes. | |
| 75 */ | |
| 76 public enum HttpCache { DISABLED, IN_MEMORY, DISK }; | |
| 77 public HttpUrlRequestFactoryConfig enableHttpCache(HttpCache value, | |
| 78 long maxSize) { | |
| 79 switch(value) { | |
| 80 case DISABLED: | |
| 81 return putString(UrlRequestContextConfig.HTTP_CACHE, | |
| 82 UrlRequestContextConfig.HTTP_CACHE_DISABLED); | |
| 83 case DISK: | |
| 84 putLong(UrlRequestContextConfig.HTTP_CACHE_MAX_SIZE, maxSize); | |
| 85 return putString(UrlRequestContextConfig.HTTP_CACHE, | |
| 86 UrlRequestContextConfig.HTTP_CACHE_DISK); | |
| 87 case IN_MEMORY: | |
| 88 putLong(UrlRequestContextConfig.HTTP_CACHE_MAX_SIZE, maxSize); | |
| 89 return putString(UrlRequestContextConfig.HTTP_CACHE, | |
| 90 UrlRequestContextConfig.HTTP_CACHE_MEMORY); | |
| 91 } | |
| 92 return this; | |
| 93 } | |
| 94 | |
| 95 /** | |
| 96 * String, path to directory for HTTP Cache and Cookie Storage. | |
| 97 */ | |
| 98 public HttpUrlRequestFactoryConfig setStoragePath(String value) { | |
| 99 return putString(UrlRequestContextConfig.STORAGE_PATH, value); | |
| 100 } | |
| 101 | |
| 102 /** | |
| 103 * Explicitly mark |host| as supporting QUIC. | |
| 104 * Note that enableHttpCache(DISK) is needed to take advantage of 0-RTT | |
| 105 * connection establishment between sessions. | |
| 106 * | |
| 107 * @param host of the server that supports QUIC. | |
| 108 * @param port of the server that supports QUIC. | |
| 109 * @param alternatePort to use for QUIC. | |
| 110 */ | |
| 111 public HttpUrlRequestFactoryConfig addQuicHint(String host, | |
| 112 int port, | |
| 113 int alternatePort) { | |
| 114 if (host.contains("/")) { | |
| 115 throw new IllegalArgumentException("Illegal QUIC Hint Host: " + | |
| 116 host); | |
| 117 } | |
| 118 try { | |
| 119 JSONArray quicHints = mConfig.optJSONArray( | |
| 120 UrlRequestContextConfig.QUIC_HINTS); | |
| 121 if (quicHints == null) { | |
| 122 quicHints = new JSONArray(); | |
| 123 mConfig.put(UrlRequestContextConfig.QUIC_HINTS, quicHints); | |
| 124 } | |
| 125 | |
| 126 JSONObject hint = new JSONObject(); | |
| 127 hint.put(UrlRequestContextConfig.QUIC_HINT_HOST, host); | |
| 128 hint.put(UrlRequestContextConfig.QUIC_HINT_PORT, port); | |
| 129 hint.put(UrlRequestContextConfig.QUIC_HINT_ALT_PORT, alternatePort); | |
| 130 quicHints.put(hint); | |
| 131 } catch (JSONException e) { | |
| 132 // Intentionally do nothing. | |
| 133 } | |
| 134 return this; | |
| 135 } | |
| 136 | |
| 137 /** | |
| 138 * Get JSON string representation of the config. | |
| 139 */ | |
| 140 @Override | |
| 141 public String toString() { | |
| 142 return mConfig.toString(); | |
| 143 } | |
| 144 | |
| 145 /** | |
| 146 * Sets a boolean value in the config. Returns a reference to the same | |
| 147 * config object, so you can chain put calls together. | |
| 148 */ | |
| 149 private HttpUrlRequestFactoryConfig putBoolean(String key, boolean value) { | |
| 150 try { | |
| 151 mConfig.put(key, value); | |
| 152 } catch (JSONException e) { | |
| 153 // Intentionally do nothing. | |
| 154 } | |
| 155 return this; | |
| 156 } | |
| 157 | |
| 158 /** | |
| 159 * Sets a long value in the config. Returns a reference to the same | |
| 160 * config object, so you can chain put calls together. | |
| 161 */ | |
| 162 private HttpUrlRequestFactoryConfig putLong(String key, long value) { | |
| 163 try { | |
| 164 mConfig.put(key, value); | |
| 165 } catch (JSONException e) { | |
| 166 // Intentionally do nothing. | |
| 167 } | |
| 168 return this; | |
| 169 } | |
| 170 | |
| 171 /** | |
| 172 * Sets a string value in the config. Returns a reference to the same | |
| 173 * config object, so you can chain put calls together. | |
| 174 */ | |
| 175 private HttpUrlRequestFactoryConfig putString(String key, String value) { | |
| 176 try { | |
| 177 mConfig.put(key, value); | |
| 178 } catch (JSONException e) { | |
| 179 // Intentionally do nothing. | |
| 180 } | |
| 181 return this; | |
| 182 } | |
| 183 | |
| 184 private JSONObject mConfig = new JSONObject(); | |
| 185 } | 28 } |
| OLD | NEW |