diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-18 22:58:16 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-18 22:58:16 +0000 |
commit | 30d4c02828d62976a5b02eae3362c21c76c8fdf5 (patch) | |
tree | 136b858a0dfb3c4abcc8de091db0e809243dbc19 /net | |
parent | 6f0b138353a9ec881271c9d38ae6c53071496230 (diff) | |
download | chromium_src-30d4c02828d62976a5b02eae3362c21c76c8fdf5.zip chromium_src-30d4c02828d62976a5b02eae3362c21c76c8fdf5.tar.gz chromium_src-30d4c02828d62976a5b02eae3362c21c76c8fdf5.tar.bz2 |
[SPDY] Use WeakPtr<HttpServerProperties> instead of raw pointers
This will let us better track down what is causing SpdySessions to be
accessing them after they're destroyed, since we'll have crash reports
instead of just the SyzyASAN reports.
Also use scoped_ptr<HttpServerProperties> when appropriate.
BUG=236451
TBR=ajwong@chromium.org, rtenneti@chromium.org, simonjam@chromium.org, wez@chromium.org
Review URL: https://codereview.chromium.org/19731002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212466 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
33 files changed, 119 insertions, 85 deletions
diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc index 16815c7..c939d84 100644 --- a/net/http/http_network_layer_unittest.cc +++ b/net/http/http_network_layer_unittest.cc @@ -42,7 +42,8 @@ class HttpNetworkLayerTest : public PlatformTest { session_params.transport_security_state = transport_security_state_.get(); session_params.proxy_service = proxy_service_.get(); session_params.ssl_config_service = ssl_config_service_.get(); - session_params.http_server_properties = &http_server_properties_; + session_params.http_server_properties = + http_server_properties_.GetWeakPtr(); network_session_ = new HttpNetworkSession(session_params); factory_.reset(new HttpNetworkLayer(network_session_.get())); } diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 42d6e30..3265962 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc @@ -62,7 +62,6 @@ HttpNetworkSession::Params::Params() ssl_config_service(NULL), http_auth_handler_factory(NULL), network_delegate(NULL), - http_server_properties(NULL), net_log(NULL), host_mapping_rules(NULL), force_http_pipelining(false), @@ -88,6 +87,8 @@ HttpNetworkSession::Params::Params() quic_crypto_client_stream_factory(NULL) { } +HttpNetworkSession::Params::~Params() {} + // TODO(mbelshe): Move the socket factories into HttpStreamFactory. HttpNetworkSession::HttpNetworkSession(const Params& params) : net_log_(params.net_log), diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 09ced59..c10bb14 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" #include "base/threading/non_thread_safe.h" #include "net/base/host_port_pair.h" #include "net/base/net_export.h" @@ -54,6 +55,7 @@ class NET_EXPORT HttpNetworkSession public: struct NET_EXPORT Params { Params(); + ~Params(); ClientSocketFactory* client_socket_factory; HostResolver* host_resolver; @@ -65,7 +67,7 @@ class NET_EXPORT HttpNetworkSession SSLConfigService* ssl_config_service; HttpAuthHandlerFactory* http_auth_handler_factory; NetworkDelegate* network_delegate; - HttpServerProperties* http_server_properties; + base::WeakPtr<HttpServerProperties> http_server_properties; NetLog* net_log; HostMappingRules* host_mapping_rules; bool force_http_pipelining; @@ -133,7 +135,7 @@ class NET_EXPORT HttpNetworkSession NetworkDelegate* network_delegate() { return network_delegate_; } - HttpServerProperties* http_server_properties() { + base::WeakPtr<HttpServerProperties> http_server_properties() { return http_server_properties_; } HttpStreamFactory* http_stream_factory() { @@ -180,7 +182,7 @@ class NET_EXPORT HttpNetworkSession NetLog* const net_log_; NetworkDelegate* const network_delegate_; - HttpServerProperties* const http_server_properties_; + const base::WeakPtr<HttpServerProperties> http_server_properties_; CertVerifier* const cert_verifier_; HttpAuthHandlerFactory* const http_auth_handler_factory_; bool force_http_pipelining_; diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index f0e09fa..c26564c 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -66,10 +66,11 @@ namespace net { namespace { -void ProcessAlternateProtocol(HttpStreamFactory* factory, - HttpServerProperties* http_server_properties, - const HttpResponseHeaders& headers, - const HostPortPair& http_host_port_pair) { +void ProcessAlternateProtocol( + HttpStreamFactory* factory, + const base::WeakPtr<HttpServerProperties>& http_server_properties, + const HttpResponseHeaders& headers, + const HostPortPair& http_host_port_pair) { std::string alternate_protocol_str; if (!headers.EnumerateHeader(NULL, kAlternateProtocolHeader, diff --git a/net/http/http_network_transaction_ssl_unittest.cc b/net/http/http_network_transaction_ssl_unittest.cc index 6b3c3c7..bb21849 100644 --- a/net/http/http_network_transaction_ssl_unittest.cc +++ b/net/http/http_network_transaction_ssl_unittest.cc @@ -74,7 +74,8 @@ class HttpNetworkTransactionSSLTest : public testing::Test { session_params_.client_socket_factory = &mock_socket_factory_; session_params_.host_resolver = &mock_resolver_; - session_params_.http_server_properties = &http_server_properties_; + session_params_.http_server_properties = + http_server_properties_.GetWeakPtr(); session_params_.transport_security_state = &transport_security_state_; } diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 140ed3e..e94e4a3 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -7011,7 +7011,7 @@ scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( SpdySessionDependencies* session_deps_) { scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); http_server_properties->SetAlternateProtocol( HostPortPair("host.with.alternate", 80), 443, @@ -8005,7 +8005,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); // Port must be < 1024, or the header will be ignored (since initial port was // port 80 (another restricted port). @@ -8068,7 +8068,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kUnrestrictedAlternatePort = 1024; http_server_properties->SetAlternateProtocol( @@ -8119,7 +8119,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kUnrestrictedAlternatePort = 1024; http_server_properties->SetAlternateProtocol( @@ -8167,7 +8167,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kRestrictedAlternatePort = 80; http_server_properties->SetAlternateProtocol( @@ -8216,7 +8216,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kRestrictedAlternatePort = 80; http_server_properties->SetAlternateProtocol( @@ -8264,7 +8264,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kUnrestrictedAlternatePort = 1024; http_server_properties->SetAlternateProtocol( @@ -8308,7 +8308,7 @@ TEST_P(HttpNetworkTransactionTest, scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session->http_server_properties(); const int kUnsafePort = 7; http_server_properties->SetAlternateProtocol( diff --git a/net/http/http_pipelined_host_pool.cc b/net/http/http_pipelined_host_pool.cc index b8fec2a..ee37e74 100644 --- a/net/http/http_pipelined_host_pool.cc +++ b/net/http/http_pipelined_host_pool.cc @@ -33,7 +33,7 @@ class HttpPipelinedHostImplFactory : public HttpPipelinedHost::Factory { HttpPipelinedHostPool::HttpPipelinedHostPool( Delegate* delegate, HttpPipelinedHost::Factory* factory, - HttpServerProperties* http_server_properties, + const base::WeakPtr<HttpServerProperties>& http_server_properties, bool force_pipelining) : delegate_(delegate), factory_(factory), diff --git a/net/http/http_pipelined_host_pool.h b/net/http/http_pipelined_host_pool.h index 3ab9418..45cb38c 100644 --- a/net/http/http_pipelined_host_pool.h +++ b/net/http/http_pipelined_host_pool.h @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "net/http/http_pipelined_host.h" #include "net/http/http_pipelined_host_capability.h" @@ -37,10 +38,11 @@ class NET_EXPORT_PRIVATE HttpPipelinedHostPool HttpPipelinedHost* host) = 0; }; - HttpPipelinedHostPool(Delegate* delegate, - HttpPipelinedHost::Factory* factory, - HttpServerProperties* http_server_properties_, - bool force_pipelining); + HttpPipelinedHostPool( + Delegate* delegate, + HttpPipelinedHost::Factory* factory, + const base::WeakPtr<HttpServerProperties>& http_server_properties, + bool force_pipelining); virtual ~HttpPipelinedHostPool(); // Returns true if pipelining might work for |key|. Generally, this returns @@ -89,7 +91,7 @@ class NET_EXPORT_PRIVATE HttpPipelinedHostPool Delegate* delegate_; scoped_ptr<HttpPipelinedHost::Factory> factory_; HostMap host_map_; - HttpServerProperties* http_server_properties_; + const base::WeakPtr<HttpServerProperties> http_server_properties_; bool force_pipelining_; DISALLOW_COPY_AND_ASSIGN(HttpPipelinedHostPool); diff --git a/net/http/http_pipelined_host_pool_unittest.cc b/net/http/http_pipelined_host_pool_unittest.cc index 8413e26..fa8d93f 100644 --- a/net/http/http_pipelined_host_pool_unittest.cc +++ b/net/http/http_pipelined_host_pool_unittest.cc @@ -73,9 +73,10 @@ class HttpPipelinedHostPoolTest : public testing::Test { : key_(HostPortPair("host", 123)), factory_(new MockHostFactory), // Owned by pool_. host_(new MockHost(key_)), // Owned by pool_. - http_server_properties_(new HttpServerPropertiesImpl), - pool_(new HttpPipelinedHostPool(&delegate_, factory_, - http_server_properties_.get(), false)), + http_server_properties_(new HttpServerPropertiesImpl()), + pool_(new HttpPipelinedHostPool( + &delegate_, factory_, + http_server_properties_->GetWeakPtr(), false)), was_npn_negotiated_(false), protocol_negotiated_(kProtoUnknown) { } diff --git a/net/http/http_pipelined_network_transaction_unittest.cc b/net/http/http_pipelined_network_transaction_unittest.cc index af620b31..80b74fd 100644 --- a/net/http/http_pipelined_network_transaction_unittest.cc +++ b/net/http/http_pipelined_network_transaction_unittest.cc @@ -87,7 +87,8 @@ class HttpPipelinedNetworkTransactionTest : public testing::Test { session_params.host_resolver = &mock_resolver_; session_params.ssl_config_service = ssl_config_.get(); session_params.http_auth_handler_factory = auth_handler_factory_.get(); - session_params.http_server_properties = &http_server_properties_; + session_params.http_server_properties = + http_server_properties_.GetWeakPtr(); session_params.force_http_pipelining = force_http_pipelining; session_params.http_pipelining_enabled = true; session_ = new HttpNetworkSession(session_params); diff --git a/net/http/http_response_body_drainer_unittest.cc b/net/http/http_response_body_drainer_unittest.cc index faff989..5d9fcc4 100644 --- a/net/http/http_response_body_drainer_unittest.cc +++ b/net/http/http_response_body_drainer_unittest.cc @@ -209,7 +209,7 @@ class HttpResponseBodyDrainerTest : public testing::Test { HttpResponseBodyDrainerTest() : proxy_service_(ProxyService::CreateDirect()), ssl_config_service_(new SSLConfigServiceDefaults), - http_server_properties_(new HttpServerPropertiesImpl), + http_server_properties_(new HttpServerPropertiesImpl()), session_(CreateNetworkSession()), mock_stream_(new MockHttpStream(&result_waiter_)), drainer_(new HttpResponseBodyDrainer(mock_stream_)) {} @@ -220,7 +220,7 @@ class HttpResponseBodyDrainerTest : public testing::Test { HttpNetworkSession::Params params; params.proxy_service = proxy_service_.get(); params.ssl_config_service = ssl_config_service_.get(); - params.http_server_properties = http_server_properties_.get(); + params.http_server_properties = http_server_properties_->GetWeakPtr(); return new HttpNetworkSession(params); } diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h index 7217ab7..d75548a 100644 --- a/net/http/http_server_properties.h +++ b/net/http/http_server_properties.h @@ -8,6 +8,7 @@ #include <map> #include <string> #include "base/basictypes.h" +#include "base/memory/weak_ptr.h" #include "net/base/host_port_pair.h" #include "net/base/net_export.h" #include "net/http/http_pipelined_host_capability.h" @@ -62,6 +63,9 @@ class NET_EXPORT HttpServerProperties { HttpServerProperties() {} virtual ~HttpServerProperties() {} + // Gets a weak pointer for this object. + virtual base::WeakPtr<HttpServerProperties> GetWeakPtr() = 0; + // Deletes all data. virtual void Clear() = 0; diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc index f56dea8..a0b287d 100644 --- a/net/http/http_server_properties_impl.cc +++ b/net/http/http_server_properties_impl.cc @@ -18,7 +18,8 @@ namespace net { static const int kDefaultNumHostsToRemember = 200; HttpServerPropertiesImpl::HttpServerPropertiesImpl() - : pipeline_capability_map_( + : weak_ptr_factory_(this), + pipeline_capability_map_( new CachedPipelineCapabilityMap(kDefaultNumHostsToRemember)) { } @@ -112,6 +113,10 @@ void HttpServerPropertiesImpl::DisableForcedAlternateProtocol() { g_forced_alternate_protocol = NULL; } +base::WeakPtr<HttpServerProperties> HttpServerPropertiesImpl::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); +} + void HttpServerPropertiesImpl::Clear() { DCHECK(CalledOnValidThread()); spdy_servers_table_.clear(); diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h index 182038f..c1e2d4b 100644 --- a/net/http/http_server_properties_impl.h +++ b/net/http/http_server_properties_impl.h @@ -73,6 +73,9 @@ class NET_EXPORT HttpServerPropertiesImpl // HttpServerProperties methods: // ----------------------------- + // Gets a weak pointer for this object. + virtual base::WeakPtr<HttpServerProperties> GetWeakPtr() OVERRIDE; + // Deletes all data. virtual void Clear() OVERRIDE; @@ -141,6 +144,9 @@ class NET_EXPORT HttpServerPropertiesImpl // |spdy_servers_table_| has flattened representation of servers (host/port // pair) that either support or not support SPDY protocol. typedef base::hash_map<std::string, bool> SpdyServerHostPortTable; + + base::WeakPtrFactory<HttpServerPropertiesImpl> weak_ptr_factory_; + SpdyServerHostPortTable spdy_servers_table_; AlternateProtocolMap alternate_protocol_map_; diff --git a/net/http/http_stream_factory.cc b/net/http/http_stream_factory.cc index 6d2e140..0561c34 100644 --- a/net/http/http_stream_factory.cc +++ b/net/http/http_stream_factory.cc @@ -49,7 +49,7 @@ void HttpStreamFactory::ResetStaticSettingsToInit() { } void HttpStreamFactory::ProcessAlternateProtocol( - HttpServerProperties* http_server_properties, + const base::WeakPtr<HttpServerProperties>& http_server_properties, const std::string& alternate_protocol_str, const HostPortPair& http_host_port_pair) { std::vector<std::string> port_protocol_vector; diff --git a/net/http/http_stream_factory.h b/net/http/http_stream_factory.h index bef3b5d..79ca388 100644 --- a/net/http/http_stream_factory.h +++ b/net/http/http_stream_factory.h @@ -176,7 +176,7 @@ class NET_EXPORT HttpStreamFactory { virtual ~HttpStreamFactory(); void ProcessAlternateProtocol( - HttpServerProperties* http_server_properties, + const base::WeakPtr<HttpServerProperties>& http_server_properties, const std::string& alternate_protocol_str, const HostPortPair& http_host_port_pair); diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc index da0b456..937d7db 100644 --- a/net/http/http_stream_factory_impl_job.cc +++ b/net/http/http_stream_factory_impl_job.cc @@ -141,7 +141,7 @@ int HttpStreamFactoryImpl::Job::Preconnect(int num_streams) { HostPortPair origin_server = HostPortPair(request_info_.url.HostNoBrackets(), request_info_.url.EffectiveIntPort()); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session_->http_server_properties(); if (http_server_properties && http_server_properties->SupportsSpdy(origin_server)) { @@ -1118,7 +1118,7 @@ int HttpStreamFactoryImpl::Job::DoCreateStream() { if (error != OK) return error; const HostPortPair& host_port_pair = spdy_session_key.host_port_pair(); - HttpServerProperties* http_server_properties = + base::WeakPtr<HttpServerProperties> http_server_properties = session_->http_server_properties(); if (http_server_properties) http_server_properties->SetSupportsSpdy(host_port_pair, true); diff --git a/net/proxy/proxy_script_fetcher_impl_unittest.cc b/net/proxy/proxy_script_fetcher_impl_unittest.cc index 92a5dc1..8d42514 100644 --- a/net/proxy/proxy_script_fetcher_impl_unittest.cc +++ b/net/proxy/proxy_script_fetcher_impl_unittest.cc @@ -56,7 +56,8 @@ class RequestContext : public URLRequestContext { storage_.set_transport_security_state(new TransportSecurityState); storage_.set_proxy_service(ProxyService::CreateFixed(no_proxy)); storage_.set_ssl_config_service(new SSLConfigServiceDefaults); - storage_.set_http_server_properties(new HttpServerPropertiesImpl); + storage_.set_http_server_properties( + scoped_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); HttpNetworkSession::Params params; params.host_resolver = host_resolver(); diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc index 69ac658..4a99afc 100644 --- a/net/quic/quic_network_transaction_unittest.cc +++ b/net/quic/quic_network_transaction_unittest.cc @@ -229,7 +229,7 @@ class QuicNetworkTransactionTest : public PlatformTest { params_.proxy_service = proxy_service_.get(); params_.ssl_config_service = ssl_config_service_.get(); params_.http_auth_handler_factory = auth_handler_factory_.get(); - params_.http_server_properties = &http_server_properties; + params_.http_server_properties = http_server_properties.GetWeakPtr(); session_ = new HttpNetworkSession(params_); } diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc index 641bd83..4652de8 100644 --- a/net/socket/ssl_client_socket_pool_unittest.cc +++ b/net/socket/ssl_client_socket_pool_unittest.cc @@ -185,7 +185,8 @@ class SSLClientSocketPoolTest : public testing::Test { params.client_socket_factory = &socket_factory_; params.ssl_config_service = ssl_config_service_.get(); params.http_auth_handler_factory = http_auth_handler_factory_.get(); - params.http_server_properties = &http_server_properties_; + params.http_server_properties = + http_server_properties_.GetWeakPtr(); params.enable_spdy_compression = false; return new HttpNetworkSession(params); } diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 468feeb..d582453 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -333,20 +333,21 @@ SpdySession::PushedStreamInfo::PushedStreamInfo( SpdySession::PushedStreamInfo::~PushedStreamInfo() {} -SpdySession::SpdySession(const SpdySessionKey& spdy_session_key, - HttpServerProperties* http_server_properties, - bool verify_domain_authentication, - bool enable_sending_initial_settings, - bool enable_credential_frames, - bool enable_compression, - bool enable_ping_based_connection_checking, - NextProto default_protocol, - size_t stream_initial_recv_window_size, - size_t initial_max_concurrent_streams, - size_t max_concurrent_streams_limit, - TimeFunc time_func, - const HostPortPair& trusted_spdy_proxy, - NetLog* net_log) +SpdySession::SpdySession( + const SpdySessionKey& spdy_session_key, + const base::WeakPtr<HttpServerProperties>& http_server_properties, + bool verify_domain_authentication, + bool enable_sending_initial_settings, + bool enable_credential_frames, + bool enable_compression, + bool enable_ping_based_connection_checking, + NextProto default_protocol, + size_t stream_initial_recv_window_size, + size_t initial_max_concurrent_streams, + size_t max_concurrent_streams_limit, + TimeFunc time_func, + const HostPortPair& trusted_spdy_proxy, + NetLog* net_log) : weak_factory_(this), spdy_session_key_(spdy_session_key), spdy_session_pool_(NULL), diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index 2fbb01a..7077662 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h @@ -202,7 +202,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, // |session| is the HttpNetworkSession. |net_log| is the NetLog that we log // network events to. SpdySession(const SpdySessionKey& spdy_session_key, - HttpServerProperties* http_server_properties, + const base::WeakPtr<HttpServerProperties>& http_server_properties, bool verify_domain_authentication, bool enable_sending_initial_settings, bool enable_credential_frames, @@ -843,7 +843,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, // |spdy_session_pool_| owns us, therefore its lifetime must exceed ours. We // set this to NULL after we are removed from the pool. SpdySessionPool* spdy_session_pool_; - HttpServerProperties* const http_server_properties_; + const base::WeakPtr<HttpServerProperties> http_server_properties_; // The socket handle for this session. scoped_ptr<ClientSocketHandle> connection_; diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc index 7c7e76c..19d1bbd 100644 --- a/net/spdy/spdy_session_pool.cc +++ b/net/spdy/spdy_session_pool.cc @@ -30,7 +30,7 @@ enum SpdySessionGetTypes { SpdySessionPool::SpdySessionPool( HostResolver* resolver, SSLConfigService* ssl_config_service, - HttpServerProperties* http_server_properties, + const base::WeakPtr<HttpServerProperties>& http_server_properties, bool force_single_domain, bool enable_ip_pooling, bool enable_credential_frames, diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h index 7152527..a756234 100644 --- a/net/spdy/spdy_session_pool.h +++ b/net/spdy/spdy_session_pool.h @@ -12,6 +12,7 @@ #include "base/basictypes.h" #include "base/gtest_prod_util.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" #include "net/base/host_port_pair.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h" @@ -41,20 +42,21 @@ class NET_EXPORT SpdySessionPool public: typedef base::TimeTicks (*TimeFunc)(void); - SpdySessionPool(HostResolver* host_resolver, - SSLConfigService* ssl_config_service, - HttpServerProperties* http_server_properties, - bool force_single_domain, - bool enable_ip_pooling, - bool enable_credential_frames, - bool enable_compression, - bool enable_ping_based_connection_checking, - NextProto default_protocol, - size_t stream_initial_recv_window_size, - size_t initial_max_concurrent_streams, - size_t max_concurrent_streams_limit, - SpdySessionPool::TimeFunc time_func, - const std::string& trusted_spdy_proxy); + SpdySessionPool( + HostResolver* host_resolver, + SSLConfigService* ssl_config_service, + const base::WeakPtr<HttpServerProperties>& http_server_properties, + bool force_single_domain, + bool enable_ip_pooling, + bool enable_credential_frames, + bool enable_compression, + bool enable_ping_based_connection_checking, + NextProto default_protocol, + size_t stream_initial_recv_window_size, + size_t initial_max_concurrent_streams, + size_t max_concurrent_streams_limit, + SpdySessionPool::TimeFunc time_func, + const std::string& trusted_spdy_proxy); virtual ~SpdySessionPool(); // In the functions below, a session is "available" if this pool has @@ -118,7 +120,7 @@ class NET_EXPORT SpdySessionPool // responsible for deleting the returned value. base::Value* SpdySessionPoolInfoToValue() const; - HttpServerProperties* http_server_properties() { + base::WeakPtr<HttpServerProperties> http_server_properties() { return http_server_properties_; } @@ -177,7 +179,7 @@ class NET_EXPORT SpdySessionPool const std::string& description, bool idle_only); - HttpServerProperties* const http_server_properties_; + const base::WeakPtr<HttpServerProperties> http_server_properties_; // The set of all sessions. This is a superset of the sessions in // |available_sessions_|. diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index 427eefc..1a1cd57 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc @@ -842,7 +842,7 @@ TEST_P(SpdySessionTest, SendSettingsOnNewSession) { TEST_P(SpdySessionTest, ClearSettingsStorageOnIPAddressChanged) { CreateNetworkSession(); - HttpServerProperties* test_http_server_properties = + base::WeakPtr<HttpServerProperties> test_http_server_properties = spdy_session_pool_->http_server_properties(); SettingsFlagsAndValue flags_and_value1(SETTINGS_FLAG_PLEASE_PERSIST, 2); test_http_server_properties->SetSpdySetting( diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 5ff731b..d8712cb 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc @@ -431,7 +431,8 @@ net::HttpNetworkSession::Params SpdySessionDependencies::CreateSessionParams( params.ssl_config_service = session_deps->ssl_config_service.get(); params.http_auth_handler_factory = session_deps->http_auth_handler_factory.get(); - params.http_server_properties = &session_deps->http_server_properties; + params.http_server_properties = + session_deps->http_server_properties.GetWeakPtr(); params.enable_spdy_compression = session_deps->enable_compression; params.enable_spdy_ping_based_connection_checking = session_deps->enable_ping; params.enable_user_alternate_protocol_ports = @@ -456,7 +457,8 @@ SpdyURLRequestContext::SpdyURLRequestContext(NextProto protocol) storage_.set_ssl_config_service(new SSLConfigServiceDefaults); storage_.set_http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault( host_resolver())); - storage_.set_http_server_properties(new HttpServerPropertiesImpl); + storage_.set_http_server_properties( + scoped_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); net::HttpNetworkSession::Params params; params.client_socket_factory = &socket_factory_; params.host_resolver = host_resolver(); diff --git a/net/tools/fetch/fetch_client.cc b/net/tools/fetch/fetch_client.cc index 8deb492..f0bec35 100644 --- a/net/tools/fetch/fetch_client.cc +++ b/net/tools/fetch/fetch_client.cc @@ -164,7 +164,7 @@ int main(int argc, char** argv) { session_params.transport_security_state = transport_security_state.get(); session_params.proxy_service = proxy_service.get(); session_params.http_auth_handler_factory = http_auth_handler_factory.get(); - session_params.http_server_properties = &http_server_properties; + session_params.http_server_properties = http_server_properties.GetWeakPtr(); session_params.ssl_config_service = ssl_config_service.get(); scoped_refptr<net::HttpNetworkSession> network_session( diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc index 405d476..45ac83f 100644 --- a/net/url_request/url_request_context.cc +++ b/net/url_request/url_request_context.cc @@ -25,7 +25,6 @@ URLRequestContext::URLRequestContext() http_auth_handler_factory_(NULL), proxy_service_(NULL), network_delegate_(NULL), - http_server_properties_(NULL), http_user_agent_settings_(NULL), transport_security_state_(NULL), http_transaction_factory_(NULL), diff --git a/net/url_request/url_request_context.h b/net/url_request/url_request_context.h index 53da67d..bf9921e 100644 --- a/net/url_request/url_request_context.h +++ b/net/url_request/url_request_context.h @@ -137,10 +137,10 @@ class NET_EXPORT URLRequestContext NetworkDelegate* network_delegate() const { return network_delegate_; } void set_http_server_properties( - HttpServerProperties* http_server_properties) { + const base::WeakPtr<HttpServerProperties>& http_server_properties) { http_server_properties_ = http_server_properties; } - HttpServerProperties* http_server_properties() const { + base::WeakPtr<HttpServerProperties> http_server_properties() const { return http_server_properties_; } @@ -216,7 +216,7 @@ class NET_EXPORT URLRequestContext ProxyService* proxy_service_; scoped_refptr<SSLConfigService> ssl_config_service_; NetworkDelegate* network_delegate_; - HttpServerProperties* http_server_properties_; + base::WeakPtr<HttpServerProperties> http_server_properties_; HttpUserAgentSettings* http_user_agent_settings_; scoped_refptr<CookieStore> cookie_store_; TransportSecurityState* transport_security_state_; diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index 39680f8..540dfc1 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc @@ -237,7 +237,9 @@ URLRequestContext* URLRequestContextBuilder::Build() { context->host_resolver())); storage->set_cookie_store(new CookieMonster(NULL, NULL)); storage->set_transport_security_state(new net::TransportSecurityState()); - storage->set_http_server_properties(new net::HttpServerPropertiesImpl); + storage->set_http_server_properties( + scoped_ptr<net::HttpServerProperties>( + new net::HttpServerPropertiesImpl())); storage->set_cert_verifier(CertVerifier::CreateDefault()); net::HttpNetworkSession::Params network_session_params; diff --git a/net/url_request/url_request_context_storage.cc b/net/url_request/url_request_context_storage.cc index e3d84b47..2bb508c 100644 --- a/net/url_request/url_request_context_storage.cc +++ b/net/url_request/url_request_context_storage.cc @@ -84,9 +84,9 @@ void URLRequestContextStorage::set_network_delegate( } void URLRequestContextStorage::set_http_server_properties( - HttpServerProperties* http_server_properties) { - context_->set_http_server_properties(http_server_properties); - http_server_properties_.reset(http_server_properties); + scoped_ptr<HttpServerProperties> http_server_properties) { + http_server_properties_ = http_server_properties.Pass(); + context_->set_http_server_properties(http_server_properties_->GetWeakPtr()); } void URLRequestContextStorage::set_cookie_store(CookieStore* cookie_store) { diff --git a/net/url_request/url_request_context_storage.h b/net/url_request/url_request_context_storage.h index 0a9d066..9c25f3e 100644 --- a/net/url_request/url_request_context_storage.h +++ b/net/url_request/url_request_context_storage.h @@ -56,7 +56,8 @@ class NET_EXPORT URLRequestContextStorage { void set_proxy_service(ProxyService* proxy_service); void set_ssl_config_service(SSLConfigService* ssl_config_service); void set_network_delegate(NetworkDelegate* network_delegate); - void set_http_server_properties(HttpServerProperties* http_server_properties); + void set_http_server_properties( + scoped_ptr<HttpServerProperties> http_server_properties); void set_cookie_store(CookieStore* cookie_store); void set_transport_security_state( TransportSecurityState* transport_security_state); diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 1a6757d..8b209f9 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc @@ -83,7 +83,7 @@ void TestURLRequestContext::Init() { } if (!http_server_properties()) { context_storage_.set_http_server_properties( - new HttpServerPropertiesImpl); + scoped_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); } if (!transport_security_state()) { context_storage_.set_transport_security_state( |