1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_
#define COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_vector.h"
#include "base/time/time.h"
#include "net/base/hash_value.h"
#include "net/cert/cert_verifier.h"
namespace base {
class SequencedTaskRunner;
} // namespace base
namespace net {
class CertVerifier;
class NetLog;
class URLRequestContextBuilder;
} // namespace net
namespace cronet {
// Common configuration parameters used by Cronet to configure
// URLRequestContext.
struct URLRequestContextConfig {
// Type of HTTP cache.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net.impl
enum HttpCacheType {
// No HTTP cache.
DISABLED,
// HTTP cache persisted to disk.
DISK,
// HTTP cache kept in memory.
MEMORY,
};
// App-provided hint that server supports QUIC.
struct QuicHint {
QuicHint(const std::string& host, int port, int alternate_port);
~QuicHint();
// Host name of the server that supports QUIC.
const std::string host;
// Port of the server that supports QUIC.
const int port;
// Alternate protocol port.
const int alternate_port;
private:
DISALLOW_COPY_AND_ASSIGN(QuicHint);
};
// Public-Key-Pinning configuration structure.
struct Pkp {
Pkp(const std::string& host,
bool include_subdomains,
const base::Time& expiration_date);
~Pkp();
// Host name.
const std::string host;
// Pin hashes (currently SHA256 only).
net::HashValueVector pin_hashes;
// Indicates whether the pinning should apply to the pinned host subdomains.
const bool include_subdomains;
// Expiration date for the pins.
const base::Time expiration_date;
private:
DISALLOW_COPY_AND_ASSIGN(Pkp);
};
URLRequestContextConfig(
// Enable QUIC.
bool enable_quic,
// QUIC User Agent ID.
const std::string& quic_user_agent_id,
// Enable SPDY.
bool enable_spdy,
// Enable SDCH.
bool enable_sdch,
// Type of http cache.
HttpCacheType http_cache,
// Max size of http cache in bytes.
int http_cache_max_size,
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
bool load_disable_cache,
// Storage path for http cache and cookie storage.
const std::string& storage_path,
// User-Agent request header field.
const std::string& user_agent,
// JSON encoded experimental options.
const std::string& experimental_options,
// Data reduction proxy key.
const std::string& data_reduction_proxy_key,
// Data reduction proxy.
const std::string& data_reduction_primary_proxy,
// Fallback data reduction proxy.
const std::string& data_reduction_fallback_proxy,
// Data reduction proxy secure proxy check URL.
const std::string& data_reduction_secure_proxy_check_url,
// MockCertVerifier to use for testing purposes.
std::unique_ptr<net::CertVerifier> mock_cert_verifier,
// Enable network quality estimator.
bool enable_network_quality_estimator,
// Enable bypassing of public key pinning for local trust anchors
bool bypass_public_key_pinning_for_local_trust_anchors,
// Certificate verifier cache data.
const std::string& cert_verifier_data);
~URLRequestContextConfig();
// Configure |context_builder| based on |this|.
void ConfigureURLRequestContextBuilder(
net::URLRequestContextBuilder* context_builder,
net::NetLog* net_log,
const scoped_refptr<base::SequencedTaskRunner>& file_task_runner);
// Enable QUIC.
const bool enable_quic;
// QUIC User Agent ID.
const std::string quic_user_agent_id;
// Enable SPDY.
const bool enable_spdy;
// Enable SDCH.
const bool enable_sdch;
// Type of http cache.
const HttpCacheType http_cache;
// Max size of http cache in bytes.
const int http_cache_max_size;
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
const bool load_disable_cache;
// Storage path for http cache and cookie storage.
const std::string storage_path;
// User-Agent request header field.
const std::string user_agent;
// Experimental options encoded as a string in a JSON format containing
// experiments and their corresponding configuration options. The format
// is a JSON object with the name of the experiment as the key, and the
// configuration options as the value. An example:
// {"experiment1": {"option1": "option_value1", "option2": "option_value2",
// ...}, "experiment2: {"option3", "option_value3", ...}, ...}
const std::string experimental_options;
// Enable Data Reduction Proxy with authentication key.
const std::string data_reduction_proxy_key;
const std::string data_reduction_primary_proxy;
const std::string data_reduction_fallback_proxy;
const std::string data_reduction_secure_proxy_check_url;
// Certificate verifier for testing.
std::unique_ptr<net::CertVerifier> mock_cert_verifier;
// Enable network quality estimator.
const bool enable_network_quality_estimator;
// Enable public key pinning bypass for local trust anchors.
const bool bypass_public_key_pinning_for_local_trust_anchors;
// Data to populte CertVerifierCache.
const std::string cert_verifier_data;
// App-provided list of servers that support QUIC.
ScopedVector<QuicHint> quic_hints;
// The list of public key pins.
ScopedVector<Pkp> pkp_list;
private:
DISALLOW_COPY_AND_ASSIGN(URLRequestContextConfig);
};
// Stores intermediate state for URLRequestContextConfig. Initializes with
// (mostly) sane defaults, then the appropriate member variables can be
// modified, and it can be finalized with Build().
struct URLRequestContextConfigBuilder {
URLRequestContextConfigBuilder();
~URLRequestContextConfigBuilder();
// Finalize state into a URLRequestContextConfig. Must only be called once,
// as once |mock_cert_verifier| is moved into a URLRequestContextConfig, it
// cannot be used again.
std::unique_ptr<URLRequestContextConfig> Build();
// Enable QUIC.
bool enable_quic = false;
// QUIC User Agent ID.
std::string quic_user_agent_id = "";
// Enable SPDY.
bool enable_spdy = true;
// Enable SDCH.
bool enable_sdch = false;
// Type of http cache.
URLRequestContextConfig::HttpCacheType http_cache =
URLRequestContextConfig::DISABLED;
// Max size of http cache in bytes.
int http_cache_max_size = 0;
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
bool load_disable_cache = false;
// Storage path for http cache and cookie storage.
std::string storage_path = "";
// User-Agent request header field.
std::string user_agent = "";
// Experimental options encoded as a string in a JSON format containing
// experiments and their corresponding configuration options. The format
// is a JSON object with the name of the experiment as the key, and the
// configuration options as the value. An example:
// {"experiment1": {"option1": "option_value1", "option2": "option_value2",
// ...}, "experiment2: {"option3", "option_value3", ...}, ...}
std::string experimental_options = "{}";
// Enable Data Reduction Proxy with authentication key.
std::string data_reduction_proxy_key = "";
std::string data_reduction_primary_proxy = "";
std::string data_reduction_fallback_proxy = "";
std::string data_reduction_secure_proxy_check_url = "";
// Certificate verifier for testing.
std::unique_ptr<net::CertVerifier> mock_cert_verifier = nullptr;
// Enable network quality estimator.
bool enable_network_quality_estimator = false;
// Enable public key pinning bypass for local trust anchors.
bool bypass_public_key_pinning_for_local_trust_anchors = true;
// Data to populate CertVerifierCache.
std::string cert_verifier_data = "";
private:
DISALLOW_COPY_AND_ASSIGN(URLRequestContextConfigBuilder);
};
} // namespace cronet
#endif // COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_
|