15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is useful for building a simple URLRequestContext. Most creators 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of new URLRequestContexts should use this helper class to construct it. Call 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// any configuration params, and when done, invoke Build() to construct the 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLRequestContext. This URLRequestContext will own all its own storage. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLRequestContextBuilder and its associated params classes are initially 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// populated with "sane" default values. Read through the comments to figure out 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// what these are. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <vector> 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h" 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/base/network_delegate.h" 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/dns/host_resolver.h" 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/proxy/proxy_config_service.h" 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/proxy/proxy_service.h" 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/socket/next_proto.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class FtpTransactionFactory; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostMappingRules; 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class HttpAuthHandlerFactory; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigService; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContext; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT URLRequestContextBuilder { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NET_EXPORT HttpCacheParams { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IN_MEMORY, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISK, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpCacheParams(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HttpCacheParams(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The type of HTTP cache. Default is IN_MEMORY. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The max size of the cache in bytes. Default is algorithmically determined 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // based off available disk space. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_size; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The cache path (when type is DISK). 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NET_EXPORT HttpNetworkSessionParams { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpNetworkSessionParams(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HttpNetworkSessionParams(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These fields mirror those in net::HttpNetworkSession::Params; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_certificate_errors; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostMappingRules* host_mapping_rules; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 testing_fixed_http_port; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 testing_fixed_https_port; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NextProtoVector next_protos; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string trusted_spdy_proxy; 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool use_alternate_protocols; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool enable_quic; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRequestContextBuilder(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~URLRequestContextBuilder(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // These functions are mutually exclusive. The ProxyConfigService, if 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // set, will be used to construct a ProxyService. 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_proxy_config_service(ProxyConfigService* proxy_config_service) { 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch proxy_config_service_.reset(proxy_config_service); 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_proxy_service(ProxyService* proxy_service) { 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch proxy_service_.reset(proxy_service); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Call these functions to specify hard-coded Accept-Language 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or User-Agent header values for all requests that don't 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have the headers already set. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_accept_language(const std::string& accept_language) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accept_language_ = accept_language; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_user_agent(const std::string& user_agent) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent_ = user_agent; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Control support for data:// requests. By default it's disabled. 100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void set_data_enabled(bool enable) { 101b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) data_enabled_ = enable; 102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 103b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if !defined(DISABLE_FILE_SUPPORT) 105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Control support for file:// requests. By default it's disabled. 106b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void set_file_enabled(bool enable) { 107b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) file_enabled_ = enable; 108b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 111b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if !defined(DISABLE_FTP_SUPPORT) 112b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Control support for ftp:// requests. By default it's disabled. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_ftp_enabled(bool enable) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ftp_enabled_ = enable; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 116b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(mmenke): Probably makes sense to get rid of this, and have consumers 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // set their own NetLog::Observers instead. 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_net_log(NetLog* net_log) { 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net_log_.reset(net_log); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // By default host_resolver is constructed with CreateDefaultResolver. 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_host_resolver(HostResolver* host_resolver) { 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) host_resolver_.reset(host_resolver); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uses BasicNetworkDelegate by default. Note that calling Build will unset 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any custom delegate in builder, so this must be called each time before 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Build is called. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_network_delegate(NetworkDelegate* delegate) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_delegate_.reset(delegate); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Adds additional auth handler factories to be used in addition to what is 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // provided in the default |HttpAuthHandlerRegistryFactory|. The auth |scheme| 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // and |factory| are provided. The builder takes ownership of the factory and 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Build() must be called after this method. 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void add_http_auth_handler_factory(const std::string& scheme, 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::HttpAuthHandlerFactory* factory) { 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) extra_http_auth_handlers_.push_back(SchemeFactory(scheme, factory)); 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // By default HttpCache is enabled with a default constructed HttpCacheParams. 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void EnableHttpCache(const HttpCacheParams& params); 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DisableHttpCache(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override default net::HttpNetworkSession::Params settings. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_http_network_session_params( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HttpNetworkSessionParams& http_network_session_params) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_network_session_params_ = http_network_session_params; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_transport_security_persister_path( 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::FilePath& transport_security_persister_path) { 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch transport_security_persister_path_ = transport_security_persister_path; 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Adjust |http_network_session_params_.next_protos| to enable SPDY and QUIC. 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void SetSpdyAndQuicEnabled(bool spdy_enabled, 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool quic_enabled); 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_throttling_enabled(bool throttling_enabled) { 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch throttling_enabled_ = throttling_enabled; 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1693c9a4a7bbec40de49d55363e12a368fe0b01dca9Selim Gurun void set_channel_id_enabled(bool enable) { 1703c9a4a7bbec40de49d55363e12a368fe0b01dca9Selim Gurun channel_id_enabled_ = enable; 1713c9a4a7bbec40de49d55363e12a368fe0b01dca9Selim Gurun } 1723c9a4a7bbec40de49d55363e12a368fe0b01dca9Selim Gurun 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRequestContext* Build(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) struct NET_EXPORT SchemeFactory { 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SchemeFactory(const std::string& scheme, 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::HttpAuthHandlerFactory* factory); 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ~SchemeFactory(); 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string scheme; 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::HttpAuthHandlerFactory* factory; 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string accept_language_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user_agent_; 187b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Include support for data:// requests. 188b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bool data_enabled_; 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if !defined(DISABLE_FILE_SUPPORT) 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Include support for file:// requests. 191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bool file_enabled_; 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if !defined(DISABLE_FTP_SUPPORT) 194b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Include support for ftp:// requests. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ftp_enabled_; 196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool http_cache_enabled_; 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool throttling_enabled_; 1993c9a4a7bbec40de49d55363e12a368fe0b01dca9Selim Gurun bool channel_id_enabled_; 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpCacheParams http_cache_params_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpNetworkSessionParams http_network_session_params_; 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath transport_security_persister_path_; 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<NetLog> net_log_; 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<HostResolver> host_resolver_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ProxyConfigService> proxy_config_service_; 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<ProxyService> proxy_service_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NetworkDelegate> network_delegate_; 209b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<FtpTransactionFactory> ftp_transaction_factory_; 210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::vector<SchemeFactory> extra_http_auth_handlers_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(URLRequestContextBuilder); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 218