url_request_context.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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 represents contextual information (cookies, cache, etc.)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that's useful when processing resource requests.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The class is reference-counted so that it can be cleaned up after any
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// requests that are using it have been completed.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/non_thread_safe.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_log.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_network_session.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_server_properties.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/transport_security_state.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_config_service.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CertVerifier;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieStore;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FraudulentCertificateReporter;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostResolver;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpAuthHandlerFactory;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpTransactionFactory;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpUserAgentSettings;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkDelegate;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerBoundCertService;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyService;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestJobFactory;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestThrottlerManager;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subclass to provide application-specific context for URLRequest
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instances. Note that URLRequestContext typically does not provide storage for
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// these member variables, since they may be shared. For the ones that aren't
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shared, URLRequestContextStorage can be helpful in defining their storage.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT URLRequestContext
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : NON_EXPORTED_BASE(public base::NonThreadSafe) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestContext();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~URLRequestContext();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Copies the state from |other| into this context.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CopyFrom(const URLRequestContext* other);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // May return NULL if this context doesn't have an associated network session.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const HttpNetworkSession::Params* GetNetworkSessionParams() const;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequest* CreateRequest(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url, URLRequest::Delegate* delegate) const;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetLog* net_log() const {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return net_log_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_net_log(NetLog* net_log) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net_log_ = net_log;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HostResolver* host_resolver() const {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return host_resolver_;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_host_resolver(HostResolver* host_resolver) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    host_resolver_ = host_resolver;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CertVerifier* cert_verifier() const {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return cert_verifier_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_cert_verifier(CertVerifier* cert_verifier) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cert_verifier_ = cert_verifier;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ServerBoundCertService* server_bound_cert_service() const {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return server_bound_cert_service_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_server_bound_cert_service(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ServerBoundCertService* server_bound_cert_service) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_bound_cert_service_ = server_bound_cert_service;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FraudulentCertificateReporter* fraudulent_certificate_reporter() const {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return fraudulent_certificate_reporter_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_fraudulent_certificate_reporter(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FraudulentCertificateReporter* fraudulent_certificate_reporter) {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fraudulent_certificate_reporter_ = fraudulent_certificate_reporter;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the proxy service for this context.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyService* proxy_service() const { return proxy_service_; }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_proxy_service(ProxyService* proxy_service) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    proxy_service_ = proxy_service;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the ssl config service for this context.
110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SSLConfigService* ssl_config_service() const {
111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return ssl_config_service_.get();
112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_ssl_config_service(SSLConfigService* service) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ssl_config_service_ = service;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the HTTP Authentication Handler Factory for this context.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The factory is only valid for the lifetime of this URLRequestContext
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpAuthHandlerFactory* http_auth_handler_factory() const {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return http_auth_handler_factory_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_http_auth_handler_factory(HttpAuthHandlerFactory* factory) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    http_auth_handler_factory_ = factory;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the http transaction factory for this context.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpTransactionFactory* http_transaction_factory() const {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return http_transaction_factory_;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_http_transaction_factory(HttpTransactionFactory* factory) {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    http_transaction_factory_ = factory;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_network_delegate(NetworkDelegate* network_delegate) {
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    network_delegate_ = network_delegate;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkDelegate* network_delegate() const { return network_delegate_; }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_http_server_properties(
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HttpServerProperties* http_server_properties) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    http_server_properties_ = http_server_properties;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpServerProperties* http_server_properties() const {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return http_server_properties_;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the cookie store for this context (may be null, in which case
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cookies are not stored).
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CookieStore* cookie_store() const { return cookie_store_.get(); }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_cookie_store(CookieStore* cookie_store);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TransportSecurityState* transport_security_state() const {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return transport_security_state_;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_transport_security_state(
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TransportSecurityState* state) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    transport_security_state_ = state;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Legacy accessors that delegate to http_user_agent_settings_.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(pauljensen): Remove after all clients are updated to directly access
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // http_user_agent_settings_.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the value of 'Accept-Language' header field.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetAcceptLanguage() const;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the UA string to use for the given URL.  Pass an invalid URL (such as
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GURL()) to get the default UA string.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetUserAgent(const GURL& url) const;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const URLRequestJobFactory* job_factory() const { return job_factory_; }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_job_factory(const URLRequestJobFactory* job_factory) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    job_factory_ = job_factory;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // May be NULL.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestThrottlerManager* throttler_manager() const {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return throttler_manager_;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_throttler_manager(URLRequestThrottlerManager* throttler_manager) {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    throttler_manager_ = throttler_manager;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the URLRequest objects that hold a reference to this
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URLRequestContext.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<const URLRequest*>* url_requests() const {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return url_requests_.get();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AssertNoURLRequests() const;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the underlying |HttpUserAgentSettings| implementation that provides
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the HTTP Accept-Language and User-Agent header values.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const HttpUserAgentSettings* http_user_agent_settings() const {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return http_user_agent_settings_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_http_user_agent_settings(
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HttpUserAgentSettings* http_user_agent_settings) {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    http_user_agent_settings_ = http_user_agent_settings;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Important: When adding any new members below, consider whether they need to
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be added to CopyFrom.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ownership for these members are not defined here. Clients should either
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provide storage elsewhere or have a subclass take ownership.
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetLog* net_log_;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HostResolver* host_resolver_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CertVerifier* cert_verifier_;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ServerBoundCertService* server_bound_cert_service_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FraudulentCertificateReporter* fraudulent_certificate_reporter_;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpAuthHandlerFactory* http_auth_handler_factory_;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyService* proxy_service_;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SSLConfigService> ssl_config_service_;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkDelegate* network_delegate_;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpServerProperties* http_server_properties_;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpUserAgentSettings* http_user_agent_settings_;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CookieStore> cookie_store_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TransportSecurityState* transport_security_state_;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HttpTransactionFactory* http_transaction_factory_;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const URLRequestJobFactory* job_factory_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRequestThrottlerManager* throttler_manager_;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Important: When adding any new members below, consider whether they need to
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be added to CopyFrom.
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<std::set<const URLRequest*> > url_requests_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(URLRequestContext);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_URL_REQUEST_URL_REQUEST_CONTEXT_H_
240