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