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