diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-18 03:58:09 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-18 03:58:09 +0000 |
commit | 80d6524d33061e0e4f7b06dd87ee94de3e05c7a8 (patch) | |
tree | 05719af6d66e6a107aeb056a020645ae0f483e82 /net/http | |
parent | 22cdd93852c8f0782cb86b066cfcd95a9121912b (diff) | |
download | chromium_src-80d6524d33061e0e4f7b06dd87ee94de3e05c7a8.zip chromium_src-80d6524d33061e0e4f7b06dd87ee94de3e05c7a8.tar.gz chromium_src-80d6524d33061e0e4f7b06dd87ee94de3e05c7a8.tar.bz2 |
Reference count ProxyService.
This is necessary since ProxyService is getting shared between chrome's url request contexts (off the record, media), and the current way it is being shared could result in free memory read/writes during shutdown.
This is a step towards fixing http://crbug.com/15289.
BUG=http://crbug.com/15289
TEST=The existing tests should continue to pass following this refactor.
Review URL: http://codereview.chromium.org/165430
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23612 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http')
-rw-r--r-- | net/http/http_network_layer.cc | 5 | ||||
-rw-r--r-- | net/http/http_network_layer.h | 7 | ||||
-rw-r--r-- | net/http/http_network_layer_unittest.cc | 9 | ||||
-rw-r--r-- | net/http/http_network_session.h | 6 | ||||
-rw-r--r-- | net/http/http_network_transaction_unittest.cc | 29 |
5 files changed, 24 insertions, 32 deletions
diff --git a/net/http/http_network_layer.cc b/net/http/http_network_layer.cc index 6c3829e..9d1509d 100644 --- a/net/http/http_network_layer.cc +++ b/net/http/http_network_layer.cc @@ -46,8 +46,6 @@ HttpNetworkLayer::HttpNetworkLayer(ClientSocketFactory* socket_factory, HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session) : socket_factory_(ClientSocketFactory::GetDefaultFactory()), - host_resolver_(NULL), - proxy_service_(NULL), session_(session), suspended_(false) { DCHECK(session_.get()); @@ -79,6 +77,9 @@ HttpNetworkSession* HttpNetworkLayer::GetSession() { DCHECK(proxy_service_); session_ = new HttpNetworkSession(host_resolver_, proxy_service_, socket_factory_); + // These were just temps for lazy-initializing HttpNetworkSession. + host_resolver_ = NULL; + proxy_service_ = NULL; } return session_; } diff --git a/net/http/http_network_layer.h b/net/http/http_network_layer.h index b4b430f..bd3cb68 100644 --- a/net/http/http_network_layer.h +++ b/net/http/http_network_layer.h @@ -51,11 +51,10 @@ class HttpNetworkLayer : public HttpTransactionFactory { // The factory we will use to create network sockets. ClientSocketFactory* socket_factory_; - // The host resolver being used for the session. + // The host resolver and proxy service that will used when lazily + // creating |session_|. scoped_refptr<HostResolver> host_resolver_; - - // The proxy service being used for the session. - ProxyService* proxy_service_; + scoped_refptr<ProxyService> proxy_service_; scoped_refptr<HttpNetworkSession> session_; bool suspended_; diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc index d70aa65..0d32335 100644 --- a/net/http/http_network_layer_unittest.cc +++ b/net/http/http_network_layer_unittest.cc @@ -14,17 +14,15 @@ class HttpNetworkLayerTest : public PlatformTest { }; TEST_F(HttpNetworkLayerTest, CreateAndDestroy) { - scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull()); net::HttpNetworkLayer factory( - NULL, new net::MockHostResolver, proxy_service.get()); + NULL, new net::MockHostResolver, net::ProxyService::CreateNull()); scoped_ptr<net::HttpTransaction> trans(factory.CreateTransaction()); } TEST_F(HttpNetworkLayerTest, Suspend) { - scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull()); net::HttpNetworkLayer factory( - NULL, new net::MockHostResolver, proxy_service.get()); + NULL, new net::MockHostResolver, net::ProxyService::CreateNull()); scoped_ptr<net::HttpTransaction> trans(factory.CreateTransaction()); trans.reset(); @@ -55,9 +53,8 @@ TEST_F(HttpNetworkLayerTest, GET) { net::StaticMockSocket data(data_reads, data_writes); mock_socket_factory.AddMockSocket(&data); - scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull()); net::HttpNetworkLayer factory(&mock_socket_factory, new net::MockHostResolver, - proxy_service.get()); + net::ProxyService::CreateNull()); TestCompletionCallback callback; diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 487ade4..9e867d7 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h @@ -6,16 +6,16 @@ #define NET_HTTP_HTTP_NETWORK_SESSION_H_ #include "base/ref_counted.h" +#include "net/base/host_resolver.h" #include "net/base/ssl_client_auth_cache.h" #include "net/base/ssl_config_service.h" #include "net/http/http_auth_cache.h" +#include "net/proxy/proxy_service.h" #include "net/socket/tcp_client_socket_pool.h" namespace net { class ClientSocketFactory; -class HostResolver; -class ProxyService; // This class holds session objects used by HttpNetworkTransaction objects. class HttpNetworkSession : public base::RefCounted<HttpNetworkSession> { @@ -51,7 +51,7 @@ class HttpNetworkSession : public base::RefCounted<HttpNetworkSession> { SSLClientAuthCache ssl_client_auth_cache_; scoped_refptr<ClientSocketPool> connection_pool_; scoped_refptr<HostResolver> host_resolver_; - ProxyService* proxy_service_; + scoped_refptr<ProxyService> proxy_service_; #if defined(OS_WIN) // TODO(port): Port the SSLConfigService class to Linux and Mac OS X. SSLConfigService ssl_config_service_; diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index e298f64..ac10c99 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -43,7 +43,7 @@ class SessionDependencies { : host_resolver(new MockHostResolver), proxy_service(proxy_service) {} scoped_refptr<MockHostResolverBase> host_resolver; - scoped_ptr<ProxyService> proxy_service; + scoped_refptr<ProxyService> proxy_service; MockClientSocketFactory socket_factory; }; @@ -56,7 +56,7 @@ ProxyService* CreateFixedProxyService(const std::string& proxy) { HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { return new HttpNetworkSession(session_deps->host_resolver, - session_deps->proxy_service.get(), + session_deps->proxy_service, &session_deps->socket_factory); } @@ -3053,9 +3053,8 @@ TEST_F(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { } TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { - SessionDependencies session_deps; - session_deps.proxy_service.reset(CreateFixedProxyService( - "socks4://myproxy:1080")); + SessionDependencies session_deps( + CreateFixedProxyService("socks4://myproxy:1080")); scoped_ptr<HttpTransaction> trans( new HttpNetworkTransaction( @@ -3106,9 +3105,8 @@ TEST_F(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { } TEST_F(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { - SessionDependencies session_deps; - session_deps.proxy_service.reset(CreateFixedProxyService( - "socks4://myproxy:1080")); + SessionDependencies session_deps( + CreateFixedProxyService("socks4://myproxy:1080")); scoped_ptr<HttpTransaction> trans( new HttpNetworkTransaction( @@ -3164,9 +3162,8 @@ TEST_F(HttpNetworkTransactionTest, SOCKS4_SSL_GET) { } TEST_F(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { - SessionDependencies session_deps; - session_deps.proxy_service.reset(CreateFixedProxyService( - "socks5://myproxy:1080")); + SessionDependencies session_deps( + CreateFixedProxyService("socks5://myproxy:1080")); scoped_ptr<HttpTransaction> trans( new HttpNetworkTransaction( @@ -3223,9 +3220,8 @@ TEST_F(HttpNetworkTransactionTest, SOCKS5_HTTP_GET) { } TEST_F(HttpNetworkTransactionTest, SOCKS5_SSL_GET) { - SessionDependencies session_deps; - session_deps.proxy_service.reset(CreateFixedProxyService( - "socks5://myproxy:1080")); + SessionDependencies session_deps( + CreateFixedProxyService("socks5://myproxy:1080")); scoped_ptr<HttpTransaction> trans( new HttpNetworkTransaction( @@ -3327,9 +3323,8 @@ TEST_F(HttpNetworkTransactionTest, GroupNameForProxyConnections) { }; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { - SessionDependencies session_deps; - session_deps.proxy_service.reset(CreateFixedProxyService( - tests[i].proxy_server)); + SessionDependencies session_deps( + CreateFixedProxyService(tests[i].proxy_server)); scoped_refptr<CaptureGroupNameSocketPool> conn_pool( new CaptureGroupNameSocketPool()); |