summaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
Diffstat (limited to 'net/http')
-rw-r--r--net/http/http_network_layer.cc17
-rw-r--r--net/http/http_network_layer.h2
-rw-r--r--net/http/http_network_session.h8
-rw-r--r--net/http/http_network_session_peer.h78
-rw-r--r--net/http/http_network_transaction_unittest.cc62
-rw-r--r--net/http/http_stream_request.cc3
6 files changed, 98 insertions, 72 deletions
diff --git a/net/http/http_network_layer.cc b/net/http/http_network_layer.cc
index 65d2aa3..a883db2 100644
--- a/net/http/http_network_layer.cc
+++ b/net/http/http_network_layer.cc
@@ -94,7 +94,7 @@ HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session)
: socket_factory_(ClientSocketFactory::GetDefaultFactory()),
ssl_config_service_(NULL),
session_(session),
- spdy_session_pool_(session->spdy_session_pool()),
+ spdy_session_pool_(NULL),
http_auth_handler_factory_(NULL),
network_delegate_(NULL),
net_log_(NULL),
@@ -127,10 +127,17 @@ void HttpNetworkLayer::Suspend(bool suspend) {
HttpNetworkSession* HttpNetworkLayer::GetSession() {
if (!session_) {
DCHECK(proxy_service_);
- SpdySessionPool* spdy_pool = new SpdySessionPool(ssl_config_service_);
- session_ = new HttpNetworkSession(host_resolver_, proxy_service_,
- socket_factory_, ssl_config_service_, spdy_pool,
- http_auth_handler_factory_, network_delegate_, net_log_);
+ if (!spdy_session_pool_.get())
+ spdy_session_pool_.reset(new SpdySessionPool(ssl_config_service_));
+ session_ = new HttpNetworkSession(
+ host_resolver_,
+ proxy_service_,
+ socket_factory_,
+ ssl_config_service_,
+ spdy_session_pool_.release(),
+ http_auth_handler_factory_,
+ network_delegate_,
+ net_log_);
// These were just temps for lazy-initializing HttpNetworkSession.
host_resolver_ = NULL;
proxy_service_ = NULL;
diff --git a/net/http/http_network_layer.h b/net/http/http_network_layer.h
index f4ce1f1..9d8b838 100644
--- a/net/http/http_network_layer.h
+++ b/net/http/http_network_layer.h
@@ -97,7 +97,7 @@ class HttpNetworkLayer : public HttpTransactionFactory, public NonThreadSafe {
scoped_refptr<SSLConfigService> ssl_config_service_;
scoped_refptr<HttpNetworkSession> session_;
- scoped_refptr<SpdySessionPool> spdy_session_pool_;
+ scoped_ptr<SpdySessionPool> spdy_session_pool_;
HttpAuthHandlerFactory* http_auth_handler_factory_;
HttpNetworkDelegate* network_delegate_;
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index 3d1211c..1ee0bc5 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -105,9 +105,7 @@ class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>,
HostResolver* host_resolver() { return host_resolver_; }
ProxyService* proxy_service() { return proxy_service_; }
SSLConfigService* ssl_config_service() { return ssl_config_service_; }
- const scoped_refptr<SpdySessionPool>& spdy_session_pool() {
- return spdy_session_pool_;
- }
+ SpdySessionPool* spdy_session_pool() { return spdy_session_pool_.get(); }
HttpAuthHandlerFactory* http_auth_handler_factory() {
return http_auth_handler_factory_;
}
@@ -143,7 +141,9 @@ class HttpNetworkSession : public base::RefCounted<HttpNetworkSession>,
scoped_refptr<ProxyService> proxy_service_;
scoped_refptr<SSLConfigService> ssl_config_service_;
ClientSocketPoolManager socket_pool_manager_;
- scoped_refptr<SpdySessionPool> spdy_session_pool_;
+ // TODO(willchan): Move this out to IOThread so it can be shared across
+ // URLRequestContexts.
+ scoped_ptr<SpdySessionPool> spdy_session_pool_;
scoped_refptr<HttpStreamFactory> http_stream_factory_;
HttpAuthHandlerFactory* http_auth_handler_factory_;
HttpNetworkDelegate* const network_delegate_;
diff --git a/net/http/http_network_session_peer.h b/net/http/http_network_session_peer.h
new file mode 100644
index 0000000..13f3fa7
--- /dev/null
+++ b/net/http/http_network_session_peer.h
@@ -0,0 +1,78 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_HTTP_HTTP_NETWORK_SESSION_PEER_H_
+#define NET_HTTP_HTTP_NETWORK_SESSION_PEER_H_
+#pragma once
+
+#include "net/http/http_network_session.h"
+#include "net/http/http_proxy_client_socket_pool.h"
+#include "net/socket/socks_client_socket_pool.h"
+#include "net/socket/ssl_client_socket_pool.h"
+
+namespace net {
+
+class HttpNetworkSessionPeer {
+ public:
+ explicit HttpNetworkSessionPeer(
+ const scoped_refptr<HttpNetworkSession>& session)
+ : session_(session) {}
+
+ void SetTCPSocketPool(TCPClientSocketPool* pool) {
+ session_->socket_pool_manager_.tcp_socket_pool_.reset(pool);
+ }
+
+ void SetSocketPoolForSOCKSProxy(
+ const HostPortPair& socks_proxy,
+ SOCKSClientSocketPool* pool) {
+ ClientSocketPoolManager* socket_pool_manager =
+ &session_->socket_pool_manager_;
+
+ // Call through the public interface to force initialization of the
+ // wrapped socket pools.
+ delete socket_pool_manager->GetSocketPoolForSOCKSProxy(socks_proxy);
+ socket_pool_manager->socks_socket_pools_[socks_proxy] = pool;
+ }
+
+ void SetSocketPoolForHTTPProxy(
+ const HostPortPair& http_proxy,
+ HttpProxyClientSocketPool* pool) {
+ ClientSocketPoolManager* socket_pool_manager =
+ &session_->socket_pool_manager_;
+
+ // Call through the public interface to force initialization of the
+ // wrapped socket pools.
+ delete socket_pool_manager->GetSocketPoolForHTTPProxy(http_proxy);
+ socket_pool_manager->http_proxy_socket_pools_[http_proxy] = pool;
+ }
+
+ void SetSSLSocketPool(SSLClientSocketPool* pool) {
+ session_->socket_pool_manager_.ssl_socket_pool_.reset(pool);
+ }
+
+ void SetSocketPoolForSSLWithProxy(
+ const HostPortPair& proxy_host,
+ SSLClientSocketPool* pool) {
+ ClientSocketPoolManager* socket_pool_manager =
+ &session_->socket_pool_manager_;
+
+ // Call through the public interface to force initialization of the
+ // wrapped socket pools.
+ delete socket_pool_manager->GetSocketPoolForSSLWithProxy(proxy_host);
+ socket_pool_manager->ssl_socket_pools_for_proxies_[proxy_host] = pool;
+ }
+
+ void SetProxyService(ProxyService* proxy_service) {
+ session_->proxy_service_ = proxy_service;
+ }
+
+ private:
+ const scoped_refptr<HttpNetworkSession> session_;
+
+ DISALLOW_COPY_AND_ASSIGN(HttpNetworkSessionPeer);
+};
+
+} // namespace net
+
+#endif // NET_HTTP_HTTP_NETWORK_SESSION_PEER_H_
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 68e4038..d8b6ffc 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -29,6 +29,7 @@
#include "net/http/http_auth_handler_ntlm.h"
#include "net/http/http_basic_stream.h"
#include "net/http/http_network_session.h"
+#include "net/http/http_network_session_peer.h"
#include "net/http/http_stream.h"
#include "net/http/http_stream_factory.h"
#include "net/http/http_transaction_unittest.h"
@@ -66,62 +67,6 @@ const string16 kWrongPassword(ASCIIToUTF16("wrongpassword"));
namespace net {
-class HttpNetworkSessionPeer {
- public:
- explicit HttpNetworkSessionPeer(
- const scoped_refptr<HttpNetworkSession>& session)
- : session_(session) {}
-
- void SetTCPSocketPool(TCPClientSocketPool* pool) {
- session_->socket_pool_manager_.tcp_socket_pool_.reset(pool);
- }
-
- void SetSocketPoolForSOCKSProxy(
- const HostPortPair& socks_proxy,
- SOCKSClientSocketPool* pool) {
- ClientSocketPoolManager* socket_pool_manager =
- &session_->socket_pool_manager_;
-
- // Call through the public interface to force initialization of the
- // wrapped socket pools.
- delete socket_pool_manager->GetSocketPoolForSOCKSProxy(socks_proxy);
- socket_pool_manager->socks_socket_pools_[socks_proxy] = pool;
- }
-
- void SetSocketPoolForHTTPProxy(
- const HostPortPair& http_proxy,
- HttpProxyClientSocketPool* pool) {
- ClientSocketPoolManager* socket_pool_manager =
- &session_->socket_pool_manager_;
-
- // Call through the public interface to force initialization of the
- // wrapped socket pools.
- delete socket_pool_manager->GetSocketPoolForHTTPProxy(http_proxy);
- socket_pool_manager->http_proxy_socket_pools_[http_proxy] = pool;
- }
-
- void SetSSLSocketPool(SSLClientSocketPool* pool) {
- session_->socket_pool_manager_.ssl_socket_pool_.reset(pool);
- }
-
- void SetSocketPoolForSSLWithProxy(
- const HostPortPair& proxy_host,
- SSLClientSocketPool* pool) {
- ClientSocketPoolManager* socket_pool_manager =
- &session_->socket_pool_manager_;
-
- // Call through the public interface to force initialization of the
- // wrapped socket pools.
- delete socket_pool_manager->GetSocketPoolForSSLWithProxy(proxy_host);
- socket_pool_manager->ssl_socket_pools_for_proxies_[proxy_host] = pool;
- }
-
- private:
- const scoped_refptr<HttpNetworkSession> session_;
-
- DISALLOW_COPY_AND_ASSIGN(HttpNetworkSessionPeer);
-};
-
// Helper to manage the lifetimes of the dependencies for a
// HttpNetworkTransaction.
struct SessionDependencies {
@@ -132,7 +77,6 @@ struct SessionDependencies {
ssl_config_service(new SSLConfigServiceDefaults),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver)),
- spdy_session_pool(new SpdySessionPool(NULL)),
net_log(NULL) {}
// Custom proxy service dependency.
@@ -142,7 +86,6 @@ struct SessionDependencies {
ssl_config_service(new SSLConfigServiceDefaults),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver)),
- spdy_session_pool(new SpdySessionPool(NULL)),
net_log(NULL) {}
scoped_refptr<MockHostResolverBase> host_resolver;
@@ -150,7 +93,6 @@ struct SessionDependencies {
scoped_refptr<SSLConfigService> ssl_config_service;
MockClientSocketFactory socket_factory;
scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory;
- scoped_refptr<SpdySessionPool> spdy_session_pool;
NetLog* net_log;
};
@@ -165,7 +107,7 @@ HttpNetworkSession* CreateSession(SessionDependencies* session_deps) {
session_deps->proxy_service,
&session_deps->socket_factory,
session_deps->ssl_config_service,
- session_deps->spdy_session_pool,
+ new SpdySessionPool(NULL),
session_deps->http_auth_handler_factory.get(),
NULL,
session_deps->net_log);
diff --git a/net/http/http_stream_request.cc b/net/http/http_stream_request.cc
index 67aefb0..86cf0ef 100644
--- a/net/http/http_stream_request.cc
+++ b/net/http/http_stream_request.cc
@@ -694,8 +694,7 @@ int HttpStreamRequest::DoCreateStream() {
CHECK(!stream_.get());
bool direct = true;
- const scoped_refptr<SpdySessionPool> spdy_pool =
- session_->spdy_session_pool();
+ SpdySessionPool* spdy_pool = session_->spdy_session_pool();
scoped_refptr<SpdySession> spdy_session;
const ProxyServer& proxy_server = proxy_info()->proxy_server();