url_request_context.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// Use of this source code is governed by a BSD-style license that can be 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// found in the LICENSE file. 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/url_request/url_request_context.h" 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/compiler_specific.h" 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/debug/alias.h" 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/debug/stack_trace.h" 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/strings/string_util.h" 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/cookies/cookie_store.h" 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/dns/host_resolver.h" 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/http/http_transaction_factory.h" 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/url_request/http_user_agent_settings.h" 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "net/url_request/url_request.h" 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgnamespace net { 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgURLRequestContext::URLRequestContext() 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org : net_log_(NULL), 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org host_resolver_(NULL), 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cert_verifier_(NULL), 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org channel_id_service_(NULL), 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org fraudulent_certificate_reporter_(NULL), 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org http_auth_handler_factory_(NULL), 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org proxy_service_(NULL), 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org network_delegate_(NULL), 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org http_user_agent_settings_(NULL), 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org transport_security_state_(NULL), 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cert_transparency_verifier_(NULL), 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org http_transaction_factory_(NULL), 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org job_factory_(NULL), 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org throttler_manager_(NULL), 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sdch_manager_(NULL), 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org url_requests_(new std::set<const URLRequest*>) { 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgURLRequestContext::~URLRequestContext() { 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org AssertNoURLRequests(); 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid URLRequestContext::CopyFrom(const URLRequestContext* other) { 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org // Copy URLRequestContext parameters. 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_net_log(other->net_log_); 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_host_resolver(other->host_resolver_); 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_cert_verifier(other->cert_verifier_); 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_channel_id_service(other->channel_id_service_); 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_fraudulent_certificate_reporter(other->fraudulent_certificate_reporter_); 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_http_auth_handler_factory(other->http_auth_handler_factory_); 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_proxy_service(other->proxy_service_); 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_ssl_config_service(other->ssl_config_service_.get()); 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_network_delegate(other->network_delegate_); 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_http_server_properties(other->http_server_properties_); 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_cookie_store(other->cookie_store_.get()); 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_transport_security_state(other->transport_security_state_); 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_cert_transparency_verifier(other->cert_transparency_verifier_); 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_http_transaction_factory(other->http_transaction_factory_); 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_job_factory(other->job_factory_); 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_throttler_manager(other->throttler_manager_); 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_sdch_manager(other->sdch_manager_); 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org set_http_user_agent_settings(other->http_user_agent_settings_); 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgconst HttpNetworkSession::Params* URLRequestContext::GetNetworkSessionParams( 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ) const { 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org HttpTransactionFactory* transaction_factory = http_transaction_factory(); 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (!transaction_factory) 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org return NULL; 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org HttpNetworkSession* network_session = transaction_factory->GetSession(); 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (!network_session) 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org return NULL; 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org return &network_session->params(); 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgscoped_ptr<URLRequest> URLRequestContext::CreateRequest( 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org const GURL& url, 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org RequestPriority priority, 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org URLRequest::Delegate* delegate, 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org CookieStore* cookie_store) const { 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org return scoped_ptr<URLRequest>( 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org new URLRequest(url, priority, delegate, this, cookie_store, 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org network_delegate_)); 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid URLRequestContext::set_cookie_store(CookieStore* cookie_store) { 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cookie_store_ = cookie_store; 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid URLRequestContext::AssertNoURLRequests() const { 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int num_requests = url_requests_->size(); 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (num_requests != 0) { 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org // We're leaking URLRequests :( Dump the URL of the first one and record how 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org // many we leaked so we have an idea of how bad it is. 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org char url_buf[128]; 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org const URLRequest* request = *url_requests_->begin(); 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::strlcpy(url_buf, request->url().spec().c_str(), arraysize(url_buf)); 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org bool has_delegate = request->has_delegate(); 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int load_flags = request->load_flags(); 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::StackTrace stack_trace(NULL, 0); 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (request->stack_trace()) 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org stack_trace = *request->stack_trace(); 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::Alias(url_buf); 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::Alias(&num_requests); 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::Alias(&has_delegate); 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::Alias(&load_flags); 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org base::debug::Alias(&stack_trace); 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org CHECK(false) << "Leaked " << num_requests << " URLRequest(s). First URL: " 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org << request->url().spec().c_str() << "."; 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} // namespace net 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org