blob: 94d7f22e1007a98017e6d56e3230c00bae623498 [file] [log] [blame]
[email protected]aa84a7e2012-03-15 21:29:061// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]f1d81922010-07-31 17:47:092// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/url_request/url_request_context.h"
6
[email protected]18590f22011-07-29 16:41:287#include "base/compiler_specific.h"
[email protected]7c52ed92012-04-06 15:42:408#include "base/debug/alias.h"
[email protected]4eee0452012-05-12 01:29:279#include "base/debug/stack_trace.h"
[email protected]f1d81922010-07-31 17:47:0910#include "base/string_util.h"
[email protected]9349cfb2010-08-31 18:00:5311#include "net/base/host_resolver.h"
[email protected]aa84a7e2012-03-15 21:29:0612#include "net/cookies/cookie_store.h"
[email protected]f6c21cb2011-02-16 19:45:4113#include "net/ftp/ftp_transaction_factory.h"
14#include "net/http/http_transaction_factory.h"
[email protected]ee4c30d2012-11-07 15:08:4315#include "net/url_request/http_user_agent_settings.h"
[email protected]7c52ed92012-04-06 15:42:4016#include "net/url_request/url_request.h"
[email protected]9349cfb2010-08-31 18:00:5317
[email protected]27a112c2011-01-06 04:19:3018namespace net {
19
[email protected]9349cfb2010-08-31 18:00:5320URLRequestContext::URLRequestContext()
[email protected]ef2bf422012-05-11 03:27:0921 : net_log_(NULL),
[email protected]c3a7bce2010-10-18 17:36:5422 host_resolver_(NULL),
[email protected]822581d2010-12-16 17:27:1523 cert_verifier_(NULL),
[email protected]9c4eff22012-03-20 22:42:2924 server_bound_cert_service_(NULL),
[email protected]b97d7702011-10-16 01:11:0725 fraudulent_certificate_reporter_(NULL),
[email protected]9349cfb2010-08-31 18:00:5326 http_auth_handler_factory_(NULL),
[email protected]160014da2011-05-13 19:37:4627 proxy_service_(NULL),
[email protected]9349cfb2010-08-31 18:00:5328 network_delegate_(NULL),
[email protected]db96a882011-10-09 02:01:5429 http_server_properties_(NULL),
[email protected]ee4c30d2012-11-07 15:08:4330 http_user_agent_settings_(NULL),
[email protected]70b92342010-10-12 05:54:0631 transport_security_state_(NULL),
[email protected]9bfe0ab2012-08-30 13:18:1132#if !defined(DISABLE_FTP_SUPPORT)
[email protected]ede96662011-07-14 12:34:1833 ftp_auth_cache_(new FtpAuthCache),
[email protected]9bfe0ab2012-08-30 13:18:1134#endif
[email protected]f6c21cb2011-02-16 19:45:4135 http_transaction_factory_(NULL),
[email protected]a8c1e7452011-05-14 06:17:0736 ftp_transaction_factory_(NULL),
[email protected]7c52ed92012-04-06 15:42:4037 job_factory_(NULL),
[email protected]a73a2802012-05-02 19:20:1538 throttler_manager_(NULL),
[email protected]7c52ed92012-04-06 15:42:4039 url_requests_(new std::set<const URLRequest*>) {
[email protected]9349cfb2010-08-31 18:00:5340}
[email protected]f1d81922010-07-31 17:47:0941
[email protected]ef2bf422012-05-11 03:27:0942URLRequestContext::~URLRequestContext() {
43 AssertNoURLRequests();
44}
45
[email protected]fa22a6f12012-05-11 17:19:5946void URLRequestContext::CopyFrom(const URLRequestContext* other) {
[email protected]d9696672011-03-15 22:45:0947 // Copy URLRequestContext parameters.
[email protected]fa22a6f12012-05-11 17:19:5948 set_net_log(other->net_log_);
49 set_host_resolver(other->host_resolver_);
50 set_cert_verifier(other->cert_verifier_);
51 set_server_bound_cert_service(other->server_bound_cert_service_);
52 set_fraudulent_certificate_reporter(other->fraudulent_certificate_reporter_);
53 set_http_auth_handler_factory(other->http_auth_handler_factory_);
54 set_proxy_service(other->proxy_service_);
55 set_ssl_config_service(other->ssl_config_service_);
56 set_network_delegate(other->network_delegate_);
57 set_http_server_properties(other->http_server_properties_);
58 set_cookie_store(other->cookie_store_);
59 set_transport_security_state(other->transport_security_state_);
[email protected]d9696672011-03-15 22:45:0960 // FTPAuthCache is unique per context.
[email protected]fa22a6f12012-05-11 17:19:5961 set_http_transaction_factory(other->http_transaction_factory_);
62 set_ftp_transaction_factory(other->ftp_transaction_factory_);
63 set_job_factory(other->job_factory_);
64 set_throttler_manager(other->throttler_manager_);
[email protected]ee4c30d2012-11-07 15:08:4365 set_http_user_agent_settings(other->http_user_agent_settings_);
[email protected]d9696672011-03-15 22:45:0966}
67
[email protected]c2dad292012-09-07 21:27:3568const HttpNetworkSession::Params* URLRequestContext::GetNetworkSessionParams(
69 ) const {
70 HttpTransactionFactory* transaction_factory = http_transaction_factory();
71 if (!transaction_factory)
72 return NULL;
73 HttpNetworkSession* network_session = transaction_factory->GetSession();
74 if (!network_session)
75 return NULL;
76 return &network_session->params();
77}
78
[email protected]8a26ff62012-08-24 21:49:2079URLRequest* URLRequestContext::CreateRequest(
80 const GURL& url, URLRequest::Delegate* delegate) const {
81 return new URLRequest(url, delegate, this, network_delegate_);
82}
83
[email protected]d100e44f2011-01-26 22:47:1184void URLRequestContext::set_cookie_store(CookieStore* cookie_store) {
85 cookie_store_ = cookie_store;
86}
87
[email protected]ee4c30d2012-11-07 15:08:4388std::string URLRequestContext::GetAcceptCharset() const {
89 return http_user_agent_settings_ ?
90 http_user_agent_settings_->GetAcceptCharset() : EmptyString();
91}
92
93std::string URLRequestContext::GetAcceptLanguage() const {
94 return http_user_agent_settings_ ?
95 http_user_agent_settings_->GetAcceptLanguage() : EmptyString();
96}
97
98std::string URLRequestContext::GetUserAgent(const GURL& url) const {
99 return http_user_agent_settings_ ?
100 http_user_agent_settings_->GetUserAgent(url) : EmptyString();
[email protected]f1d81922010-07-31 17:47:09101}
[email protected]9349cfb2010-08-31 18:00:53102
[email protected]1e714bba2012-04-10 17:01:05103void URLRequestContext::AssertNoURLRequests() const {
[email protected]7c52ed92012-04-06 15:42:40104 int num_requests = url_requests_->size();
105 if (num_requests != 0) {
106 // We're leaking URLRequests :( Dump the URL of the first one and record how
107 // many we leaked so we have an idea of how bad it is.
108 char url_buf[128];
109 const URLRequest* request = *url_requests_->begin();
110 base::strlcpy(url_buf, request->url().spec().c_str(), arraysize(url_buf));
[email protected]eb4ecaca2012-05-04 01:05:03111 bool has_delegate = request->has_delegate();
112 int load_flags = request->load_flags();
[email protected]4eee0452012-05-12 01:29:27113 base::debug::StackTrace stack_trace(NULL, 0);
114 if (request->stack_trace())
115 stack_trace = *request->stack_trace();
[email protected]7c52ed92012-04-06 15:42:40116 base::debug::Alias(url_buf);
117 base::debug::Alias(&num_requests);
[email protected]eb4ecaca2012-05-04 01:05:03118 base::debug::Alias(&has_delegate);
119 base::debug::Alias(&load_flags);
[email protected]4eee0452012-05-12 01:29:27120 base::debug::Alias(&stack_trace);
[email protected]1f5f8e22012-09-06 23:40:54121 CHECK(false) << "Leaked " << num_requests << " URLRequest(s). First URL: "
122 << request->url().spec().c_str() << ".";
[email protected]7c52ed92012-04-06 15:42:40123 }
[email protected]9349cfb2010-08-31 18:00:53124}
[email protected]2fb629202010-12-23 23:52:57125
[email protected]27a112c2011-01-06 04:19:30126} // namespace net