| Index: net/http/http_stream_factory_impl_unittest.cc
|
| ===================================================================
|
| --- net/http/http_stream_factory_impl_unittest.cc (revision 113620)
|
| +++ net/http/http_stream_factory_impl_unittest.cc (working copy)
|
| @@ -7,7 +7,6 @@
|
| #include <string>
|
|
|
| #include "base/basictypes.h"
|
| -#include "net/base/capturing_net_log.h"
|
| #include "net/base/cert_verifier.h"
|
| #include "net/base/mock_host_resolver.h"
|
| #include "net/base/net_log.h"
|
| @@ -49,7 +48,7 @@
|
|
|
| private:
|
| // HttpStreamFactoryImpl methods.
|
| - virtual void OnPreconnectsCompleteInternal() {
|
| + virtual void OnPreconnectsCompleteInternal() OVERRIDE {
|
| preconnect_done_ = true;
|
| if (waiting_for_preconnect_)
|
| MessageLoop::current()->Quit();
|
| @@ -162,8 +161,9 @@
|
| { 2, true},
|
| };
|
|
|
| -void PreconnectHelper(const TestCase& test,
|
| - HttpNetworkSession* session) {
|
| +void PreconnectHelperForURL(int num_streams,
|
| + const GURL& url,
|
| + HttpNetworkSession* session) {
|
| HttpNetworkSessionPeer peer(session);
|
| MockHttpStreamFactoryImpl* mock_factory =
|
| new MockHttpStreamFactoryImpl(session);
|
| @@ -173,18 +173,21 @@
|
|
|
| HttpRequestInfo request;
|
| request.method = "GET";
|
| - request.url = test.ssl ? GURL("https://www.google.com") :
|
| - GURL("http://www.google.com");
|
| + request.url = url;
|
| request.load_flags = 0;
|
|
|
| - ProxyInfo proxy_info;
|
| - TestOldCompletionCallback callback;
|
| -
|
| session->http_stream_factory()->PreconnectStreams(
|
| - test.num_streams, request, ssl_config, ssl_config, BoundNetLog());
|
| + num_streams, request, ssl_config, ssl_config, BoundNetLog());
|
| mock_factory->WaitForPreconnects();
|
| };
|
|
|
| +void PreconnectHelper(const TestCase& test,
|
| + HttpNetworkSession* session) {
|
| + GURL url = test.ssl ? GURL("https://www.google.com") :
|
| + GURL("http://www.google.com");
|
| + PreconnectHelperForURL(test.num_streams, url, session);
|
| +};
|
| +
|
| template<typename ParentPool>
|
| class CapturePreconnectsSocketPool : public ParentPool {
|
| public:
|
| @@ -200,7 +203,7 @@
|
| RequestPriority priority,
|
| ClientSocketHandle* handle,
|
| OldCompletionCallback* callback,
|
| - const BoundNetLog& net_log) {
|
| + const BoundNetLog& net_log) OVERRIDE {
|
| ADD_FAILURE();
|
| return ERR_UNEXPECTED;
|
| }
|
| @@ -208,36 +211,38 @@
|
| virtual void RequestSockets(const std::string& group_name,
|
| const void* socket_params,
|
| int num_sockets,
|
| - const BoundNetLog& net_log) {
|
| + const BoundNetLog& net_log) OVERRIDE {
|
| last_num_streams_ = num_sockets;
|
| }
|
|
|
| virtual void CancelRequest(const std::string& group_name,
|
| - ClientSocketHandle* handle) {
|
| + ClientSocketHandle* handle) OVERRIDE {
|
| ADD_FAILURE();
|
| }
|
| virtual void ReleaseSocket(const std::string& group_name,
|
| StreamSocket* socket,
|
| - int id) {
|
| + int id) OVERRIDE {
|
| ADD_FAILURE();
|
| }
|
| - virtual void CloseIdleSockets() {
|
| + virtual void CloseIdleSockets() OVERRIDE {
|
| ADD_FAILURE();
|
| }
|
| - virtual int IdleSocketCount() const {
|
| + virtual int IdleSocketCount() const OVERRIDE {
|
| ADD_FAILURE();
|
| return 0;
|
| }
|
| - virtual int IdleSocketCountInGroup(const std::string& group_name) const {
|
| + virtual int IdleSocketCountInGroup(
|
| + const std::string& group_name) const OVERRIDE {
|
| ADD_FAILURE();
|
| return 0;
|
| }
|
| - virtual LoadState GetLoadState(const std::string& group_name,
|
| - const ClientSocketHandle* handle) const {
|
| + virtual LoadState GetLoadState(
|
| + const std::string& group_name,
|
| + const ClientSocketHandle* handle) const OVERRIDE {
|
| ADD_FAILURE();
|
| return LOAD_STATE_IDLE;
|
| }
|
| - virtual base::TimeDelta ConnectionTimeout() const {
|
| + virtual base::TimeDelta ConnectionTimeout() const OVERRIDE {
|
| return base::TimeDelta();
|
| }
|
|
|
| @@ -389,6 +394,29 @@
|
| }
|
| }
|
|
|
| +// Verify that preconnects to unsafe ports are cancelled before they reach
|
| +// the SocketPool.
|
| +TEST(HttpStreamFactoryTest, PreconnectUnsafePort) {
|
| + ASSERT_FALSE(IsPortAllowedByDefault(7));
|
| + ASSERT_FALSE(IsPortAllowedByOverride(7));
|
| +
|
| + SessionDependencies session_deps(ProxyService::CreateDirect());
|
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
|
| + HttpNetworkSessionPeer peer(session);
|
| + CapturePreconnectsTransportSocketPool* transport_conn_pool =
|
| + new CapturePreconnectsTransportSocketPool(
|
| + session_deps.host_resolver.get(),
|
| + session_deps.cert_verifier.get());
|
| + MockClientSocketPoolManager* mock_pool_manager =
|
| + new MockClientSocketPoolManager;
|
| + mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
|
| + peer.SetClientSocketPoolManager(mock_pool_manager);
|
| +
|
| + PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session);
|
| +
|
| + EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
|
| +}
|
| +
|
| TEST(HttpStreamFactoryTest, JobNotifiesProxy) {
|
| const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT";
|
| SessionDependencies session_deps(
|
| @@ -404,9 +432,6 @@
|
| socket_data2.set_connect_data(MockConnect(true, OK));
|
| session_deps.socket_factory.AddSocketDataProvider(&socket_data2);
|
|
|
| - CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
|
| - EXPECT_TRUE(log.bound().IsLoggingAllEvents());
|
| -
|
| scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
|
|
|
| // Now request a stream. It should succeed using the second proxy in the
|
| @@ -421,7 +446,7 @@
|
| scoped_ptr<HttpStreamRequest> request(
|
| session->http_stream_factory()->RequestStream(request_info, ssl_config,
|
| ssl_config, &waiter,
|
| - log.bound()));
|
| + BoundNetLog()));
|
| waiter.WaitForStream();
|
|
|
| // The proxy that failed should now be known to the proxy_service as bad.
|
|
|