url_request_context_builder.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This class is useful for building a simple URLRequestContext. Most creators 6// of new URLRequestContexts should use this helper class to construct it. Call 7// any configuration params, and when done, invoke Build() to construct the 8// URLRequestContext. This URLRequestContext will own all its own storage. 9// 10// URLRequestContextBuilder and its associated params classes are initially 11// populated with "sane" default values. Read through the comments to figure out 12// what these are. 13 14#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 15#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 16 17#include <string> 18#include <vector> 19 20#include "base/basictypes.h" 21#include "base/files/file_path.h" 22#include "base/memory/ref_counted.h" 23#include "base/memory/scoped_ptr.h" 24#include "build/build_config.h" 25#include "net/base/net_export.h" 26#include "net/socket/next_proto.h" 27 28namespace net { 29 30class FtpTransactionFactory; 31class HostResolver; 32class HostMappingRules; 33class HttpAuthHandlerFactory; 34class ProxyConfigService; 35class URLRequestContext; 36class NetworkDelegate; 37 38class NET_EXPORT URLRequestContextBuilder { 39 public: 40 struct NET_EXPORT HttpCacheParams { 41 enum Type { 42 IN_MEMORY, 43 DISK, 44 }; 45 46 HttpCacheParams(); 47 ~HttpCacheParams(); 48 49 // The type of HTTP cache. Default is IN_MEMORY. 50 Type type; 51 52 // The max size of the cache in bytes. Default is algorithmically determined 53 // based off available disk space. 54 int max_size; 55 56 // The cache path (when type is DISK). 57 base::FilePath path; 58 }; 59 60 struct NET_EXPORT HttpNetworkSessionParams { 61 HttpNetworkSessionParams(); 62 ~HttpNetworkSessionParams(); 63 64 // These fields mirror those in net::HttpNetworkSession::Params; 65 bool ignore_certificate_errors; 66 HostMappingRules* host_mapping_rules; 67 uint16 testing_fixed_http_port; 68 uint16 testing_fixed_https_port; 69 NextProtoVector next_protos; 70 std::string trusted_spdy_proxy; 71 bool use_alternate_protocols; 72 }; 73 74 URLRequestContextBuilder(); 75 ~URLRequestContextBuilder(); 76 77 void set_proxy_config_service(ProxyConfigService* proxy_config_service); 78 79 // Call these functions to specify hard-coded Accept-Language 80 // or User-Agent header values for all requests that don't 81 // have the headers already set. 82 void set_accept_language(const std::string& accept_language) { 83 accept_language_ = accept_language; 84 } 85 void set_user_agent(const std::string& user_agent) { 86 user_agent_ = user_agent; 87 } 88 89 // Control support for data:// requests. By default it's disabled. 90 void set_data_enabled(bool enable) { 91 data_enabled_ = enable; 92 } 93 94#if !defined(DISABLE_FILE_SUPPORT) 95 // Control support for file:// requests. By default it's disabled. 96 void set_file_enabled(bool enable) { 97 file_enabled_ = enable; 98 } 99#endif 100 101#if !defined(DISABLE_FTP_SUPPORT) 102 // Control support for ftp:// requests. By default it's disabled. 103 void set_ftp_enabled(bool enable) { 104 ftp_enabled_ = enable; 105 } 106#endif 107 108 // By default host_resolver is constructed with CreateDefaultResolver. 109 void set_host_resolver(HostResolver* host_resolver) { 110 host_resolver_.reset(host_resolver); 111 } 112 113 // Uses BasicNetworkDelegate by default. Note that calling Build will unset 114 // any custom delegate in builder, so this must be called each time before 115 // Build is called. 116 void set_network_delegate(NetworkDelegate* delegate) { 117 network_delegate_.reset(delegate); 118 } 119 120 121 // Adds additional auth handler factories to be used in addition to what is 122 // provided in the default |HttpAuthHandlerRegistryFactory|. The auth |scheme| 123 // and |factory| are provided. The builder takes ownership of the factory and 124 // Build() must be called after this method. 125 void add_http_auth_handler_factory(const std::string& scheme, 126 net::HttpAuthHandlerFactory* factory) { 127 extra_http_auth_handlers_.push_back(SchemeFactory(scheme, factory)); 128 } 129 130 // By default HttpCache is enabled with a default constructed HttpCacheParams. 131 void EnableHttpCache(const HttpCacheParams& params) { 132 http_cache_enabled_ = true; 133 http_cache_params_ = params; 134 } 135 136 void DisableHttpCache() { 137 http_cache_enabled_ = false; 138 http_cache_params_ = HttpCacheParams(); 139 } 140 141 // Override default net::HttpNetworkSession::Params settings. 142 void set_http_network_session_params( 143 const HttpNetworkSessionParams& http_network_session_params) { 144 http_network_session_params_ = http_network_session_params; 145 } 146 147 URLRequestContext* Build(); 148 149 private: 150 struct SchemeFactory { 151 SchemeFactory(const std::string& scheme, 152 net::HttpAuthHandlerFactory* factory); 153 ~SchemeFactory(); 154 155 std::string scheme; 156 net::HttpAuthHandlerFactory* factory; 157 }; 158 159 std::string accept_language_; 160 std::string user_agent_; 161 // Include support for data:// requests. 162 bool data_enabled_; 163#if !defined(DISABLE_FILE_SUPPORT) 164 // Include support for file:// requests. 165 bool file_enabled_; 166#endif 167#if !defined(DISABLE_FTP_SUPPORT) 168 // Include support for ftp:// requests. 169 bool ftp_enabled_; 170#endif 171 bool http_cache_enabled_; 172 HttpCacheParams http_cache_params_; 173 HttpNetworkSessionParams http_network_session_params_; 174 scoped_ptr<HostResolver> host_resolver_; 175 scoped_ptr<ProxyConfigService> proxy_config_service_; 176 scoped_ptr<NetworkDelegate> network_delegate_; 177 scoped_ptr<FtpTransactionFactory> ftp_transaction_factory_; 178 std::vector<SchemeFactory> extra_http_auth_handlers_; 179 180 DISALLOW_COPY_AND_ASSIGN(URLRequestContextBuilder); 181}; 182 183} // namespace net 184 185#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ 186