summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chrome_browser_field_trials.cc9
-rw-r--r--chrome/browser/io_thread.cc150
-rw-r--r--chrome/browser/io_thread.h33
-rw-r--r--chrome/browser/profiles/profile_io_data.cc14
-rw-r--r--net/base/net_test_suite.cc1
-rw-r--r--net/http/http_network_session.cc27
-rw-r--r--net/http/http_network_session.h11
-rw-r--r--net/http/http_network_transaction_spdy2_unittest.cc4
-rw-r--r--net/http/http_network_transaction_spdy3_unittest.cc4
-rw-r--r--net/http/http_proxy_client_socket_pool_spdy2_unittest.cc1
-rw-r--r--net/http/http_proxy_client_socket_pool_spdy3_unittest.cc1
-rw-r--r--net/socket/ssl_client_socket_pool_unittest.cc1
-rw-r--r--net/spdy/buffered_spdy_framer.cc15
-rw-r--r--net/spdy/buffered_spdy_framer.h5
-rw-r--r--net/spdy/buffered_spdy_framer_spdy2_unittest.cc23
-rw-r--r--net/spdy/buffered_spdy_framer_spdy3_unittest.cc24
-rw-r--r--net/spdy/spdy_credential_builder_unittest.cc2
-rw-r--r--net/spdy/spdy_http_stream_spdy2_unittest.cc7
-rw-r--r--net/spdy/spdy_http_stream_spdy3_unittest.cc10
-rw-r--r--net/spdy/spdy_network_transaction_spdy2_unittest.cc19
-rw-r--r--net/spdy/spdy_network_transaction_spdy3_unittest.cc19
-rw-r--r--net/spdy/spdy_proxy_client_socket_spdy2_unittest.cc7
-rw-r--r--net/spdy/spdy_proxy_client_socket_spdy3_unittest.cc7
-rw-r--r--net/spdy/spdy_session.cc121
-rw-r--r--net/spdy/spdy_session.h45
-rw-r--r--net/spdy/spdy_session_pool.cc57
-rw-r--r--net/spdy/spdy_session_pool.h41
-rw-r--r--net/spdy/spdy_session_spdy2_unittest.cc24
-rw-r--r--net/spdy/spdy_session_spdy3_unittest.cc28
-rw-r--r--net/spdy/spdy_stream_spdy2_unittest.cc9
-rw-r--r--net/spdy/spdy_stream_spdy3_unittest.cc9
-rw-r--r--net/spdy/spdy_test_util_spdy2.cc327
-rw-r--r--net/spdy/spdy_test_util_spdy2.h15
-rw-r--r--net/spdy/spdy_test_util_spdy3.cc367
-rw-r--r--net/spdy/spdy_test_util_spdy3.h55
-rw-r--r--net/spdy/spdy_websocket_stream_spdy2_unittest.cc5
-rw-r--r--net/spdy/spdy_websocket_stream_spdy3_unittest.cc5
-rw-r--r--net/spdy/spdy_websocket_test_util_spdy2.cc2
-rw-r--r--net/spdy/spdy_websocket_test_util_spdy3.cc2
-rw-r--r--net/tools/flip_server/spdy_interface.cc4
-rw-r--r--net/websockets/websocket_job_spdy2_unittest.cc4
-rw-r--r--net/websockets/websocket_job_spdy3_unittest.cc4
42 files changed, 702 insertions, 816 deletions
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc
index eae684c..0d7d198 100644
--- a/chrome/browser/chrome_browser_field_trials.cc
+++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -169,15 +169,6 @@ void ChromeBrowserFieldTrials::SpdyFieldTrial() {
trial->AppendGroup("cwnd16", kSpdyCwnd16);
trial->AppendGroup("cwndMin16", kSpdyCwndMin16);
trial->AppendGroup("cwndMin10", kSpdyCwndMin10);
-
- if (parsed_command_line_.HasSwitch(switches::kMaxSpdyConcurrentStreams)) {
- int value = 0;
- base::StringToInt(parsed_command_line_.GetSwitchValueASCII(
- switches::kMaxSpdyConcurrentStreams),
- &value);
- if (value > 0)
- net::SpdySession::set_max_concurrent_streams(value);
- }
}
// If --socket-reuse-policy is not specified, run an A/B test for choosing the
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index fff9a7d..0812638 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -53,7 +53,6 @@
#include "net/http/http_auth_filter.h"
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_network_layer.h"
-#include "net/http/http_network_session.h"
#include "net/http/http_server_properties_impl.h"
#include "net/proxy/proxy_config_service.h"
#include "net/proxy/proxy_script_fetcher_impl.h"
@@ -222,23 +221,14 @@ ConstructSystemRequestContext(IOThread::Globals* globals,
return context;
}
-void InitializeNetworkSessionParams(
- const IOThread::Globals& globals,
- net::HttpNetworkSession::Params* params) {
- params->host_resolver = globals.host_resolver.get();
- params->cert_verifier = globals.cert_verifier.get();
- params->server_bound_cert_service =
- globals.system_server_bound_cert_service.get();
- params->transport_security_state = globals.transport_security_state.get();
- params->ssl_config_service = globals.ssl_config_service.get();
- params->http_auth_handler_factory = globals.http_auth_handler_factory.get();
- params->http_server_properties = globals.http_server_properties.get();
- params->network_delegate = globals.system_network_delegate.get();
- params->host_mapping_rules = globals.host_mapping_rules.get();
- params->ignore_certificate_errors = globals.ignore_certificate_errors;
- params->http_pipelining_enabled = globals.http_pipelining_enabled;
- params->testing_fixed_http_port = globals.testing_fixed_http_port;
- params->testing_fixed_https_port = globals.testing_fixed_https_port;
+int GetSwitchValueAsInt(const CommandLine& command_line,
+ const std::string& switch_name) {
+ int value;
+ if (!base::StringToInt(command_line.GetSwitchValueASCII(switch_name),
+ &value)) {
+ return 0;
+ }
+ return value;
}
} // namespace
@@ -498,30 +488,22 @@ void IOThread::Init() {
if (command_line.HasSwitch(switches::kEnableHttpPipelining))
globals_->http_pipelining_enabled = true;
if (command_line.HasSwitch(switches::kTestingFixedHttpPort)) {
- int value;
- base::StringToInt(
- command_line.GetSwitchValueASCII(
- switches::kTestingFixedHttpPort),
- &value);
- globals_->testing_fixed_http_port = value;
+ globals_->testing_fixed_http_port =
+ GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpPort);
}
if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) {
- int value;
- base::StringToInt(
- command_line.GetSwitchValueASCII(
- switches::kTestingFixedHttpsPort),
- &value);
- globals_->testing_fixed_https_port = value;
+ globals_->testing_fixed_https_port =
+ GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort);
}
+ InitializeNetworkOptions(command_line);
+
net::HttpNetworkSession::Params session_params;
- InitializeNetworkSessionParams(*globals_, &session_params);
+ InitializeNetworkSessionParams(&session_params);
session_params.net_log = net_log_;
session_params.proxy_service =
globals_->proxy_script_fetcher_proxy_service.get();
- InitializeNetworkOptions(command_line);
-
scoped_refptr<net::HttpNetworkSession> network_session(
new net::HttpNetworkSession(session_params));
globals_->proxy_script_fetcher_http_transaction_factory.reset(
@@ -594,9 +576,8 @@ void IOThread::CleanUp() {
base::debug::LeakTracker<SystemURLRequestContextGetter>::CheckForLeaks();
}
-void IOThread::InitializeNetworkOptions(
- const CommandLine& parsed_command_line) {
- if (parsed_command_line.HasSwitch(switches::kEnableFileCookies)) {
+void IOThread::InitializeNetworkOptions(const CommandLine& command_line) {
+ if (command_line.HasSwitch(switches::kEnableFileCookies)) {
// Enable cookie storage for file:// URLs. Must do this before the first
// Profile (and therefore the first CookieMonster) is created.
net::CookieMonster::EnableFileScheme();
@@ -607,42 +588,42 @@ void IOThread::InitializeNetworkOptions(
if (is_spdy_disabled_by_policy_)
return;
- if (parsed_command_line.HasSwitch(switches::kEnableIPPooling))
- net::SpdySessionPool::enable_ip_pooling(true);
-
- if (parsed_command_line.HasSwitch(switches::kDisableIPPooling))
- net::SpdySessionPool::enable_ip_pooling(false);
-
- if (parsed_command_line.HasSwitch(switches::kEnableSpdyCredentialFrames))
- net::SpdySession::set_enable_credential_frames(true);
- if (parsed_command_line.HasSwitch(switches::kMaxSpdySessionsPerDomain)) {
- int value;
- base::StringToInt(
- parsed_command_line.GetSwitchValueASCII(
- switches::kMaxSpdySessionsPerDomain),
- &value);
- net::SpdySessionPool::set_max_sessions_per_domain(value);
- }
+ if (command_line.HasSwitch(switches::kEnableIPPooling))
+ globals_->enable_spdy_ip_pooling.set(true);
- if (parsed_command_line.HasSwitch(switches::kEnableWebSocketOverSpdy)) {
+ if (command_line.HasSwitch(switches::kDisableIPPooling))
+ globals_->enable_spdy_ip_pooling.set(false);
+
+ if (command_line.HasSwitch(switches::kEnableSpdyCredentialFrames))
+ globals_->enable_spdy_credential_frames.set(true);
+
+ if (command_line.HasSwitch(switches::kEnableWebSocketOverSpdy)) {
// Enable WebSocket over SPDY.
net::WebSocketJob::set_websocket_over_spdy_enabled(true);
}
+ if (command_line.HasSwitch(switches::kMaxSpdySessionsPerDomain)) {
+ globals_->max_spdy_sessions_per_domain.set(
+ GetSwitchValueAsInt(command_line, switches::kMaxSpdySessionsPerDomain));
+ }
+ if (command_line.HasSwitch(switches::kMaxSpdyConcurrentStreams)) {
+ globals_->max_spdy_concurrent_streams_limit.set(
+ GetSwitchValueAsInt(command_line, switches::kMaxSpdyConcurrentStreams));
+ }
bool used_spdy_switch = false;
- if (parsed_command_line.HasSwitch(switches::kUseSpdy)) {
+ if (command_line.HasSwitch(switches::kUseSpdy)) {
std::string spdy_mode =
- parsed_command_line.GetSwitchValueASCII(switches::kUseSpdy);
+ command_line.GetSwitchValueASCII(switches::kUseSpdy);
EnableSpdy(spdy_mode);
used_spdy_switch = true;
}
- if (parsed_command_line.HasSwitch(switches::kEnableSpdy3)) {
+ if (command_line.HasSwitch(switches::kEnableSpdy3)) {
net::HttpStreamFactory::EnableNpnSpdy3();
used_spdy_switch = true;
- } else if (parsed_command_line.HasSwitch(switches::kEnableNpn)) {
+ } else if (command_line.HasSwitch(switches::kEnableNpn)) {
net::HttpStreamFactory::EnableNpnSpdy();
used_spdy_switch = true;
- } else if (parsed_command_line.HasSwitch(switches::kEnableNpnHttpOnly)) {
+ } else if (command_line.HasSwitch(switches::kEnableNpnHttpOnly)) {
net::HttpStreamFactory::EnableNpnHttpOnly();
used_spdy_switch = true;
}
@@ -678,19 +659,19 @@ void IOThread::EnableSpdy(const std::string& mode) {
if (option == kOff) {
net::HttpStreamFactory::set_spdy_enabled(false);
} else if (option == kDisableSSL) {
- net::SpdySession::set_default_protocol(net::kProtoSPDY2);
+ globals_->spdy_default_protocol.set(net::kProtoSPDY2);
net::HttpStreamFactory::set_force_spdy_over_ssl(false);
net::HttpStreamFactory::set_force_spdy_always(true);
} else if (option == kSSL) {
- net::SpdySession::set_default_protocol(net::kProtoSPDY2);
+ globals_->spdy_default_protocol.set(net::kProtoSPDY2);
net::HttpStreamFactory::set_force_spdy_over_ssl(true);
net::HttpStreamFactory::set_force_spdy_always(true);
} else if (option == kDisablePing) {
- net::SpdySession::set_enable_ping_based_connection_checking(false);
+ globals_->enable_spdy_ping_based_connection_checking.set(false);
} else if (option == kExclude) {
net::HttpStreamFactory::add_forced_spdy_exclusion(value);
} else if (option == kDisableCompression) {
- net::BufferedSpdyFramer::set_enable_compression_default(false);
+ globals_->enable_spdy_compression.set(false);
} else if (option == kDisableAltProtocols) {
net::HttpStreamFactory::set_use_alternate_protocols(false);
} else if (option == kForceAltProtocols) {
@@ -700,11 +681,11 @@ void IOThread::EnableSpdy(const std::string& mode) {
net::HttpServerPropertiesImpl::ForceAlternateProtocol(pair);
} else if (option == kSingleDomain) {
DLOG(INFO) << "FORCING SINGLE DOMAIN";
- net::SpdySessionPool::ForceSingleDomain();
+ globals_->force_spdy_single_domain.set(true);
} else if (option == kInitialMaxConcurrentStreams) {
int streams;
- if (base::StringToInt(value, &streams) && streams > 0)
- net::SpdySession::set_init_max_concurrent_streams(streams);
+ if (base::StringToInt(value, &streams))
+ globals_->initial_max_spdy_concurrent_streams.set(streams);
} else if (option.empty() && it == spdy_options.begin()) {
continue;
} else {
@@ -781,6 +762,43 @@ void IOThread::ClearHostCache() {
host_cache->clear();
}
+void IOThread::InitializeNetworkSessionParams(
+ net::HttpNetworkSession::Params* params) {
+ params->host_resolver = globals_->host_resolver.get();
+ params->cert_verifier = globals_->cert_verifier.get();
+ params->server_bound_cert_service =
+ globals_->system_server_bound_cert_service.get();
+ params->transport_security_state = globals_->transport_security_state.get();
+ params->ssl_config_service = globals_->ssl_config_service.get();
+ params->http_auth_handler_factory = globals_->http_auth_handler_factory.get();
+ params->http_server_properties = globals_->http_server_properties.get();
+ params->network_delegate = globals_->system_network_delegate.get();
+ params->host_mapping_rules = globals_->host_mapping_rules.get();
+ params->ignore_certificate_errors = globals_->ignore_certificate_errors;
+ params->http_pipelining_enabled = globals_->http_pipelining_enabled;
+ params->testing_fixed_http_port = globals_->testing_fixed_http_port;
+ params->testing_fixed_https_port = globals_->testing_fixed_https_port;
+
+ globals_->max_spdy_sessions_per_domain.CopyToIfSet(
+ &params->max_spdy_sessions_per_domain);
+ globals_->initial_max_spdy_concurrent_streams.CopyToIfSet(
+ &params->spdy_initial_max_concurrent_streams);
+ globals_->max_spdy_concurrent_streams_limit.CopyToIfSet(
+ &params->spdy_max_concurrent_streams_limit);
+ globals_->force_spdy_single_domain.CopyToIfSet(
+ &params->force_spdy_single_domain);
+ globals_->enable_spdy_ip_pooling.CopyToIfSet(
+ &params->enable_spdy_ip_pooling);
+ globals_->enable_spdy_credential_frames.CopyToIfSet(
+ &params->enable_spdy_credential_frames);
+ globals_->enable_spdy_compression.CopyToIfSet(
+ &params->enable_spdy_compression);
+ globals_->enable_spdy_ping_based_connection_checking.CopyToIfSet(
+ &params->enable_spdy_ping_based_connection_checking);
+ globals_->spdy_default_protocol.CopyToIfSet(
+ &params->spdy_default_protocol);
+}
+
net::SSLConfigService* IOThread::GetSSLConfigService() {
return ssl_config_service_manager_->Get();
}
@@ -832,7 +850,7 @@ void IOThread::InitSystemRequestContextOnIOThread() {
command_line));
net::HttpNetworkSession::Params system_params;
- InitializeNetworkSessionParams(*globals_, &system_params);
+ InitializeNetworkSessionParams(&system_params);
system_params.net_log = net_log_;
system_params.proxy_service = globals_->system_proxy_service.get();
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index de61126..8216614 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -17,6 +17,8 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/browser_thread_delegate.h"
#include "net/base/network_change_notifier.h"
+#include "net/http/http_network_session.h"
+#include "net/socket/next_proto.h"
class ChromeNetLog;
class CommandLine;
@@ -70,6 +72,26 @@ class PolicyService;
class IOThread : public content::BrowserThreadDelegate {
public:
struct Globals {
+ template <typename T>
+ class Optional {
+ public:
+ Optional() : set_(false) {}
+
+ void set(T value) {
+ set_ = true;
+ value_ = value;
+ }
+ void CopyToIfSet(T* value) {
+ if (set_) {
+ *value = value_;
+ }
+ }
+
+ private:
+ bool set_;
+ T value_;
+ };
+
class SystemRequestContextLeakChecker {
public:
explicit SystemRequestContextLeakChecker(Globals* globals);
@@ -127,6 +149,15 @@ class IOThread : public content::BrowserThreadDelegate {
bool http_pipelining_enabled;
uint16 testing_fixed_http_port;
uint16 testing_fixed_https_port;
+ Optional<size_t> max_spdy_sessions_per_domain;
+ Optional<size_t> initial_max_spdy_concurrent_streams;
+ Optional<size_t> max_spdy_concurrent_streams_limit;
+ Optional<bool> force_spdy_single_domain;
+ Optional<bool> enable_spdy_ip_pooling;
+ Optional<bool> enable_spdy_credential_frames;
+ Optional<bool> enable_spdy_compression;
+ Optional<bool> enable_spdy_ping_based_connection_checking;
+ Optional<net::NextProto> spdy_default_protocol;
// NetErrorTabHelper uses |dns_probe_service| to send DNS probes when a
// main frame load fails with a DNS error in order to provide more useful
// information to the renderer so it can show a more specific error page.
@@ -157,6 +188,8 @@ class IOThread : public content::BrowserThreadDelegate {
// called on the IO thread.
void ClearHostCache();
+ void InitializeNetworkSessionParams(net::HttpNetworkSession::Params* params);
+
private:
// Provide SystemURLRequestContextGetter with access to
// InitSystemRequestContext().
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 8785d39..0c8bb33 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -712,7 +712,8 @@ void ProfileIOData::PopulateNetworkSessionParams(
ChromeURLRequestContext* context = main_request_context();
IOThread* const io_thread = profile_params->io_thread;
- IOThread::Globals* const globals = io_thread->globals();
+
+ io_thread->InitializeNetworkSessionParams(params);
params->host_resolver = context->host_resolver();
params->cert_verifier = context->cert_verifier();
@@ -725,17 +726,6 @@ void ProfileIOData::PopulateNetworkSessionParams(
params->network_delegate = context->network_delegate();
params->http_server_properties = context->http_server_properties();
params->net_log = context->net_log();
- params->host_mapping_rules = globals->host_mapping_rules.get();
- params->ignore_certificate_errors = globals->ignore_certificate_errors;
- params->http_pipelining_enabled = globals->http_pipelining_enabled;
- params->testing_fixed_http_port = globals->testing_fixed_http_port;
- params->testing_fixed_https_port = globals->testing_fixed_https_port;
-
- const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- if (command_line.HasSwitch(switches::kTrustedSpdyProxy)) {
- params->trusted_spdy_proxy = command_line.GetSwitchValueASCII(
- switches::kTrustedSpdyProxy);
- }
}
void ProfileIOData::SetCookieSettingsForTesting(
diff --git a/net/base/net_test_suite.cc b/net/base/net_test_suite.cc
index bd6413f..9413058 100644
--- a/net/base/net_test_suite.cc
+++ b/net/base/net_test_suite.cc
@@ -17,7 +17,6 @@
class StaticReset : public ::testing::EmptyTestEventListener {
virtual void OnTestStart(const ::testing::TestInfo& test_info) OVERRIDE {
net::HttpStreamFactory::ResetStaticSettingsToInit();
- net::SpdySession::ResetStaticSettingsToInit();
}
};
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index c54325cf..50a18c2 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -7,6 +7,7 @@
#include <utility>
#include "base/compiler_specific.h"
+#include "base/debug/stack_trace.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "base/string_util.h"
@@ -18,6 +19,7 @@
#include "net/proxy/proxy_service.h"
#include "net/socket/client_socket_factory.h"
#include "net/socket/client_socket_pool_manager_impl.h"
+#include "net/socket/next_proto.h"
#include "net/spdy/spdy_session_pool.h"
namespace {
@@ -63,7 +65,19 @@ HttpNetworkSession::Params::Params()
ignore_certificate_errors(false),
http_pipelining_enabled(false),
testing_fixed_http_port(0),
- testing_fixed_https_port(0) {}
+ testing_fixed_https_port(0),
+ max_spdy_sessions_per_domain(0),
+ force_spdy_single_domain(false),
+ enable_spdy_ip_pooling(true),
+ enable_spdy_credential_frames(false),
+ enable_spdy_compression(true),
+ enable_spdy_ping_based_connection_checking(true),
+ spdy_default_protocol(kProtoUnknown),
+ spdy_initial_recv_window_size(0),
+ spdy_initial_max_concurrent_streams(0),
+ spdy_max_concurrent_streams_limit(0),
+ time_func(&base::TimeTicks::Now) {
+}
// TODO(mbelshe): Move the socket factories into HttpStreamFactory.
HttpNetworkSession::HttpNetworkSession(const Params& params)
@@ -82,6 +96,17 @@ HttpNetworkSession::HttpNetworkSession(const Params& params)
spdy_session_pool_(params.host_resolver,
params.ssl_config_service,
params.http_server_properties,
+ params.max_spdy_sessions_per_domain,
+ params.force_spdy_single_domain,
+ params.enable_spdy_ip_pooling,
+ params.enable_spdy_credential_frames,
+ params.enable_spdy_compression,
+ params.enable_spdy_ping_based_connection_checking,
+ params.spdy_default_protocol,
+ params.spdy_initial_recv_window_size,
+ params.spdy_initial_max_concurrent_streams,
+ params.spdy_max_concurrent_streams_limit,
+ params.time_func,
params.trusted_spdy_proxy),
ALLOW_THIS_IN_INITIALIZER_LIST(http_stream_factory_(
new HttpStreamFactoryImpl(this))),
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index 47abaec..d47b5a4 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -67,6 +67,17 @@ class NET_EXPORT HttpNetworkSession
bool http_pipelining_enabled;
uint16 testing_fixed_http_port;
uint16 testing_fixed_https_port;
+ size_t max_spdy_sessions_per_domain;
+ bool force_spdy_single_domain;
+ bool enable_spdy_ip_pooling;
+ bool enable_spdy_credential_frames;
+ bool enable_spdy_compression;
+ bool enable_spdy_ping_based_connection_checking;
+ NextProto spdy_default_protocol;
+ size_t spdy_initial_recv_window_size;
+ size_t spdy_initial_max_concurrent_streams;
+ size_t spdy_max_concurrent_streams_limit;
+ SpdySessionPool::TimeFunc time_func;
std::string trusted_spdy_proxy;
};
diff --git a/net/http/http_network_transaction_spdy2_unittest.cc b/net/http/http_network_transaction_spdy2_unittest.cc
index ebeb2d9..29ec3fb 100644
--- a/net/http/http_network_transaction_spdy2_unittest.cc
+++ b/net/http/http_network_transaction_spdy2_unittest.cc
@@ -152,7 +152,6 @@ class HttpNetworkTransactionSpdy2Test : public PlatformTest {
};
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
MessageLoop::current()->RunUntilIdle();
}
@@ -249,9 +248,6 @@ class HttpNetworkTransactionSpdy2Test : public PlatformTest {
int expected_status);
void ConnectStatusHelper(const MockRead& status);
-
- private:
- SpdyTestStateHelper spdy_state_;
};
namespace {
diff --git a/net/http/http_network_transaction_spdy3_unittest.cc b/net/http/http_network_transaction_spdy3_unittest.cc
index 56f42eb..f9d057c 100644
--- a/net/http/http_network_transaction_spdy3_unittest.cc
+++ b/net/http/http_network_transaction_spdy3_unittest.cc
@@ -152,7 +152,6 @@ class HttpNetworkTransactionSpdy3Test : public PlatformTest {
};
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
MessageLoop::current()->RunUntilIdle();
}
@@ -249,9 +248,6 @@ class HttpNetworkTransactionSpdy3Test : public PlatformTest {
int expected_status);
void ConnectStatusHelper(const MockRead& status);
-
- private:
- SpdyTestStateHelper spdy_state_;
};
namespace {
diff --git a/net/http/http_proxy_client_socket_pool_spdy2_unittest.cc b/net/http/http_proxy_client_socket_pool_spdy2_unittest.cc
index 3557fd7..4938628 100644
--- a/net/http/http_proxy_client_socket_pool_spdy2_unittest.cc
+++ b/net/http/http_proxy_client_socket_pool_spdy2_unittest.cc
@@ -190,7 +190,6 @@ class HttpProxyClientSocketPoolSpdy2Test : public TestWithHttpParam {
const scoped_refptr<HttpNetworkSession> session_;
ClientSocketPoolHistograms http_proxy_histograms_;
- SpdyTestStateHelper spdy_state_;
protected:
scoped_ptr<SSLSocketDataProvider> ssl_data_;
diff --git a/net/http/http_proxy_client_socket_pool_spdy3_unittest.cc b/net/http/http_proxy_client_socket_pool_spdy3_unittest.cc
index b3bf87f..64cfd8e 100644
--- a/net/http/http_proxy_client_socket_pool_spdy3_unittest.cc
+++ b/net/http/http_proxy_client_socket_pool_spdy3_unittest.cc
@@ -190,7 +190,6 @@ class HttpProxyClientSocketPoolSpdy3Test : public TestWithHttpParam {
const scoped_refptr<HttpNetworkSession> session_;
ClientSocketPoolHistograms http_proxy_histograms_;
- SpdyTestStateHelper spdy_state_;
protected:
scoped_ptr<SSLSocketDataProvider> ssl_data_;
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc
index 41ce4f9..92f0ce65 100644
--- a/net/socket/ssl_client_socket_pool_unittest.cc
+++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -143,6 +143,7 @@ class SSLClientSocketPoolTest : public testing::Test {
params.ssl_config_service = ssl_config_service_;
params.http_auth_handler_factory = http_auth_handler_factory_.get();
params.http_server_properties = &http_server_properties_;
+ params.enable_spdy_compression = false;
return new HttpNetworkSession(params);
}
diff --git a/net/spdy/buffered_spdy_framer.cc b/net/spdy/buffered_spdy_framer.cc
index bafb5ce..50a0d931 100644
--- a/net/spdy/buffered_spdy_framer.cc
+++ b/net/spdy/buffered_spdy_framer.cc
@@ -6,22 +6,16 @@
#include "base/logging.h"
-namespace {
-
-bool g_enable_compression_default = true;
-
-} // namespace
-
namespace net {
-BufferedSpdyFramer::BufferedSpdyFramer(int version)
+BufferedSpdyFramer::BufferedSpdyFramer(int version, bool enable_compression)
: spdy_framer_(version),
visitor_(NULL),
header_buffer_used_(0),
header_buffer_valid_(false),
header_stream_id_(SpdyFramer::kInvalidStream),
frames_received_(0) {
- spdy_framer_.set_enable_compression(g_enable_compression_default);
+ spdy_framer_.set_enable_compression(enable_compression);
memset(header_buffer_, 0, sizeof(header_buffer_));
}
@@ -296,11 +290,6 @@ bool BufferedSpdyFramer::IsCompressible(const SpdyFrame& frame) const {
return spdy_framer_.IsCompressible(frame);
}
-// static
-void BufferedSpdyFramer::set_enable_compression_default(bool value) {
- g_enable_compression_default = value;
-}
-
void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) {
memset(header_buffer_, 0, kHeaderBufferSize);
header_buffer_used_ = 0;
diff --git a/net/spdy/buffered_spdy_framer.h b/net/spdy/buffered_spdy_framer.h
index aa4163e..ea64151 100644
--- a/net/spdy/buffered_spdy_framer.h
+++ b/net/spdy/buffered_spdy_framer.h
@@ -92,7 +92,8 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramerVisitorInterface {
class NET_EXPORT_PRIVATE BufferedSpdyFramer
: public SpdyFramerVisitorInterface {
public:
- explicit BufferedSpdyFramer(int version);
+ BufferedSpdyFramer(int version,
+ bool enable_compression);
virtual ~BufferedSpdyFramer();
// Sets callbacks to be called from the buffered spdy framer. A visitor must
@@ -178,8 +179,6 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramer
SpdyDataFlags flags);
SpdyPriority GetHighestPriority() const;
bool IsCompressible(const SpdyFrame& frame) const;
- // Specify if newly created SpdySessions should have compression enabled.
- static void set_enable_compression_default(bool value);
int frames_received() const { return frames_received_; }
diff --git a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc
index 3814128..4bbdf6e 100644
--- a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc
+++ b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc
@@ -16,13 +16,13 @@ namespace {
class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
public:
TestBufferedSpdyVisitor()
- : buffered_spdy_framer_(2),
- error_count_(0),
- setting_count_(0),
- syn_frame_count_(0),
- syn_reply_frame_count_(0),
- headers_frame_count_(0),
- header_stream_id_(-1) {
+ : buffered_spdy_framer_(2, true),
+ error_count_(0),
+ setting_count_(0),
+ syn_frame_count_(0),
+ syn_reply_frame_count_(0),
+ headers_frame_count_(0),
+ header_stream_id_(-1) {
}
void OnError(SpdyFramer::SpdyError error_code) {
@@ -174,9 +174,6 @@ class BufferedSpdyFramerSpdy2Test : public PlatformTest {
}
return true;
}
-
- private:
- SpdyTestStateHelper spdy_state_;
};
TEST_F(BufferedSpdyFramerSpdy2Test, OnSetting) {
@@ -201,7 +198,7 @@ TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynStreamHeaderBlock) {
SpdyHeaderBlock headers;
headers["aa"] = "vv";
headers["bb"] = "ww";
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, true);
scoped_ptr<SpdySynStreamControlFrame> control_frame(
framer.CreateSynStream(1, // stream_id
0, // associated_stream_id
@@ -227,7 +224,7 @@ TEST_F(BufferedSpdyFramerSpdy2Test, ReadSynReplyHeaderBlock) {
SpdyHeaderBlock headers;
headers["alpha"] = "beta";
headers["gamma"] = "delta";
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, true);
scoped_ptr<SpdySynReplyControlFrame> control_frame(
framer.CreateSynReply(1, // stream_id
CONTROL_FLAG_NONE,
@@ -250,7 +247,7 @@ TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) {
SpdyHeaderBlock headers;
headers["alpha"] = "beta";
headers["gamma"] = "delta";
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, true);
scoped_ptr<SpdyHeadersControlFrame> control_frame(
framer.CreateHeaders(1, // stream_id
CONTROL_FLAG_NONE,
diff --git a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc
index c69ac4d..ca9edf3 100644
--- a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc
+++ b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc
@@ -16,13 +16,13 @@ namespace {
class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
public:
TestBufferedSpdyVisitor()
- : buffered_spdy_framer_(3),
- error_count_(0),
- setting_count_(0),
- syn_frame_count_(0),
- syn_reply_frame_count_(0),
- headers_frame_count_(0),
- header_stream_id_(-1) {
+ : buffered_spdy_framer_(3, true),
+ error_count_(0),
+ setting_count_(0),
+ syn_frame_count_(0),
+ syn_reply_frame_count_(0),
+ headers_frame_count_(0),
+ header_stream_id_(-1) {
}
void OnError(SpdyFramer::SpdyError error_code) {
@@ -174,13 +174,11 @@ class BufferedSpdyFramerSpdy3Test : public PlatformTest {
}
return true;
}
-
- private:
- SpdyTestStateHelper spdy_state_;
};
TEST_F(BufferedSpdyFramerSpdy3Test, OnSetting) {
SpdyFramer framer(3);
+ framer.set_enable_compression(false);
SettingsMap settings;
settings[SETTINGS_UPLOAD_BANDWIDTH] =
SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0x00000002);
@@ -201,7 +199,7 @@ TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynStreamHeaderBlock) {
SpdyHeaderBlock headers;
headers["aa"] = "vv";
headers["bb"] = "ww";
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, true);
scoped_ptr<SpdySynStreamControlFrame> control_frame(
framer.CreateSynStream(1, // stream_id
0, // associated_stream_id
@@ -227,7 +225,7 @@ TEST_F(BufferedSpdyFramerSpdy3Test, ReadSynReplyHeaderBlock) {
SpdyHeaderBlock headers;
headers["alpha"] = "beta";
headers["gamma"] = "delta";
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, true);
scoped_ptr<SpdySynReplyControlFrame> control_frame(
framer.CreateSynReply(1, // stream_id
CONTROL_FLAG_NONE,
@@ -250,7 +248,7 @@ TEST_F(BufferedSpdyFramerSpdy3Test, ReadHeadersHeaderBlock) {
SpdyHeaderBlock headers;
headers["alpha"] = "beta";
headers["gamma"] = "delta";
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, true);
scoped_ptr<SpdyHeadersControlFrame> control_frame(
framer.CreateHeaders(1, // stream_id
CONTROL_FLAG_NONE,
diff --git a/net/spdy/spdy_credential_builder_unittest.cc b/net/spdy/spdy_credential_builder_unittest.cc
index 825e97d..067fdb7 100644
--- a/net/spdy/spdy_credential_builder_unittest.cc
+++ b/net/spdy/spdy_credential_builder_unittest.cc
@@ -69,10 +69,10 @@ class SpdyCredentialBuilderTest : public testing::Test {
MockClientSocket::kTlsUnique);
}
- SpdyTestStateHelper helper_; // Provides deterministic EC signatures.
std::string cert_;
std::string key_;
SpdyCredential credential_;
+ MockECSignatureCreatorFactory ec_signature_creator_factory_;
};
// http://crbug.com/142833, http://crbug.com/140991. The following tests fail
diff --git a/net/spdy/spdy_http_stream_spdy2_unittest.cc b/net/spdy/spdy_http_stream_spdy2_unittest.cc
index 3c203de..f72d9a6 100644
--- a/net/spdy/spdy_http_stream_spdy2_unittest.cc
+++ b/net/spdy/spdy_http_stream_spdy2_unittest.cc
@@ -28,10 +28,6 @@ class SpdyHttpStreamSpdy2Test : public testing::Test {
protected:
SpdyHttpStreamSpdy2Test() {}
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
- }
-
virtual void TearDown() {
crypto::ECSignatureCreator::SetFactoryForTesting(NULL);
UploadDataStream::ResetMergeChunks();
@@ -73,9 +69,6 @@ class SpdyHttpStreamSpdy2Test : public testing::Test {
scoped_refptr<HttpNetworkSession> http_session_;
scoped_refptr<SpdySession> session_;
scoped_refptr<TransportSocketParams> transport_params_;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
TEST_F(SpdyHttpStreamSpdy2Test, SendRequest) {
diff --git a/net/spdy/spdy_http_stream_spdy3_unittest.cc b/net/spdy/spdy_http_stream_spdy3_unittest.cc
index 46a1816..49e4791 100644
--- a/net/spdy/spdy_http_stream_spdy3_unittest.cc
+++ b/net/spdy/spdy_http_stream_spdy3_unittest.cc
@@ -29,15 +29,9 @@ namespace net {
class SpdyHttpStreamSpdy3Test : public testing::Test {
public:
OrderedSocketData* data() { return data_.get(); }
- protected:
- SpdyHttpStreamSpdy3Test() {}
-
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
- }
+ protected:
virtual void TearDown() {
- crypto::ECSignatureCreator::SetFactoryForTesting(NULL);
UploadDataStream::ResetMergeChunks();
MessageLoop::current()->RunUntilIdle();
}
@@ -84,7 +78,7 @@ class SpdyHttpStreamSpdy3Test : public testing::Test {
scoped_refptr<TransportSocketParams> transport_params_;
private:
- SpdyTestStateHelper spdy_state_;
+ MockECSignatureCreatorFactory ec_signature_creator_factory_;
};
TEST_F(SpdyHttpStreamSpdy3Test, SendRequest) {
diff --git a/net/spdy/spdy_network_transaction_spdy2_unittest.cc b/net/spdy/spdy_network_transaction_spdy2_unittest.cc
index 995d98e..fc9fdf3 100644
--- a/net/spdy/spdy_network_transaction_spdy2_unittest.cc
+++ b/net/spdy/spdy_network_transaction_spdy2_unittest.cc
@@ -45,7 +45,6 @@ class SpdyNetworkTransactionSpdy2Test
protected:
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
google_get_request_initialized_ = false;
google_post_request_initialized_ = false;
google_chunked_post_request_initialized_ = false;
@@ -576,7 +575,6 @@ class SpdyNetworkTransactionSpdy2Test
HttpRequestInfo google_post_request_;
HttpRequestInfo google_chunked_post_request_;
HttpRequestInfo google_get_push_request_;
- SpdyTestStateHelper spdy_state_;
base::ScopedTempDir temp_dir_;
};
@@ -3533,9 +3531,6 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, PartialWrite) {
// In this test, we enable compression, but get a uncompressed SynReply from
// the server. Verify that teardown is all clean.
TEST_P(SpdyNetworkTransactionSpdy2Test, DecompressFailureOnSynReply) {
- // For this test, we turn on the normal compression.
- BufferedSpdyFramer::set_enable_compression_default(true);
-
scoped_ptr<SpdyFrame> compressed(
ConstructSpdyGet(NULL, 0, true, 1, LOWEST));
scoped_ptr<SpdyFrame> rst(
@@ -3552,8 +3547,10 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, DecompressFailureOnSynReply) {
DelayedSocketData data(1, reads, arraysize(reads),
writes, arraysize(writes));
+ SpdySessionDependencies* session_deps = new SpdySessionDependencies();
+ session_deps->enable_compression = true;
NormalSpdyTransactionHelper helper(CreateGetRequest(),
- BoundNetLog(), GetParam(), NULL);
+ BoundNetLog(), GetParam(), session_deps);
helper.RunToCompletion(&data);
TransactionHelperResult out = helper.output();
EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
@@ -3649,7 +3646,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, NetLog) {
// on the network, but issued a Read for only 5 of those bytes) that the data
// flow still works correctly.
TEST_P(SpdyNetworkTransactionSpdy2Test, BufferFull) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -3742,7 +3739,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, BufferFull) {
// at the same time, ensure that we don't notify a read completion for
// each data frame individually.
TEST_P(SpdyNetworkTransactionSpdy2Test, Buffering) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -3836,7 +3833,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, Buffering) {
// Verify the case where we buffer data but read it after it has been buffered.
TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedAll) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -3927,7 +3924,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedAll) {
// Verify the case where we buffer data and close the connection.
TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedClosed) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -4017,7 +4014,7 @@ TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedClosed) {
// Verify the case where we buffer data and cancel the transaction.
TEST_P(SpdyNetworkTransactionSpdy2Test, BufferedCancelled) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
diff --git a/net/spdy/spdy_network_transaction_spdy3_unittest.cc b/net/spdy/spdy_network_transaction_spdy3_unittest.cc
index 5a9a40c..c8a7014 100644
--- a/net/spdy/spdy_network_transaction_spdy3_unittest.cc
+++ b/net/spdy/spdy_network_transaction_spdy3_unittest.cc
@@ -45,7 +45,6 @@ class SpdyNetworkTransactionSpdy3Test
protected:
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
google_get_request_initialized_ = false;
google_post_request_initialized_ = false;
google_chunked_post_request_initialized_ = false;
@@ -577,7 +576,6 @@ class SpdyNetworkTransactionSpdy3Test
HttpRequestInfo google_post_request_;
HttpRequestInfo google_chunked_post_request_;
HttpRequestInfo google_get_push_request_;
- SpdyTestStateHelper spdy_state_;
base::ScopedTempDir temp_dir_;
};
@@ -4104,9 +4102,6 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, PartialWrite) {
// In this test, we enable compression, but get a uncompressed SynReply from
// the server. Verify that teardown is all clean.
TEST_P(SpdyNetworkTransactionSpdy3Test, DecompressFailureOnSynReply) {
- // For this test, we turn on the normal compression.
- BufferedSpdyFramer::set_enable_compression_default(true);
-
scoped_ptr<SpdyFrame> compressed(
ConstructSpdyGet(NULL, 0, true, 1, LOWEST));
scoped_ptr<SpdyFrame> rst(
@@ -4123,8 +4118,10 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, DecompressFailureOnSynReply) {
DelayedSocketData data(1, reads, arraysize(reads),
writes, arraysize(writes));
+ SpdySessionDependencies* session_deps = new SpdySessionDependencies();
+ session_deps->enable_compression = true;
NormalSpdyTransactionHelper helper(CreateGetRequest(),
- BoundNetLog(), GetParam(), NULL);
+ BoundNetLog(), GetParam(), session_deps);
helper.RunToCompletion(&data);
TransactionHelperResult out = helper.output();
EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
@@ -4220,7 +4217,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, NetLog) {
// on the network, but issued a Read for only 5 of those bytes) that the data
// flow still works correctly.
TEST_P(SpdyNetworkTransactionSpdy3Test, BufferFull) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -4313,7 +4310,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, BufferFull) {
// at the same time, ensure that we don't notify a read completion for
// each data frame individually.
TEST_P(SpdyNetworkTransactionSpdy3Test, Buffering) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -4407,7 +4404,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, Buffering) {
// Verify the case where we buffer data but read it after it has been buffered.
TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedAll) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -4498,7 +4495,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedAll) {
// Verify the case where we buffer data and close the connection.
TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedClosed) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
@@ -4588,7 +4585,7 @@ TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedClosed) {
// Verify the case where we buffer data and cancel the transaction.
TEST_P(SpdyNetworkTransactionSpdy3Test, BufferedCancelled) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
MockWrite writes[] = { CreateMockWrite(*req) };
diff --git a/net/spdy/spdy_proxy_client_socket_spdy2_unittest.cc b/net/spdy/spdy_proxy_client_socket_spdy2_unittest.cc
index 424514c..5216e4a 100644
--- a/net/spdy/spdy_proxy_client_socket_spdy2_unittest.cc
+++ b/net/spdy/spdy_proxy_client_socket_spdy2_unittest.cc
@@ -67,10 +67,6 @@ class SpdyProxyClientSocketSpdy2Test : public PlatformTest {
virtual void TearDown();
protected:
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
- }
-
void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes,
size_t writes_count);
SpdyFrame* ConstructConnectRequestFrame();
@@ -131,7 +127,6 @@ class SpdyProxyClientSocketSpdy2Test : public PlatformTest {
ProxyServer proxy_;
HostPortProxyPair endpoint_host_port_proxy_pair_;
scoped_refptr<TransportSocketParams> transport_params_;
- SpdyTestStateHelper spdy_state_;
DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocketSpdy2Test);
};
@@ -145,7 +140,7 @@ SpdyProxyClientSocketSpdy2Test::SpdyProxyClientSocketSpdy2Test()
connect_data_(SYNCHRONOUS, OK),
spdy_session_(NULL),
spdy_stream_(NULL),
- framer_(2),
+ framer_(2, false),
user_agent_(kUserAgent),
url_(kRequestUrl),
proxy_host_port_(kProxyHost, kProxyPort),
diff --git a/net/spdy/spdy_proxy_client_socket_spdy3_unittest.cc b/net/spdy/spdy_proxy_client_socket_spdy3_unittest.cc
index 19ae6a7..627568f 100644
--- a/net/spdy/spdy_proxy_client_socket_spdy3_unittest.cc
+++ b/net/spdy/spdy_proxy_client_socket_spdy3_unittest.cc
@@ -67,10 +67,6 @@ class SpdyProxyClientSocketSpdy3Test : public PlatformTest {
virtual void TearDown();
protected:
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
- }
-
void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes,
size_t writes_count);
SpdyFrame* ConstructConnectRequestFrame();
@@ -131,7 +127,6 @@ class SpdyProxyClientSocketSpdy3Test : public PlatformTest {
ProxyServer proxy_;
HostPortProxyPair endpoint_host_port_proxy_pair_;
scoped_refptr<TransportSocketParams> transport_params_;
- SpdyTestStateHelper spdy_state_;
DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocketSpdy3Test);
};
@@ -145,7 +140,7 @@ SpdyProxyClientSocketSpdy3Test::SpdyProxyClientSocketSpdy3Test()
connect_data_(SYNCHRONOUS, OK),
spdy_session_(NULL),
spdy_stream_(NULL),
- framer_(3),
+ framer_(3, false),
user_agent_(kUserAgent),
url_(kRequestUrl),
proxy_host_port_(kProxyHost, kProxyPort),
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 77dcb1c..d0932bf 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -177,20 +177,13 @@ Value* NetLogSpdyGoAwayCallback(SpdyStreamId last_stream_id,
return dict;
}
-NextProto g_default_protocol = kProtoUnknown;
// Maximum number of concurrent streams we will create, unless the server
// sends a SETTINGS frame with a different value.
-size_t g_init_max_concurrent_streams = 100;
+const size_t kInitialMaxConcurrentStreams = 100;
// The maximum number of concurrent streams we will ever create. Even if
// the server permits more, we will never exceed this limit.
-size_t g_max_concurrent_stream_limit = 256;
-size_t g_default_initial_rcv_window_size = 10 * 1024 * 1024; // 10MB
-bool g_enable_ping_based_connection_checking = true;
-bool g_enable_credential_frames = false;
-
-typedef base::TimeTicks (*ExternalTimeFunc)(void);
-
-static ExternalTimeFunc g_time_func = base::TimeTicks::Now;
+const size_t kMaxConcurrentStreamLimit = 256;
+const size_t kDefaultInitialRecvWindowSize = 10 * 1024 * 1024; // 10MB
} // namespace
@@ -216,71 +209,19 @@ SpdyIOBuffer* SpdySession::SpdyIOBufferProducer::CreateIOBuffer(
return new SpdyIOBuffer(buffer, size, priority, stream);
}
-// static
-void SpdySession::set_default_protocol(NextProto default_protocol) {
- g_default_protocol = default_protocol;
-}
-
-// static
-void SpdySession::set_max_concurrent_streams(size_t value) {
- g_max_concurrent_stream_limit = value;
-}
-
-// static
-void SpdySession::set_enable_ping_based_connection_checking(bool enable) {
- g_enable_ping_based_connection_checking = enable;
-}
-
-// static
-void SpdySession::set_enable_credential_frames(bool enable) {
- g_enable_credential_frames = enable;
-}
-
-
-// static
-void SpdySession::set_init_max_concurrent_streams(size_t value) {
- g_init_max_concurrent_streams =
- std::min(value, g_max_concurrent_stream_limit);
-}
-
-// static
-void SpdySession::set_default_initial_recv_window_size(size_t value) {
- g_default_initial_rcv_window_size = value;
-}
-
-// static
-void SpdySession::ResetStaticSettingsToInit() {
- // WARNING: These must match the initializers above.
- g_default_protocol = kProtoUnknown;
- g_init_max_concurrent_streams = 100;
- g_max_concurrent_stream_limit = 256;
- g_default_initial_rcv_window_size = kSpdyStreamInitialWindowSize;
- g_enable_ping_based_connection_checking = true;
- g_enable_credential_frames = false;
- g_time_func = base::TimeTicks::Now;
-}
-
-// Outside of tests, g_time_func will always be base::TimeTicks::Now.
-// When performing linker optimization for the main executable, the compiler
-// should be able to see that set_time_func() is an uncalled function, that
-// the static .cc variable never changes, and thus that the extra pointer
-// indirection can be removed.
-
-
-
-SpdySession::TimeFunc SpdySession::set_time_func(
- SpdySession::TimeFunc time_func) {
- SpdySession::TimeFunc old_time_func =
- static_cast<SpdySession::TimeFunc>(g_time_func);
- g_time_func = static_cast<ExternalTimeFunc>(time_func);
- return old_time_func;
-}
-
SpdySession::SpdySession(const HostPortProxyPair& host_port_proxy_pair,
SpdySessionPool* spdy_session_pool,
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 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)
: ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
@@ -297,7 +238,12 @@ SpdySession::SpdySession(const HostPortProxyPair& host_port_proxy_pair,
certificate_error_code_(OK),
error_(OK),
state_(IDLE),
- max_concurrent_streams_(g_init_max_concurrent_streams),
+ max_concurrent_streams_(initial_max_concurrent_streams == 0 ?
+ kInitialMaxConcurrentStreams :
+ initial_max_concurrent_streams),
+ max_concurrent_streams_limit_(max_concurrent_streams_limit == 0 ?
+ kMaxConcurrentStreamLimit :
+ max_concurrent_streams_limit),
streams_initiated_count_(0),
streams_pushed_count_(0),
streams_pushed_and_claimed_count_(0),
@@ -312,21 +258,29 @@ SpdySession::SpdySession(const HostPortProxyPair& host_port_proxy_pair,
check_ping_status_pending_(false),
flow_control_(false),
initial_send_window_size_(kSpdyStreamInitialWindowSize),
- initial_recv_window_size_(g_default_initial_rcv_window_size),
+ initial_recv_window_size_(initial_recv_window_size == 0 ?
+ kDefaultInitialRecvWindowSize :
+ initial_recv_window_size),
net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SPDY_SESSION)),
verify_domain_authentication_(verify_domain_authentication),
enable_sending_initial_settings_(enable_sending_initial_settings),
+ enable_credential_frames_(enable_credential_frames),
+ enable_compression_(enable_compression),
+ enable_ping_based_connection_checking_(
+ enable_ping_based_connection_checking),
+ default_protocol_(default_protocol),
credential_state_(SpdyCredentialState::kDefaultNumSlots),
connection_at_risk_of_loss_time_(
base::TimeDelta::FromSeconds(kDefaultConnectionAtRiskOfLossSeconds)),
hung_interval_(
base::TimeDelta::FromSeconds(kHungIntervalSeconds)),
- trusted_spdy_proxy_(trusted_spdy_proxy) {
+ trusted_spdy_proxy_(trusted_spdy_proxy),
+ time_func_(time_func) {
DCHECK(HttpStreamFactory::spdy_enabled());
net_log_.BeginEvent(
NetLog::TYPE_SPDY_SESSION,
base::Bind(&NetLogSpdySessionCallback, &host_port_proxy_pair_));
- next_unclaimed_push_stream_sweep_time_ = g_time_func() +
+ next_unclaimed_push_stream_sweep_time_ = time_func_() +
base::TimeDelta::FromSeconds(kMinPushedStreamLifetimeSeconds);
// TODO(mbelshe): consider randomization of the stream_hi_water_mark.
}
@@ -389,7 +343,7 @@ net::Error SpdySession::InitializeWithSocket(
is_secure_ = is_secure;
certificate_error_code_ = certificate_error_code;
- NextProto protocol = g_default_protocol;
+ NextProto protocol = default_protocol_;
NextProto protocol_negotiated = connection->socket()->GetNegotiatedProtocol();
if (protocol_negotiated != kProtoUnknown) {
protocol = protocol_negotiated;
@@ -408,7 +362,8 @@ net::Error SpdySession::InitializeWithSocket(
int version = (protocol == kProtoSPDY3) ? 3 : 2;
flow_control_ = (protocol >= kProtoSPDY3);
- buffered_spdy_framer_.reset(new BufferedSpdyFramer(version));
+ buffered_spdy_framer_.reset(new BufferedSpdyFramer(version,
+ enable_compression_));
buffered_spdy_framer_->set_visitor(this);
SendInitialSettings();
UMA_HISTOGRAM_ENUMERATION("Net.SpdyVersion", protocol, kProtoMaximumVersion);
@@ -435,7 +390,7 @@ bool SpdySession::VerifyDomainAuthentication(const std::string& domain) {
return true; // This is not a secure session, so all domains are okay.
return !ssl_info.client_cert_sent &&
- (g_enable_credential_frames || !ssl_info.channel_id_sent ||
+ (enable_credential_frames_ || !ssl_info.channel_id_sent ||
ServerBoundCertService::GetDomainForHost(domain) ==
ServerBoundCertService::GetDomainForHost(
host_port_proxy_pair_.first.host())) &&
@@ -1471,7 +1426,7 @@ void SpdySession::OnSynStream(SpdyStreamId stream_id,
DeleteExpiredPushedStreams();
unclaimed_pushed_streams_[url] =
std::pair<scoped_refptr<SpdyStream>, base::TimeTicks> (
- stream, g_time_func());
+ stream, time_func_());
ActivateStream(stream);
@@ -1490,11 +1445,11 @@ void SpdySession::DeleteExpiredPushedStreams() {
return;
// Check that adequate time has elapsed since the last sweep.
- if (g_time_func() < next_unclaimed_push_stream_sweep_time_)
+ if (time_func_() < next_unclaimed_push_stream_sweep_time_)
return;
// Delete old streams.
- base::TimeTicks minimum_freshness = g_time_func() -
+ base::TimeTicks minimum_freshness = time_func_() -
base::TimeDelta::FromSeconds(kMinPushedStreamLifetimeSeconds);
PushedStreamMap::iterator it;
for (it = unclaimed_pushed_streams_.begin();
@@ -1513,7 +1468,7 @@ void SpdySession::DeleteExpiredPushedStreams() {
streams_abandoned_count_++;
}
}
- next_unclaimed_push_stream_sweep_time_ = g_time_func() +
+ next_unclaimed_push_stream_sweep_time_ = time_func_() +
base::TimeDelta::FromSeconds(kMinPushedStreamLifetimeSeconds);
}
@@ -1792,7 +1747,7 @@ void SpdySession::HandleSetting(uint32 id, uint32 value) {
switch (id) {
case SETTINGS_MAX_CONCURRENT_STREAMS:
max_concurrent_streams_ = std::min(static_cast<size_t>(value),
- g_max_concurrent_stream_limit);
+ kMaxConcurrentStreamLimit);
ProcessPendingCreateStreams();
break;
case SETTINGS_INITIAL_WINDOW_SIZE:
@@ -1829,7 +1784,7 @@ void SpdySession::UpdateStreamsSendWindowSize(int32 delta_window_size) {
}
void SpdySession::SendPrefacePingIfNoneInFlight() {
- if (pings_in_flight_ || !g_enable_ping_based_connection_checking)
+ if (pings_in_flight_ || !enable_ping_based_connection_checking_)
return;
base::TimeTicks now = base::TimeTicks::Now();
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h
index 22cd612..a51daae 100644
--- a/net/spdy/spdy_session.h
+++ b/net/spdy/spdy_session.h
@@ -94,6 +94,8 @@ COMPILE_ASSERT(PROTOCOL_ERROR_UNEXPECTED_PING ==
class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
public BufferedSpdyFramerVisitorInterface {
public:
+ typedef base::TimeTicks (*TimeFunc)(void);
+
// Defines an interface for producing SpdyIOBuffers.
class NET_EXPORT_PRIVATE SpdyIOBufferProducer {
public:
@@ -132,6 +134,14 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
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 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);
@@ -249,30 +259,6 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// if server bound certs are not supported in this session.
ServerBoundCertService* GetServerBoundCertService() const;
- // Reset all static settings to initialized values. Used to init test suite.
- static void ResetStaticSettingsToInit();
-
- // Specify the SPDY protocol to be used for SPDY session which do not use NPN
- // to negotiate a particular protocol.
- static void set_default_protocol(NextProto default_protocol);
-
- // Sets the max concurrent streams per session, as a ceiling on any server
- // specific SETTINGS value.
- static void set_max_concurrent_streams(size_t value);
-
- // Enable sending of PING frame with each request.
- static void set_enable_ping_based_connection_checking(bool enable);
-
- // Enable the sending of CREDENTIAL frames.
- static void set_enable_credential_frames(bool enable);
-
- // The initial max concurrent streams per session, can be overridden by the
- // server via SETTINGS.
- static void set_init_max_concurrent_streams(size_t value);
-
- // Sets the initial receive window size for newly created sessions.
- static void set_default_initial_recv_window_size(size_t value);
-
// Send WINDOW_UPDATE frame, called by a stream whenever receive window
// size is increased.
void SendWindowUpdate(SpdyStreamId stream_id, int32 delta_window_size);
@@ -425,8 +411,6 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
CLOSED
};
- typedef base::TimeTicks (*TimeFunc)(void);
-
virtual ~SpdySession();
void ProcessPendingCreateStreams();
@@ -560,8 +544,6 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// Helper methods for testing
// --------------------------
- static TimeFunc set_time_func(TimeFunc new_time_func);
-
void set_connection_at_risk_of_loss_time(base::TimeDelta duration) {
connection_at_risk_of_loss_time_ = duration;
}
@@ -666,6 +648,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// Limits
size_t max_concurrent_streams_; // 0 if no limit
+ size_t max_concurrent_streams_limit_;
// Some statistics counters for the session.
int streams_initiated_count_;
@@ -717,6 +700,10 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// Outside of tests, these should always be true.
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_;
SpdyCredentialState credential_state_;
@@ -745,6 +732,8 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>,
// This SPDY proxy is allowed to push resources from origins that are
// different from those of their associated streams.
HostPortPair trusted_spdy_proxy_;
+
+ TimeFunc time_func_;
};
} // namespace net
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 3c9db1d..a9279d2 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -36,20 +36,41 @@ bool HostPortProxyPairsAreEqual(const HostPortProxyPair& a,
// The maximum number of sessions to open to a single domain.
static const size_t kMaxSessionsPerDomain = 1;
-size_t SpdySessionPool::g_max_sessions_per_domain = kMaxSessionsPerDomain;
-bool SpdySessionPool::g_force_single_domain = false;
-bool SpdySessionPool::g_enable_ip_pooling = true;
-
SpdySessionPool::SpdySessionPool(
HostResolver* resolver,
SSLConfigService* ssl_config_service,
HttpServerProperties* http_server_properties,
+ size_t max_sessions_per_domain,
+ 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 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)
: http_server_properties_(http_server_properties),
ssl_config_service_(ssl_config_service),
resolver_(resolver),
verify_domain_authentication_(true),
enable_sending_initial_settings_(true),
+ max_sessions_per_domain_(max_sessions_per_domain == 0 ?
+ kMaxSessionsPerDomain :
+ max_sessions_per_domain),
+ force_single_domain_(force_single_domain),
+ enable_ip_pooling_(enable_ip_pooling),
+ enable_credential_frames_(enable_credential_frames),
+ enable_compression_(enable_compression),
+ enable_ping_based_connection_checking_(
+ enable_ping_based_connection_checking),
+ default_protocol_(default_protocol),
+ initial_recv_window_size_(initial_recv_window_size),
+ initial_max_concurrent_streams_(initial_max_concurrent_streams),
+ max_concurrent_streams_limit_(max_concurrent_streams_limit),
+ time_func_(time_func),
trusted_spdy_proxy_(
HostPortPair::FromString(trusted_spdy_proxy)) {
NetworkChangeNotifier::AddIPAddressObserver(this);
@@ -107,7 +128,7 @@ scoped_refptr<SpdySession> SpdySessionPool::GetInternal(
}
DCHECK(list);
- if (list->size() && list->size() == g_max_sessions_per_domain) {
+ if (list->size() && list->size() == max_sessions_per_domain_) {
UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet",
FOUND_EXISTING,
SPDY_SESSION_GET_MAX);
@@ -124,6 +145,14 @@ scoped_refptr<SpdySession> SpdySessionPool::GetInternal(
http_server_properties_,
verify_domain_authentication_,
enable_sending_initial_settings_,
+ enable_credential_frames_,
+ enable_compression_,
+ enable_ping_based_connection_checking_,
+ default_protocol_,
+ initial_recv_window_size_,
+ initial_max_concurrent_streams_,
+ max_concurrent_streams_limit_,
+ time_func_,
trusted_spdy_proxy_,
net_log.net_log());
UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet",
@@ -133,7 +162,7 @@ scoped_refptr<SpdySession> SpdySessionPool::GetInternal(
net_log.AddEvent(
NetLog::TYPE_SPDY_SESSION_POOL_CREATED_NEW_SESSION,
spdy_session->net_log().source().ToEventParametersCallback());
- DCHECK_LE(list->size(), g_max_sessions_per_domain);
+ DCHECK_LE(list->size(), max_sessions_per_domain_);
return spdy_session;
}
@@ -152,6 +181,14 @@ net::Error SpdySessionPool::GetSpdySessionFromSocket(
http_server_properties_,
verify_domain_authentication_,
enable_sending_initial_settings_,
+ enable_credential_frames_,
+ enable_compression_,
+ enable_ping_based_connection_checking_,
+ default_protocol_,
+ initial_recv_window_size_,
+ initial_max_concurrent_streams_,
+ max_concurrent_streams_limit_,
+ time_func_,
trusted_spdy_proxy_,
net_log.net_log());
SpdySessionList* list = GetSessionList(host_port_proxy_pair);
@@ -169,7 +206,7 @@ net::Error SpdySessionPool::GetSpdySessionFromSocket(
// potentially be pooled with this one. Because GetPeerAddress() reports the
// proxy's address instead of the origin server, check to see if this is a
// direct connection.
- if (g_enable_ip_pooling && host_port_proxy_pair.second.is_direct()) {
+ if (enable_ip_pooling_ && host_port_proxy_pair.second.is_direct()) {
IPEndPoint address;
if (connection->socket()->GetPeerAddress(&address) == OK)
AddAlias(address, host_port_proxy_pair);
@@ -267,7 +304,7 @@ scoped_refptr<SpdySession> SpdySessionPool::GetFromAlias(
// We should only be checking aliases when there is no direct session.
DCHECK(!GetSessionList(host_port_proxy_pair));
- if (!g_enable_ip_pooling)
+ if (!enable_ip_pooling_)
return NULL;
AddressList addresses;
@@ -323,7 +360,7 @@ void SpdySessionPool::OnCertTrustChanged(const X509Certificate* cert) {
const HostPortProxyPair& SpdySessionPool::NormalizeListPair(
const HostPortProxyPair& host_port_proxy_pair) const {
- if (!g_force_single_domain)
+ if (!force_single_domain_)
return host_port_proxy_pair;
static HostPortProxyPair* single_domain_pair = NULL;
@@ -379,7 +416,7 @@ bool SpdySessionPool::LookupAddresses(const HostPortProxyPair& pair,
void SpdySessionPool::AddAlias(const IPEndPoint& endpoint,
const HostPortProxyPair& pair) {
- DCHECK(g_enable_ip_pooling);
+ DCHECK(enable_ip_pooling_);
aliases_[endpoint] = pair;
}
diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h
index ebd9668..b77f28b 100644
--- a/net/spdy/spdy_session_pool.h
+++ b/net/spdy/spdy_session_pool.h
@@ -21,6 +21,7 @@
#include "net/base/ssl_config_service.h"
#include "net/proxy/proxy_config.h"
#include "net/proxy/proxy_server.h"
+#include "net/socket/next_proto.h"
namespace net {
@@ -45,9 +46,22 @@ class NET_EXPORT SpdySessionPool
public SSLConfigService::Observer,
public CertDatabase::Observer {
public:
+ typedef base::TimeTicks (*TimeFunc)(void);
+
SpdySessionPool(HostResolver* host_resolver,
SSLConfigService* ssl_config_service,
HttpServerProperties* http_server_properties,
+ size_t max_sessions_per_domain,
+ 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 default_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();
@@ -62,12 +76,6 @@ class NET_EXPORT SpdySessionPool
const HostPortProxyPair& host_port_proxy_pair,
const BoundNetLog& net_log);
- // Set the maximum concurrent sessions per domain.
- static void set_max_sessions_per_domain(int max) {
- if (max >= 1)
- g_max_sessions_per_domain = max;
- }
-
// Builds a SpdySession from an existing SSL socket. Users should try
// calling Get() first to use an existing SpdySession so we don't get
// multiple SpdySessions per domain. Note that ownership of |connection| is
@@ -126,13 +134,6 @@ class NET_EXPORT SpdySessionPool
// We perform the same flushing as described above when SSL settings change.
virtual void OnSSLConfigChanged() OVERRIDE;
- // A debugging mode where we compress all accesses through a single domain.
- static void ForceSingleDomain() { g_force_single_domain = true; }
-
- // Controls whether the pool allows use of a common session for domains
- // which share IP address resolutions.
- static void enable_ip_pooling(bool value) { g_enable_ip_pooling = value; }
-
// CertDatabase::Observer methods:
virtual void OnCertAdded(const X509Certificate* cert) OVERRIDE;
virtual void OnCertTrustChanged(const X509Certificate* cert) OVERRIDE;
@@ -197,17 +198,25 @@ class NET_EXPORT SpdySessionPool
// A map of IPEndPoint aliases for sessions.
SpdyAliasMap aliases_;
- static size_t g_max_sessions_per_domain;
static bool g_force_single_domain;
- static bool g_enable_ip_pooling;
const scoped_refptr<SSLConfigService> ssl_config_service_;
HostResolver* const resolver_;
// Defaults to true. May be controlled via SpdySessionPoolPeer for tests.
bool verify_domain_authentication_;
-
bool enable_sending_initial_settings_;
+ size_t max_sessions_per_domain_;
+ 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 initial_recv_window_size_;
+ size_t initial_max_concurrent_streams_;
+ size_t max_concurrent_streams_limit_;
+ TimeFunc time_func_;
// This SPDY proxy is allowed to push resources from origins that are
// different from those of their associated streams.
diff --git a/net/spdy/spdy_session_spdy2_unittest.cc b/net/spdy/spdy_session_spdy2_unittest.cc
index 636defe..17c9c53 100644
--- a/net/spdy/spdy_session_spdy2_unittest.cc
+++ b/net/spdy/spdy_session_spdy2_unittest.cc
@@ -19,9 +19,9 @@ namespace net {
namespace {
-base::TimeTicks the_near_future() {
- return base::TimeTicks::Now() +
- base::TimeDelta::FromSeconds(301);
+static int g_delta_seconds = 0;
+base::TimeTicks TheNearFuture() {
+ return base::TimeTicks::Now() + base::TimeDelta::FromSeconds(g_delta_seconds);
}
class ClosingDelegate : public SpdyStream::Delegate {
@@ -57,16 +57,11 @@ class ClosingDelegate : public SpdyStream::Delegate {
} // namespace
-// TODO(cbentzel): Expose compression setter/getter in public SpdySession
-// interface rather than going through all these contortions.
class SpdySessionSpdy2Test : public PlatformTest {
protected:
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
+ void SetUp() {
+ g_delta_seconds = 0;
}
-
- private:
- SpdyTestStateHelper spdy_state_;
};
class TestSpdyStreamDelegate : public net::SpdyStream::Delegate {
@@ -271,8 +266,6 @@ TEST_F(SpdySessionSpdy2Test, ClientPing) {
base::TimeTicks before_ping_time = base::TimeTicks::Now();
- // Enable sending of PING.
- SpdySession::set_enable_ping_based_connection_checking(true);
session->set_connection_at_risk_of_loss_time(base::TimeDelta::FromSeconds(0));
session->set_hung_interval(base::TimeDelta::FromMilliseconds(50));
@@ -372,6 +365,7 @@ TEST_F(SpdySessionSpdy2Test, DeleteExpiredPushStreams) {
SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
session_deps.socket_factory->AddSSLSocketDataProvider(&ssl);
+ session_deps.time_func = TheNearFuture;
scoped_refptr<HttpNetworkSession> http_session(
SpdySessionDependencies::SpdyCreateSession(&session_deps));
@@ -388,7 +382,7 @@ TEST_F(SpdySessionSpdy2Test, DeleteExpiredPushStreams) {
EXPECT_TRUE(spdy_session_pool->HasSession(pair));
// Give the session a SPDY2 framer.
- session->buffered_spdy_framer_.reset(new BufferedSpdyFramer(2));
+ session->buffered_spdy_framer_.reset(new BufferedSpdyFramer(2, false));
// Create the associated stream and add to active streams.
scoped_ptr<SpdyHeaderBlock> request_headers(new SpdyHeaderBlock);
@@ -412,7 +406,7 @@ TEST_F(SpdySessionSpdy2Test, DeleteExpiredPushStreams) {
EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter);
// Shift time.
- SpdySession::set_time_func(the_near_future);
+ g_delta_seconds = 301;
headers["url"] = "http://www.google.com/b.dat";
session->OnSynStream(4, 1, 0, 0, true, false, headers);
@@ -490,8 +484,6 @@ TEST_F(SpdySessionSpdy2Test, FailedPing) {
new TestSpdyStreamDelegate(callback1.callback()));
spdy_stream1->SetDelegate(delegate.get());
- // Enable sending of PING.
- SpdySession::set_enable_ping_based_connection_checking(true);
session->set_connection_at_risk_of_loss_time(base::TimeDelta::FromSeconds(0));
session->set_hung_interval(base::TimeDelta::FromSeconds(0));
diff --git a/net/spdy/spdy_session_spdy3_unittest.cc b/net/spdy/spdy_session_spdy3_unittest.cc
index e03156d..21fd700 100644
--- a/net/spdy/spdy_session_spdy3_unittest.cc
+++ b/net/spdy/spdy_session_spdy3_unittest.cc
@@ -21,9 +21,9 @@ namespace net {
namespace {
-base::TimeTicks the_near_future() {
- return base::TimeTicks::Now() +
- base::TimeDelta::FromSeconds(301);
+static int g_delta_seconds = 0;
+base::TimeTicks TheNearFuture() {
+ return base::TimeTicks::Now() + base::TimeDelta::FromSeconds(g_delta_seconds);
}
class ClosingDelegate : public SpdyStream::Delegate {
@@ -99,17 +99,13 @@ class TestSpdyStreamDelegate : public SpdyStream::Delegate {
} // namespace
-// TODO(cbentzel): Expose compression setter/getter in public SpdySession
-// interface rather than going through all these contortions.
class SpdySessionSpdy3Test : public PlatformTest {
protected:
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
+ void SetUp() {
+ g_delta_seconds = 0;
}
-
- private:
- SpdyTestStateHelper spdy_state_;
};
+
// Test the SpdyIOBuffer class.
TEST_F(SpdySessionSpdy3Test, SpdyIOBuffer) {
std::priority_queue<SpdyIOBuffer> queue_;
@@ -208,6 +204,7 @@ TEST_F(SpdySessionSpdy3Test, GoAway) {
TEST_F(SpdySessionSpdy3Test, ClientPing) {
SpdySessionDependencies session_deps;
+ session_deps.enable_ping = true;
session_deps.host_resolver->set_synchronous_mode(true);
MockConnect connect_data(SYNCHRONOUS, OK);
@@ -272,8 +269,6 @@ TEST_F(SpdySessionSpdy3Test, ClientPing) {
base::TimeTicks before_ping_time = base::TimeTicks::Now();
- // Enable sending of PING.
- SpdySession::set_enable_ping_based_connection_checking(true);
session->set_connection_at_risk_of_loss_time(base::TimeDelta::FromSeconds(0));
session->set_hung_interval(base::TimeDelta::FromMilliseconds(50));
@@ -373,6 +368,7 @@ TEST_F(SpdySessionSpdy3Test, DeleteExpiredPushStreams) {
SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
session_deps.socket_factory->AddSSLSocketDataProvider(&ssl);
+ session_deps.time_func = TheNearFuture;
scoped_refptr<HttpNetworkSession> http_session(
SpdySessionDependencies::SpdyCreateSession(&session_deps));
@@ -389,7 +385,7 @@ TEST_F(SpdySessionSpdy3Test, DeleteExpiredPushStreams) {
EXPECT_TRUE(spdy_session_pool->HasSession(pair));
// Give the session a SPDY3 framer.
- session->buffered_spdy_framer_.reset(new BufferedSpdyFramer(3));
+ session->buffered_spdy_framer_.reset(new BufferedSpdyFramer(3, false));
// Create the associated stream and add to active streams.
scoped_ptr<SpdyHeaderBlock> request_headers(new SpdyHeaderBlock);
@@ -415,7 +411,7 @@ TEST_F(SpdySessionSpdy3Test, DeleteExpiredPushStreams) {
EXPECT_TRUE(session->unclaimed_pushed_streams_.end() != iter);
// Shift time.
- SpdySession::set_time_func(the_near_future);
+ g_delta_seconds = 301;
headers[":scheme"] = "http";
headers[":host"] = "www.google.com";
@@ -495,8 +491,6 @@ TEST_F(SpdySessionSpdy3Test, FailedPing) {
new TestSpdyStreamDelegate(callback1.callback()));
spdy_stream1->SetDelegate(delegate.get());
- // Enable sending of PING.
- SpdySession::set_enable_ping_based_connection_checking(true);
session->set_connection_at_risk_of_loss_time(base::TimeDelta::FromSeconds(0));
session->set_hung_interval(base::TimeDelta::FromSeconds(0));
@@ -867,7 +861,7 @@ TEST_F(SpdySessionSpdy3Test, SendInitialSettingsOnNewSession) {
MockWrite writes[] = {
CreateMockWrite(*settings_frame),
};
- SpdySession::set_default_initial_recv_window_size(kInitialRecvWindowSize);
+ session_deps.initial_recv_window_size = kInitialRecvWindowSize;
StaticSocketDataProvider data(
reads, arraysize(reads), writes, arraysize(writes));
diff --git a/net/spdy/spdy_stream_spdy2_unittest.cc b/net/spdy/spdy_stream_spdy2_unittest.cc
index 10c24a85..602ff31 100644
--- a/net/spdy/spdy_stream_spdy2_unittest.cc
+++ b/net/spdy/spdy_stream_spdy2_unittest.cc
@@ -23,7 +23,7 @@ namespace net {
namespace {
SpdyFrame* ConstructSpdyBodyFrame(const char* data, int length) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateDataFrame(1, data, length, DATA_FLAG_NONE);
}
@@ -44,18 +44,11 @@ class SpdyStreamSpdy2Test : public testing::Test {
return session;
}
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
- }
-
virtual void TearDown() {
MessageLoop::current()->RunUntilIdle();
}
scoped_refptr<HttpNetworkSession> session_;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
TEST_F(SpdyStreamSpdy2Test, SendDataAfterOpen) {
diff --git a/net/spdy/spdy_stream_spdy3_unittest.cc b/net/spdy/spdy_stream_spdy3_unittest.cc
index 53a8f9a..3b07ea4 100644
--- a/net/spdy/spdy_stream_spdy3_unittest.cc
+++ b/net/spdy/spdy_stream_spdy3_unittest.cc
@@ -23,7 +23,7 @@ namespace net {
namespace {
SpdyFrame* ConstructSpdyBodyFrame(const char* data, int length) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateDataFrame(1, data, length, DATA_FLAG_NONE);
}
@@ -44,18 +44,11 @@ class SpdyStreamSpdy3Test : public testing::Test {
return session;
}
- virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
- }
-
virtual void TearDown() {
MessageLoop::current()->RunUntilIdle();
}
scoped_refptr<HttpNetworkSession> session_;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
TEST_F(SpdyStreamSpdy3Test, SendDataAfterOpen) {
diff --git a/net/spdy/spdy_test_util_spdy2.cc b/net/spdy/spdy_test_util_spdy2.cc
index 624a248..5f5e017 100644
--- a/net/spdy/spdy_test_util_spdy2.cc
+++ b/net/spdy/spdy_test_util_spdy2.cc
@@ -170,11 +170,11 @@ int AppendToBuffer(int val,
// |buffer| is the buffer we're filling in.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPacket(const SpdyHeaderInfo& header_info,
- const char* const extra_headers[],
- int extra_header_count,
- const char* const tail[],
- int tail_header_count) {
- BufferedSpdyFramer framer(2);
+ const char* const extra_headers[],
+ int extra_header_count,
+ const char* const tail[],
+ int tail_header_count) {
+ BufferedSpdyFramer framer(2, header_info.compressed);
SpdyHeaderBlock headers;
// Copy in the extra headers to our map.
AppendHeadersToSpdyFrame(extra_headers, extra_header_count, &headers);
@@ -213,7 +213,7 @@ SpdyFrame* ConstructSpdyPacket(const SpdyHeaderInfo& header_info,
// |settings| are the settings to set.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateSettings(settings);
}
@@ -222,21 +222,21 @@ SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) {
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyCredential(
const SpdyCredential& credential) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateCredentialFrame(credential);
}
// Construct a SPDY PING frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyPing(uint32 ping_id) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreatePingFrame(ping_id);
}
// Construct a SPDY GOAWAY frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyGoAway() {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateGoAway(0, GOAWAY_OK);
}
@@ -244,15 +244,15 @@ SpdyFrame* ConstructSpdyGoAway() {
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyWindowUpdate(
const SpdyStreamId stream_id, uint32 delta_window_size) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateWindowUpdate(stream_id, delta_window_size);
}
// Construct a SPDY RST_STREAM frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyRstStream(SpdyStreamId stream_id,
- SpdyStatusCodes status) {
- BufferedSpdyFramer framer(2);
+ SpdyStatusCodes status) {
+ BufferedSpdyFramer framer(2, false);
return framer.CreateRstStream(stream_id, status);
}
@@ -297,14 +297,14 @@ int ConstructSpdyHeader(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- SpdyControlType type,
- SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ SpdyControlType type,
+ SpdyControlFlags flags,
+ const char* const* kHeaders,
+ int kHeadersSize) {
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
compressed,
@@ -318,15 +318,15 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- SpdyControlType type,
- SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize,
- int associated_stream_id) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ SpdyControlType type,
+ SpdyControlFlags flags,
+ const char* const* kHeaders,
+ int kHeadersSize,
+ int associated_stream_id) {
const SpdyHeaderInfo kSynStartHeader = {
type, // Kind = Syn
stream_id, // Stream ID
@@ -335,10 +335,10 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
// Priority
flags, // Control Flags
compressed, // Compressed
- INVALID, // Status
+ INVALID, // Status
NULL, // Data
0, // Length
- DATA_FLAG_NONE // Data Flags
+ DATA_FLAG_NONE // Data Flags
};
return ConstructSpdyPacket(kSynStartHeader,
extra_headers,
@@ -353,20 +353,20 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const url,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority) {
const SpdyHeaderInfo kSynStartHeader = {
SYN_STREAM, // Kind = Syn
- stream_id, // Stream ID
- 0, // Associated stream ID
+ stream_id, // Stream ID
+ 0, // Associated stream ID
ConvertRequestPriorityToSpdyPriority(request_priority, 2),
- // Priority
+ // Priority
CONTROL_FLAG_FIN, // Control Flags
- compressed, // Compressed
+ compressed, // Compressed
INVALID, // Status
- NULL, // Data
- 0, // Length
+ NULL, // Data
+ 0, // Length
DATA_FLAG_NONE // Data Flags
};
@@ -392,10 +392,10 @@ SpdyFrame* ConstructSpdyGet(const char* const url,
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority) {
return ConstructSpdyGet(extra_headers, extra_header_count, compressed,
stream_id, request_priority, true);
}
@@ -405,22 +405,17 @@ SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- bool direct) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ bool direct) {
const char* const kStandardGetHeaders[] = {
- "method",
- "GET",
- "url",
- (direct ? "/" : "http://www.google.com/"),
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1"
+ "method", "GET",
+ "url", (direct ? "/" : "http://www.google.com/"),
+ "host", "www.google.com",
+ "scheme", "http",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -435,8 +430,8 @@ SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
// Constructs a standard SPDY SYN_STREAM frame for a CONNECT request.
SpdyFrame* ConstructSpdyConnect(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
+ int extra_header_count,
+ int stream_id) {
const char* const kConnectHeaders[] = {
"method", "CONNECT",
"url", "www.google.com:443",
@@ -459,16 +454,13 @@ SpdyFrame* ConstructSpdyConnect(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id) {
const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", "200",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -483,19 +475,15 @@ SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id,
+ const char* url) {
const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200 OK",
- "url",
- url,
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", "200 OK",
+ "url", url,
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -510,23 +498,18 @@ SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url,
- const char* status,
- const char* location) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id,
+ const char* url,
+ const char* status,
+ const char* location) {
const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- status,
- "location",
- location,
- "url",
- url,
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", status,
+ "location", location,
+ "url", url,
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -541,11 +524,10 @@ SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyPush(int stream_id,
- int associated_stream_id,
- const char* url) {
+ int associated_stream_id,
+ const char* url) {
const char* const kStandardGetHeaders[] = {
- "url",
- url
+ "url", url
};
return ConstructSpdyControlFrame(0,
0,
@@ -560,13 +542,11 @@ SpdyFrame* ConstructSpdyPush(int stream_id,
}
SpdyFrame* ConstructSpdyPushHeaders(int stream_id,
- const char* const extra_headers[],
- int extra_header_count) {
+ const char* const extra_headers[],
+ int extra_header_count) {
const char* const kStandardGetHeaders[] = {
- "status",
- "200 OK",
- "version",
- "HTTP/1.1"
+ "status", "200 OK",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -581,18 +561,14 @@ SpdyFrame* ConstructSpdyPushHeaders(int stream_id,
// Constructs a standard SPDY SYN_REPLY packet with the specified status code.
// Returns a SpdyFrame.
-SpdyFrame* ConstructSpdySynReplyError(
- const char* const status,
- const char* const* const extra_headers,
- int extra_header_count,
- int stream_id) {
+SpdyFrame* ConstructSpdySynReplyError(const char* const status,
+ const char* const* const extra_headers,
+ int extra_header_count,
+ int stream_id) {
const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- status,
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", status,
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -611,8 +587,7 @@ SpdyFrame* ConstructSpdySynReplyError(
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGetSynReplyRedirect(int stream_id) {
static const char* const kExtraHeaders[] = {
- "location",
- "http://www.foo.com/index.php",
+ "location", "http://www.foo.com/index.php",
};
return ConstructSpdySynReplyError("301 Moved Permanently", kExtraHeaders,
arraysize(kExtraHeaders)/2, stream_id);
@@ -625,23 +600,17 @@ SpdyFrame* ConstructSpdySynReplyError(int stream_id) {
return ConstructSpdySynReplyError("500 Internal Server Error", NULL, 0, 1);
}
-
-
-
// Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET.
// |extra_headers| are the extra header-value pairs, which typically
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
+ int extra_header_count,
+ int stream_id) {
static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", "200",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -660,22 +629,16 @@ SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPost(int64 content_length,
- const char* const extra_headers[],
- int extra_header_count) {
+ const char* const extra_headers[],
+ int extra_header_count) {
std::string length_str = base::Int64ToString(content_length);
const char* post_headers[] = {
- "method",
- "POST",
- "url",
- "/",
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1",
- "content-length",
- length_str.c_str()
+ "method", "POST",
+ "url", "/",
+ "host", "www.google.com",
+ "scheme", "http",
+ "version", "HTTP/1.1",
+ "content-length", length_str.c_str()
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -693,18 +656,13 @@ SpdyFrame* ConstructSpdyPost(int64 content_length,
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructChunkedSpdyPost(const char* const extra_headers[],
- int extra_header_count) {
+ int extra_header_count) {
const char* post_headers[] = {
- "method",
- "POST",
- "url",
- "/",
- "host",
- "www.google.com",
- "scheme",
- "http",
- "version",
- "HTTP/1.1"
+ "method", "POST",
+ "url", "/",
+ "host", "www.google.com",
+ "scheme", "http",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -722,16 +680,12 @@ SpdyFrame* ConstructChunkedSpdyPost(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[],
- int extra_header_count) {
+ int extra_header_count) {
static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- "status",
- "200",
- "url",
- "/index.php",
- "version",
- "HTTP/1.1"
+ "hello", "bye",
+ "status", "200",
+ "url", "/index.php",
+ "version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -746,7 +700,7 @@ SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[],
// Constructs a single SPDY data frame with the default contents.
SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) {
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateDataFrame(
stream_id, kUploadData, kUploadDataSize,
fin ? DATA_FLAG_FIN : DATA_FLAG_NONE);
@@ -754,16 +708,15 @@ SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) {
// Constructs a single SPDY data frame with the given content.
SpdyFrame* ConstructSpdyBodyFrame(int stream_id, const char* data,
- uint32 len, bool fin) {
- BufferedSpdyFramer framer(2);
+ uint32 len, bool fin) {
+ BufferedSpdyFramer framer(2, false);
return framer.CreateDataFrame(
stream_id, data, len, fin ? DATA_FLAG_FIN : DATA_FLAG_NONE);
}
// Wraps |frame| in the payload of a data frame in stream |stream_id|.
-SpdyFrame* ConstructWrappedSpdyFrame(
- const scoped_ptr<SpdyFrame>& frame,
- int stream_id) {
+SpdyFrame* ConstructWrappedSpdyFrame(const scoped_ptr<SpdyFrame>& frame,
+ int stream_id) {
return ConstructSpdyBodyFrame(stream_id, frame->data(),
frame->length() + SpdyFrame::kHeaderSize,
false);
@@ -906,6 +859,10 @@ SpdySessionDependencies::SpdySessionDependencies()
deterministic_socket_factory(new DeterministicMockClientSocketFactory),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+ enable_ip_pooling(true),
+ enable_compression(false),
+ enable_ping(false),
+ time_func(&base::TimeTicks::Now),
net_log(NULL) {
// Note: The CancelledTransaction test does cleanup by running all
// tasks in the message loop (RunAllPending). Unfortunately, that
@@ -925,6 +882,10 @@ SpdySessionDependencies::SpdySessionDependencies(ProxyService* proxy_service)
deterministic_socket_factory(new DeterministicMockClientSocketFactory),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+ enable_ip_pooling(true),
+ enable_compression(false),
+ enable_ping(false),
+ time_func(&base::TimeTicks::Now),
net_log(NULL) {}
SpdySessionDependencies::~SpdySessionDependencies() {}
@@ -963,6 +924,11 @@ net::HttpNetworkSession::Params SpdySessionDependencies::CreateSessionParams(
params.http_auth_handler_factory =
session_deps->http_auth_handler_factory.get();
params.http_server_properties = &session_deps->http_server_properties;
+ params.enable_spdy_ip_pooling = session_deps->enable_ip_pooling;
+ params.enable_spdy_compression = session_deps->enable_compression;
+ params.enable_spdy_ping_based_connection_checking = session_deps->enable_ping;
+ params.spdy_default_protocol = kProtoSPDY2;
+ params.time_func = session_deps->time_func;
params.trusted_spdy_proxy = session_deps->trusted_spdy_proxy;
params.net_log = session_deps->net_log;
return params;
@@ -985,6 +951,9 @@ SpdyURLRequestContext::SpdyURLRequestContext()
params.ssl_config_service = ssl_config_service();
params.http_auth_handler_factory = http_auth_handler_factory();
params.network_delegate = network_delegate();
+ params.enable_spdy_compression = false;
+ params.enable_spdy_ping_based_connection_checking = false;
+ params.spdy_default_protocol = kProtoSPDY2;
params.http_server_properties = http_server_properties();
scoped_refptr<HttpNetworkSession> network_session(
new HttpNetworkSession(params));
@@ -1014,19 +983,5 @@ const SpdyHeaderInfo MakeSpdyHeader(SpdyControlType type) {
return kHeader;
}
-SpdyTestStateHelper::SpdyTestStateHelper() {
- // Pings can be non-deterministic, because they are sent via timer.
- SpdySession::set_enable_ping_based_connection_checking(false);
- // Compression is per-session which makes it impossible to create
- // SPDY frames with static methods.
- BufferedSpdyFramer::set_enable_compression_default(false);
-}
-
-SpdyTestStateHelper::~SpdyTestStateHelper() {
- SpdySession::ResetStaticSettingsToInit();
- // TODO(rch): save/restore this value
- BufferedSpdyFramer::set_enable_compression_default(true);
-}
-
} // namespace test_spdy2
} // namespace net
diff --git a/net/spdy/spdy_test_util_spdy2.h b/net/spdy/spdy_test_util_spdy2.h
index 7be9ec1..1a9be94 100644
--- a/net/spdy/spdy_test_util_spdy2.h
+++ b/net/spdy/spdy_test_util_spdy2.h
@@ -19,6 +19,7 @@
#include "net/http/http_transaction_factory.h"
#include "net/proxy/proxy_service.h"
#include "net/socket/socket_test_util.h"
+#include "net/spdy/spdy_session.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_storage.h"
@@ -364,6 +365,10 @@ struct SpdySessionDependencies {
scoped_ptr<DeterministicMockClientSocketFactory> deterministic_socket_factory;
scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory;
HttpServerPropertiesImpl http_server_properties;
+ bool enable_ip_pooling;
+ bool enable_compression;
+ bool enable_ping;
+ SpdySession::TimeFunc time_func;
std::string trusted_spdy_proxy;
NetLog* net_log;
};
@@ -413,16 +418,6 @@ class SpdySessionPoolPeer {
DISALLOW_COPY_AND_ASSIGN(SpdySessionPoolPeer);
};
-// Helper to manage the state of a number of SPDY global variables.
-class SpdyTestStateHelper {
- public:
- SpdyTestStateHelper();
- ~SpdyTestStateHelper();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(SpdyTestStateHelper);
-};
-
} // namespace test_spdy2
} // namespace net
diff --git a/net/spdy/spdy_test_util_spdy3.cc b/net/spdy/spdy_test_util_spdy3.cc
index 1585906..79d8100 100644
--- a/net/spdy/spdy_test_util_spdy3.cc
+++ b/net/spdy/spdy_test_util_spdy3.cc
@@ -10,8 +10,6 @@
#include "base/compiler_specific.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
-#include "crypto/ec_private_key.h"
-#include "crypto/ec_signature_creator.h"
#include "net/base/mock_cert_verifier.h"
#include "net/http/http_network_session.h"
#include "net/http/http_network_transaction.h"
@@ -40,57 +38,50 @@ void ParseUrl(const char* const url, std::string* scheme, std::string* host,
}
}
-// An ECSignatureCreator that returns deterministic signatures.
-class MockECSignatureCreator : public crypto::ECSignatureCreator {
- public:
- explicit MockECSignatureCreator(crypto::ECPrivateKey* key) : key_(key) {}
-
- virtual bool Sign(const uint8* data,
- int data_len,
- std::vector<uint8>* signature) OVERRIDE {
- std::vector<uint8> private_key_value;
- key_->ExportValue(&private_key_value);
- std::string head = "fakesignature";
- std::string tail = "/fakesignature";
-
- signature->clear();
- signature->insert(signature->end(), head.begin(), head.end());
- signature->insert(signature->end(), private_key_value.begin(),
- private_key_value.end());
- signature->insert(signature->end(), '-');
- signature->insert(signature->end(), data, data + data_len);
- signature->insert(signature->end(), tail.begin(), tail.end());
- return true;
- }
+} // namespace
- virtual bool DecodeSignature(const std::vector<uint8>& signature,
- std::vector<uint8>* out_raw_sig) {
- *out_raw_sig = signature;
- return true;
- }
- private:
- crypto::ECPrivateKey* key_;
+MockECSignatureCreator::MockECSignatureCreator(crypto::ECPrivateKey* key)
+ : key_(key) {
+}
- DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreator);
-};
+bool MockECSignatureCreator::Sign(const uint8* data,
+ int data_len,
+ std::vector<uint8>* signature) {
+ std::vector<uint8> private_key_value;
+ key_->ExportValue(&private_key_value);
+ std::string head = "fakesignature";
+ std::string tail = "/fakesignature";
+
+ signature->clear();
+ signature->insert(signature->end(), head.begin(), head.end());
+ signature->insert(signature->end(), private_key_value.begin(),
+ private_key_value.end());
+ signature->insert(signature->end(), '-');
+ signature->insert(signature->end(), data, data + data_len);
+ signature->insert(signature->end(), tail.begin(), tail.end());
+ return true;
+}
-// An ECSignatureCreatorFactory creates MockECSignatureCreator.
-class MockECSignatureCreatorFactory : public crypto::ECSignatureCreatorFactory {
- public:
- MockECSignatureCreatorFactory() {}
- virtual ~MockECSignatureCreatorFactory() {}
+bool MockECSignatureCreator::DecodeSignature(
+ const std::vector<uint8>& signature,
+ std::vector<uint8>* out_raw_sig) {
+ *out_raw_sig = signature;
+ return true;
+}
- virtual crypto::ECSignatureCreator* Create(
- crypto::ECPrivateKey* key) OVERRIDE {
- return new MockECSignatureCreator(key);
- }
+MockECSignatureCreatorFactory::MockECSignatureCreatorFactory() {
+ crypto::ECSignatureCreator::SetFactoryForTesting(this);
+}
- private:
- DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreatorFactory);
-};
+MockECSignatureCreatorFactory::~MockECSignatureCreatorFactory() {
+ crypto::ECSignatureCreator::SetFactoryForTesting(NULL);
+}
-} // namespace
+crypto::ECSignatureCreator* MockECSignatureCreatorFactory::Create(
+ crypto::ECPrivateKey* key) {
+ return new MockECSignatureCreator(key);
+}
// Chop a frame into an array of MockWrites.
// |data| is the frame to chop.
@@ -223,11 +214,11 @@ int AppendToBuffer(int val,
// |buffer| is the buffer we're filling in.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPacket(const SpdyHeaderInfo& header_info,
- const char* const extra_headers[],
- int extra_header_count,
- const char* const tail[],
- int tail_header_count) {
- BufferedSpdyFramer framer(3);
+ const char* const extra_headers[],
+ int extra_header_count,
+ const char* const tail[],
+ int tail_header_count) {
+ BufferedSpdyFramer framer(3, header_info.compressed);
SpdyHeaderBlock headers;
// Copy in the extra headers to our map.
AppendHeadersToSpdyFrame(extra_headers, extra_header_count, &headers);
@@ -267,7 +258,7 @@ SpdyFrame* ConstructSpdyPacket(const SpdyHeaderInfo& header_info,
// |settings| are the settings to set.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateSettings(settings);
}
@@ -276,21 +267,21 @@ SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) {
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyCredential(
const SpdyCredential& credential) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateCredentialFrame(credential);
}
// Construct a SPDY PING frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyPing(uint32 ping_id) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreatePingFrame(ping_id);
}
// Construct a SPDY GOAWAY frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyGoAway() {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateGoAway(0, GOAWAY_OK);
}
@@ -298,15 +289,15 @@ SpdyFrame* ConstructSpdyGoAway() {
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyWindowUpdate(
const SpdyStreamId stream_id, uint32 delta_window_size) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateWindowUpdate(stream_id, delta_window_size);
}
// Construct a SPDY RST_STREAM frame.
// Returns the constructed frame. The caller takes ownership of the frame.
SpdyFrame* ConstructSpdyRstStream(SpdyStreamId stream_id,
- SpdyStatusCodes status) {
- BufferedSpdyFramer framer(3);
+ SpdyStatusCodes status) {
+ BufferedSpdyFramer framer(3, false);
return framer.CreateRstStream(stream_id, status);
}
@@ -351,14 +342,14 @@ int ConstructSpdyHeader(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- SpdyControlType type,
- SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ SpdyControlType type,
+ SpdyControlFlags flags,
+ const char* const* kHeaders,
+ int kHeadersSize) {
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
compressed,
@@ -372,15 +363,15 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- SpdyControlType type,
- SpdyControlFlags flags,
- const char* const* kHeaders,
- int kHeadersSize,
- int associated_stream_id) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ SpdyControlType type,
+ SpdyControlFlags flags,
+ const char* const* kHeaders,
+ int kHeadersSize,
+ int associated_stream_id) {
const SpdyHeaderInfo kSynStartHeader = {
type, // Kind = Syn
stream_id, // Stream ID
@@ -390,10 +381,10 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
0, // Credential Slot
flags, // Control Flags
compressed, // Compressed
- INVALID, // Status
+ INVALID, // Status
NULL, // Data
0, // Length
- DATA_FLAG_NONE // Data Flags
+ DATA_FLAG_NONE // Data Flags
};
return ConstructSpdyPacket(kSynStartHeader,
extra_headers,
@@ -408,22 +399,22 @@ SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const url,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority) {
const SpdyHeaderInfo kSynStartHeader = {
- SYN_STREAM, // Kind = Syn
+ SYN_STREAM, // Kind = Syn
stream_id, // Stream ID
0, // Associated stream ID
ConvertRequestPriorityToSpdyPriority(request_priority, 3),
// Priority
0, // Credential Slot
- CONTROL_FLAG_FIN, // Control Flags
+ CONTROL_FLAG_FIN, // Control Flags
compressed, // Compressed
- INVALID, // Status
+ INVALID, // Status
NULL, // Data
0, // Length
- DATA_FLAG_NONE // Data Flags
+ DATA_FLAG_NONE // Data Flags
};
std::string scheme, host, path;
@@ -448,10 +439,10 @@ SpdyFrame* ConstructSpdyGet(const char* const url,
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority) {
return ConstructSpdyGet(extra_headers, extra_header_count, compressed,
stream_id, request_priority, true);
}
@@ -461,22 +452,17 @@ SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
- int extra_header_count,
- bool compressed,
- int stream_id,
- RequestPriority request_priority,
- bool direct) {
+ int extra_header_count,
+ bool compressed,
+ int stream_id,
+ RequestPriority request_priority,
+ bool direct) {
const char* const kStandardGetHeaders[] = {
- ":method",
- "GET",
- ":host",
- "www.google.com",
- ":scheme",
- "http",
- ":version",
- "HTTP/1.1",
- ":path",
- (direct ? "/" : "/")
+ ":method", "GET",
+ ":host", "www.google.com",
+ ":scheme", "http",
+ ":version", "HTTP/1.1",
+ ":path", (direct ? "/" : "/")
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -491,8 +477,8 @@ SpdyFrame* ConstructSpdyGet(const char* const extra_headers[],
// Constructs a standard SPDY SYN_STREAM frame for a CONNECT request.
SpdyFrame* ConstructSpdyConnect(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
+ int extra_header_count,
+ int stream_id) {
const char* const kConnectHeaders[] = {
":method", "CONNECT",
":path", "www.google.com:443",
@@ -515,9 +501,9 @@ SpdyFrame* ConstructSpdyConnect(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id) {
const char* const kStandardPushHeaders[] = {
"hello", "bye",
":status", "200",
@@ -536,10 +522,10 @@ SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id,
+ const char* url) {
std::string scheme, host, path;
ParseUrl(url, &scheme, &host, &path);
const char* const headers[] = {
@@ -563,12 +549,12 @@ SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
}
SpdyFrame* ConstructSpdyPush(const char* const extra_headers[],
- int extra_header_count,
- int stream_id,
- int associated_stream_id,
- const char* url,
- const char* status,
- const char* location) {
+ int extra_header_count,
+ int stream_id,
+ int associated_stream_id,
+ const char* url,
+ const char* status,
+ const char* location) {
std::string scheme, host, path;
ParseUrl(url, &scheme, &host, &path);
const char* const headers[] = {
@@ -596,10 +582,8 @@ SpdyFrame* ConstructSpdyPushHeaders(int stream_id,
const char* const extra_headers[],
int extra_header_count) {
const char* const kStandardGetHeaders[] = {
- ":status",
- "200 OK",
- ":version",
- "HTTP/1.1"
+ ":status", "200 OK",
+ ":version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -614,18 +598,14 @@ SpdyFrame* ConstructSpdyPushHeaders(int stream_id,
// Constructs a standard SPDY SYN_REPLY packet with the specified status code.
// Returns a SpdyFrame.
-SpdyFrame* ConstructSpdySynReplyError(
- const char* const status,
- const char* const* const extra_headers,
- int extra_header_count,
- int stream_id) {
+SpdyFrame* ConstructSpdySynReplyError(const char* const status,
+ const char* const* const extra_headers,
+ int extra_header_count,
+ int stream_id) {
const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- ":status",
- status,
- ":version",
- "HTTP/1.1"
+ "hello", "bye",
+ ":status", status,
+ ":version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -644,8 +624,7 @@ SpdyFrame* ConstructSpdySynReplyError(
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGetSynReplyRedirect(int stream_id) {
static const char* const kExtraHeaders[] = {
- "location",
- "http://www.foo.com/index.php",
+ "location", "http://www.foo.com/index.php",
};
return ConstructSpdySynReplyError("301 Moved Permanently", kExtraHeaders,
arraysize(kExtraHeaders)/2, stream_id);
@@ -666,15 +645,12 @@ SpdyFrame* ConstructSpdySynReplyError(int stream_id) {
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[],
- int extra_header_count,
- int stream_id) {
+ int extra_header_count,
+ int stream_id) {
static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- ":status",
- "200",
- ":version",
- "HTTP/1.1"
+ "hello", "bye",
+ ":status", "200",
+ ":version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -693,22 +669,16 @@ SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPost(int64 content_length,
- const char* const extra_headers[],
- int extra_header_count) {
+ const char* const extra_headers[],
+ int extra_header_count) {
std::string length_str = base::Int64ToString(content_length);
const char* post_headers[] = {
- ":method",
- "POST",
- ":path",
- "/",
- ":host",
- "www.google.com",
- ":scheme",
- "http",
- ":version",
- "HTTP/1.1",
- "content-length",
- length_str.c_str()
+ ":method", "POST",
+ ":path", "/",
+ ":host", "www.google.com",
+ ":scheme", "http",
+ ":version", "HTTP/1.1",
+ "content-length", length_str.c_str()
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -726,18 +696,13 @@ SpdyFrame* ConstructSpdyPost(int64 content_length,
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructChunkedSpdyPost(const char* const extra_headers[],
- int extra_header_count) {
+ int extra_header_count) {
const char* post_headers[] = {
- ":method",
- "POST",
- ":path",
- "/",
- ":host",
- "www.google.com",
- ":scheme",
- "http",
- ":version",
- "HTTP/1.1"
+ ":method", "POST",
+ ":path", "/",
+ ":host", "www.google.com",
+ ":scheme", "http",
+ ":version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -755,16 +720,12 @@ SpdyFrame* ConstructChunkedSpdyPost(const char* const extra_headers[],
// will vary the most between calls.
// Returns a SpdyFrame.
SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[],
- int extra_header_count) {
+ int extra_header_count) {
static const char* const kStandardGetHeaders[] = {
- "hello",
- "bye",
- ":status",
- "200",
- "url",
- "/index.php",
- ":version",
- "HTTP/1.1"
+ "hello", "bye",
+ ":status", "200",
+ "url", "/index.php",
+ ":version", "HTTP/1.1"
};
return ConstructSpdyControlFrame(extra_headers,
extra_header_count,
@@ -779,7 +740,7 @@ SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[],
// Constructs a single SPDY data frame with the default contents.
SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) {
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateDataFrame(
stream_id, kUploadData, kUploadDataSize,
fin ? DATA_FLAG_FIN : DATA_FLAG_NONE);
@@ -787,16 +748,15 @@ SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) {
// Constructs a single SPDY data frame with the given content.
SpdyFrame* ConstructSpdyBodyFrame(int stream_id, const char* data,
- uint32 len, bool fin) {
- BufferedSpdyFramer framer(3);
+ uint32 len, bool fin) {
+ BufferedSpdyFramer framer(3, false);
return framer.CreateDataFrame(
stream_id, data, len, fin ? DATA_FLAG_FIN : DATA_FLAG_NONE);
}
// Wraps |frame| in the payload of a data frame in stream |stream_id|.
-SpdyFrame* ConstructWrappedSpdyFrame(
- const scoped_ptr<SpdyFrame>& frame,
- int stream_id) {
+SpdyFrame* ConstructWrappedSpdyFrame(const scoped_ptr<SpdyFrame>& frame,
+ int stream_id) {
return ConstructSpdyBodyFrame(stream_id, frame->data(),
frame->length() + SpdyFrame::kHeaderSize,
false);
@@ -941,6 +901,11 @@ SpdySessionDependencies::SpdySessionDependencies()
deterministic_socket_factory(new DeterministicMockClientSocketFactory),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+ enable_ip_pooling(true),
+ enable_compression(false),
+ enable_ping(false),
+ initial_recv_window_size(kSpdyStreamInitialWindowSize),
+ time_func(&base::TimeTicks::Now),
net_log(NULL) {
// Note: The CancelledTransaction test does cleanup by running all
// tasks in the message loop (RunAllPending). Unfortunately, that
@@ -960,6 +925,11 @@ SpdySessionDependencies::SpdySessionDependencies(ProxyService* proxy_service)
deterministic_socket_factory(new DeterministicMockClientSocketFactory),
http_auth_handler_factory(
HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+ enable_ip_pooling(true),
+ enable_compression(false),
+ enable_ping(false),
+ initial_recv_window_size(kSpdyStreamInitialWindowSize),
+ time_func(&base::TimeTicks::Now),
net_log(NULL) {}
SpdySessionDependencies::~SpdySessionDependencies() {}
@@ -998,6 +968,11 @@ net::HttpNetworkSession::Params SpdySessionDependencies::CreateSessionParams(
params.http_auth_handler_factory =
session_deps->http_auth_handler_factory.get();
params.http_server_properties = &session_deps->http_server_properties;
+ params.enable_spdy_compression = session_deps->enable_compression;
+ params.enable_spdy_ping_based_connection_checking = session_deps->enable_ping;
+ params.spdy_default_protocol = kProtoSPDY3;
+ params.spdy_initial_recv_window_size = session_deps->initial_recv_window_size;
+ params.time_func = session_deps->time_func;
params.trusted_spdy_proxy = session_deps->trusted_spdy_proxy;
params.net_log = session_deps->net_log;
return params;
@@ -1020,6 +995,9 @@ SpdyURLRequestContext::SpdyURLRequestContext()
params.ssl_config_service = ssl_config_service();
params.http_auth_handler_factory = http_auth_handler_factory();
params.network_delegate = network_delegate();
+ params.enable_spdy_compression = false;
+ params.enable_spdy_ping_based_connection_checking = false;
+ params.spdy_default_protocol = kProtoSPDY3;
params.http_server_properties = http_server_properties();
scoped_refptr<HttpNetworkSession> network_session(
new HttpNetworkSession(params));
@@ -1050,29 +1028,6 @@ const SpdyHeaderInfo MakeSpdyHeader(SpdyControlType type) {
return kHeader;
}
-SpdyTestStateHelper::SpdyTestStateHelper()
- : ec_signature_creator_factory_(new MockECSignatureCreatorFactory()) {
- // Use the mock signature creator.
- crypto::ECSignatureCreator::SetFactoryForTesting(
- ec_signature_creator_factory_.get());
- // Pings can be non-deterministic, because they are sent via timer.
- SpdySession::set_enable_ping_based_connection_checking(false);
- // Avoid sending a non-default initial receive window size settings
- // frame on every test.
- SpdySession::set_default_initial_recv_window_size(
- kSpdyStreamInitialWindowSize);
- // Compression is per-session which makes it impossible to create
- // SPDY frames with static methods.
- BufferedSpdyFramer::set_enable_compression_default(false);
-}
-
-SpdyTestStateHelper::~SpdyTestStateHelper() {
- SpdySession::ResetStaticSettingsToInit();
- // TODO(rch): save/restore this value
- BufferedSpdyFramer::set_enable_compression_default(true);
- crypto::ECSignatureCreator::SetFactoryForTesting(NULL);
-}
-
} // namespace test_spdy3
} // namespace net
diff --git a/net/spdy/spdy_test_util_spdy3.h b/net/spdy/spdy_test_util_spdy3.h
index d0a806a..5103c89 100644
--- a/net/spdy/spdy_test_util_spdy3.h
+++ b/net/spdy/spdy_test_util_spdy3.h
@@ -7,6 +7,8 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
+#include "crypto/ec_private_key.h"
+#include "crypto/ec_signature_creator.h"
#include "net/base/cert_verifier.h"
#include "net/base/host_port_pair.h"
#include "net/base/mock_host_resolver.h"
@@ -20,6 +22,7 @@
#include "net/http/http_transaction_factory.h"
#include "net/proxy/proxy_service.h"
#include "net/socket/socket_test_util.h"
+#include "net/spdy/spdy_session.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_storage.h"
@@ -53,6 +56,38 @@ struct SpdyHeaderInfo {
SpdyDataFlags data_flags;
};
+// An ECSignatureCreator that returns deterministic signatures.
+class MockECSignatureCreator : public crypto::ECSignatureCreator {
+ public:
+ explicit MockECSignatureCreator(crypto::ECPrivateKey* key);
+
+ // crypto::ECSignatureCreator
+ virtual bool Sign(const uint8* data,
+ int data_len,
+ std::vector<uint8>* signature) OVERRIDE;
+ virtual bool DecodeSignature(const std::vector<uint8>& signature,
+ std::vector<uint8>* out_raw_sig) OVERRIDE;
+
+ private:
+ crypto::ECPrivateKey* key_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreator);
+};
+
+// An ECSignatureCreatorFactory creates MockECSignatureCreator.
+class MockECSignatureCreatorFactory : public crypto::ECSignatureCreatorFactory {
+ public:
+ MockECSignatureCreatorFactory();
+ virtual ~MockECSignatureCreatorFactory();
+
+ // crypto::ECSignatureCreatorFactory
+ virtual crypto::ECSignatureCreator* Create(
+ crypto::ECPrivateKey* key) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreatorFactory);
+};
+
// Chop a frame into an array of MockWrites.
// |data| is the frame to chop.
// |length| is the length of the frame to chop.
@@ -370,6 +405,11 @@ struct SpdySessionDependencies {
scoped_ptr<DeterministicMockClientSocketFactory> deterministic_socket_factory;
scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory;
HttpServerPropertiesImpl http_server_properties;
+ bool enable_ip_pooling;
+ bool enable_compression;
+ bool enable_ping;
+ size_t initial_recv_window_size;
+ SpdySession::TimeFunc time_func;
std::string trusted_spdy_proxy;
NetLog* net_log;
};
@@ -419,21 +459,6 @@ class SpdySessionPoolPeer {
DISALLOW_COPY_AND_ASSIGN(SpdySessionPoolPeer);
};
-// Helper to manage the state of a number of SPDY global variables.
-class SpdyTestStateHelper {
- public:
- SpdyTestStateHelper();
- ~SpdyTestStateHelper();
-
- private:
- // In order to make CREDENTIAL frame creation deterministic, we need to
- // use a mock EC signature creator, which needs to live throughout
- // the life of the test.
- scoped_ptr<crypto::ECSignatureCreatorFactory> ec_signature_creator_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(SpdyTestStateHelper);
-};
-
} // namespace test_spdy3
} // namespace net
diff --git a/net/spdy/spdy_websocket_stream_spdy2_unittest.cc b/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
index 1835d42..20b7217 100644
--- a/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
+++ b/net/spdy/spdy_websocket_stream_spdy2_unittest.cc
@@ -185,8 +185,6 @@ class SpdyWebSocketStreamSpdy2Test : public testing::Test {
virtual ~SpdyWebSocketStreamSpdy2Test() {}
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY2);
-
host_port_pair_.set_host("example.com");
host_port_pair_.set_port(80);
host_port_proxy_pair_.first = host_port_pair_;
@@ -301,9 +299,6 @@ class SpdyWebSocketStreamSpdy2Test : public testing::Test {
static const char kClosingFrame[];
static const size_t kMessageFrameLength;
static const size_t kClosingFrameLength;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
// TODO(toyoshim): Replace old framing data to new one, then use HEADERS and
diff --git a/net/spdy/spdy_websocket_stream_spdy3_unittest.cc b/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
index e774b68..932d0a0 100644
--- a/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
+++ b/net/spdy/spdy_websocket_stream_spdy3_unittest.cc
@@ -185,8 +185,6 @@ class SpdyWebSocketStreamSpdy3Test : public testing::Test {
virtual ~SpdyWebSocketStreamSpdy3Test() {}
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
-
host_port_pair_.set_host("example.com");
host_port_pair_.set_port(80);
host_port_proxy_pair_.first = host_port_pair_;
@@ -301,9 +299,6 @@ class SpdyWebSocketStreamSpdy3Test : public testing::Test {
static const char kClosingFrame[];
static const size_t kMessageFrameLength;
static const size_t kClosingFrameLength;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
// TODO(toyoshim): Replace old framing data to new one, then use HEADERS and
diff --git a/net/spdy/spdy_websocket_test_util_spdy2.cc b/net/spdy/spdy_websocket_test_util_spdy2.cc
index f056dac..1a45949 100644
--- a/net/spdy/spdy_websocket_test_util_spdy2.cc
+++ b/net/spdy/spdy_websocket_test_util_spdy2.cc
@@ -149,7 +149,7 @@ SpdyFrame* ConstructSpdyWebSocketDataFrame(
bool fin) {
// Construct SPDY data frame.
- BufferedSpdyFramer framer(2);
+ BufferedSpdyFramer framer(2, false);
return framer.CreateDataFrame(
stream_id,
data,
diff --git a/net/spdy/spdy_websocket_test_util_spdy3.cc b/net/spdy/spdy_websocket_test_util_spdy3.cc
index f146d60..4e2eec4 100644
--- a/net/spdy/spdy_websocket_test_util_spdy3.cc
+++ b/net/spdy/spdy_websocket_test_util_spdy3.cc
@@ -152,7 +152,7 @@ SpdyFrame* ConstructSpdyWebSocketDataFrame(
bool fin) {
// Construct SPDY data frame.
- BufferedSpdyFramer framer(3);
+ BufferedSpdyFramer framer(3, false);
return framer.CreateDataFrame(
stream_id,
data,
diff --git a/net/tools/flip_server/spdy_interface.cc b/net/tools/flip_server/spdy_interface.cc
index de9ffb1..d6ea40a 100644
--- a/net/tools/flip_server/spdy_interface.cc
+++ b/net/tools/flip_server/spdy_interface.cc
@@ -39,7 +39,7 @@ SpdySM::SpdySM(SMConnection* connection,
EpollServer* epoll_server,
MemoryCache* memory_cache,
FlipAcceptor* acceptor)
- : buffered_spdy_framer_(new BufferedSpdyFramer(2)),
+ : buffered_spdy_framer_(new BufferedSpdyFramer(2, true)),
valid_spdy_session_(false),
connection_(connection),
client_output_list_(connection->output_list()),
@@ -291,7 +291,7 @@ void SpdySM::ResetForNewInterface(int32 server_idx) {
void SpdySM::ResetForNewConnection() {
// seq_num is not cleared, intentionally.
delete buffered_spdy_framer_;
- buffered_spdy_framer_ = new BufferedSpdyFramer(2);
+ buffered_spdy_framer_ = new BufferedSpdyFramer(2, true);
buffered_spdy_framer_->set_visitor(this);
valid_spdy_session_ = false;
client_output_ordering_.Reset();
diff --git a/net/websockets/websocket_job_spdy2_unittest.cc b/net/websockets/websocket_job_spdy2_unittest.cc
index 7c60195..5ac3a9a 100644
--- a/net/websockets/websocket_job_spdy2_unittest.cc
+++ b/net/websockets/websocket_job_spdy2_unittest.cc
@@ -335,7 +335,6 @@ namespace net {
class WebSocketJobSpdy2Test : public PlatformTest {
public:
virtual void SetUp() OVERRIDE {
- SpdySession::set_default_protocol(kProtoSPDY2);
stream_type_ = STREAM_INVALID;
cookie_store_ = new MockCookieStore;
context_.reset(new MockURLRequestContext(cookie_store_.get()));
@@ -483,9 +482,6 @@ class WebSocketJobSpdy2Test : public PlatformTest {
static const size_t kHandshakeResponseWithCookieLength;
static const size_t kDataHelloLength;
static const size_t kDataWorldLength;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
const char WebSocketJobSpdy2Test::kHandshakeRequestWithoutCookie[] =
diff --git a/net/websockets/websocket_job_spdy3_unittest.cc b/net/websockets/websocket_job_spdy3_unittest.cc
index be36fc7..3fdb8f8 100644
--- a/net/websockets/websocket_job_spdy3_unittest.cc
+++ b/net/websockets/websocket_job_spdy3_unittest.cc
@@ -334,7 +334,6 @@ namespace net {
class WebSocketJobSpdy3Test : public PlatformTest {
public:
virtual void SetUp() {
- SpdySession::set_default_protocol(kProtoSPDY3);
stream_type_ = STREAM_INVALID;
cookie_store_ = new MockCookieStore;
context_.reset(new MockURLRequestContext(cookie_store_.get()));
@@ -482,9 +481,6 @@ class WebSocketJobSpdy3Test : public PlatformTest {
static const size_t kHandshakeResponseWithCookieLength;
static const size_t kDataHelloLength;
static const size_t kDataWorldLength;
-
- private:
- SpdyTestStateHelper spdy_state_;
};
const char WebSocketJobSpdy3Test::kHandshakeRequestWithoutCookie[] =