| Index: net/http/http_network_transaction_unittest.cc | 
| diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc | 
| index 307cf8626dffa9d418769d20089af76f48074e6a..1de21e77827eb5d5b4decbbc8c587f7742649b16 100644 | 
| --- a/net/http/http_network_transaction_unittest.cc | 
| +++ b/net/http/http_network_transaction_unittest.cc | 
| @@ -5,6 +5,8 @@ | 
| #include "net/http/http_network_transaction.h" | 
|  | 
| #include <math.h>  // ceil | 
| +#include <stdarg.h> | 
| +#include <string> | 
| #include <vector> | 
|  | 
| #include "base/basictypes.h" | 
| @@ -68,6 +70,32 @@ const string16 kSecond(ASCIIToUTF16("second")); | 
| const string16 kTestingNTLM(ASCIIToUTF16("testing-ntlm")); | 
| const string16 kWrongPassword(ASCIIToUTF16("wrongpassword")); | 
|  | 
| +// MakeNextProtos is a utility function that returns a vector of std::strings | 
| +// from its arguments. Don't forget to terminate the argument list with a NULL. | 
| +std::vector<std::string> MakeNextProtos(const char* a, ...) { | 
| +  std::vector<std::string> ret; | 
| +  ret.push_back(a); | 
| + | 
| +  va_list args; | 
| +  va_start(args, a); | 
| + | 
| +  for (;;) { | 
| +    const char* value = va_arg(args, const char*); | 
| +    if (value == NULL) | 
| +      break; | 
| +    ret.push_back(value); | 
| +  } | 
| +  va_end(args); | 
| + | 
| +  return ret; | 
| +} | 
| + | 
| +// SpdyNextProtos returns a vector of NPN protocol strings for negotiating | 
| +// SPDY. | 
| +std::vector<std::string> SpdyNextProtos() { | 
| +  return MakeNextProtos("http/1.1", "spdy/2", NULL); | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| namespace net { | 
| @@ -332,10 +360,6 @@ CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( | 
|  | 
| //----------------------------------------------------------------------------- | 
|  | 
| -// This is the expected list of advertised protocols from the browser's NPN | 
| -// list. | 
| -static const char kExpectedNPNString[] = "\x08http/1.1\x06spdy/2"; | 
| - | 
| // This is the expected return from a current server advertising SPDY. | 
| static const char kAlternateProtocolHttpHeader[] = | 
| "Alternate-Protocol: 443:npn-spdy/2\r\n\r\n"; | 
| @@ -6472,7 +6496,7 @@ TEST_F(HttpNetworkTransactionTest, ChangeAuthRealms) { | 
| } | 
|  | 
| TEST_F(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { | 
| -  HttpStreamFactory::set_next_protos("needs_to_be_set_for_this_test"); | 
| +  HttpStreamFactory::set_next_protos(MakeNextProtos("foo", "bar", NULL)); | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
|  | 
| SessionDependencies session_deps; | 
| @@ -6529,7 +6553,7 @@ TEST_F(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { | 
| EXPECT_TRUE(expected_alternate.Equals(alternate)); | 
|  | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| } | 
|  | 
| TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { | 
| @@ -6785,7 +6809,7 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed2) { | 
|  | 
| TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
| SessionDependencies session_deps; | 
|  | 
| HttpRequestInfo request; | 
| @@ -6870,13 +6894,13 @@ TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 
| ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 
| EXPECT_EQ("hello!", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
| SessionDependencies session_deps; | 
|  | 
| HttpRequestInfo request; | 
| @@ -6988,13 +7012,13 @@ TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 
| ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 
| EXPECT_EQ("hello!", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| TEST_F(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
| SessionDependencies session_deps; | 
|  | 
| HttpRequestInfo request; | 
| @@ -7064,7 +7088,7 @@ TEST_F(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { | 
| ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 
| EXPECT_EQ("hello world", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -7108,7 +7132,7 @@ class CapturingProxyResolver : public ProxyResolver { | 
|  | 
| TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
|  | 
| ProxyConfig proxy_config; | 
| proxy_config.set_auto_detect(true); | 
| @@ -7216,14 +7240,14 @@ TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) { | 
| EXPECT_EQ("https://www.google.com/", | 
| capturing_proxy_resolver->resolved()[1].spec()); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| TEST_F(HttpNetworkTransactionTest, | 
| UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
| SessionDependencies session_deps; | 
|  | 
| HttpRequestInfo request; | 
| @@ -7335,7 +7359,7 @@ TEST_F(HttpNetworkTransactionTest, | 
| ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 
| EXPECT_EQ("hello!", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -8051,7 +8075,8 @@ TEST_F(HttpNetworkTransactionTest, | 
| // npn is negotiated. | 
| TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos("\x08http/1.1\x07http1.1"); | 
| +  HttpStreamFactory::set_next_protos( | 
| +      MakeNextProtos("http/1.1", "http1.1", NULL)); | 
| SessionDependencies session_deps; | 
| HttpRequestInfo request; | 
| request.method = "GET"; | 
| @@ -8103,7 +8128,7 @@ TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { | 
| EXPECT_FALSE(response->was_fetched_via_spdy); | 
| EXPECT_TRUE(response->was_npn_negotiated); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -8112,7 +8137,7 @@ TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 
| // followed by an immediate server closing of the socket. | 
| // Fix crash:  http://crbug.com/46369 | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
| SessionDependencies session_deps; | 
|  | 
| HttpRequestInfo request; | 
| @@ -8149,7 +8174,7 @@ TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 
| EXPECT_EQ(ERR_IO_PENDING, rv); | 
| EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -8158,7 +8183,7 @@ TEST_F(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { | 
| // to https when doing an Alternate Protocol upgrade. | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| HttpStreamFactory::set_next_protos( | 
| -      "\x08http/1.1\x07http1.1\x06spdy/2\x04spdy"); | 
| +      MakeNextProtos("http/1.1", "http1.1", "spdy/2", "spdy", NULL)); | 
|  | 
| SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 
| HttpAuthHandlerMock::Factory* auth_factory = | 
| @@ -8299,7 +8324,7 @@ TEST_F(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { | 
| EXPECT_EQ("https", request_url.scheme()); | 
| EXPECT_EQ("www.google.com", request_url.host()); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -8950,7 +8975,7 @@ void IPPoolingAddAlias(MockCachingHostResolver* host_resolver, | 
|  | 
| TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
|  | 
| // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 
| SessionDependencies session_deps; | 
| @@ -9056,7 +9081,7 @@ TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { | 
| ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 
| EXPECT_EQ("hello!", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
| @@ -9111,7 +9136,7 @@ class OneTimeCachingHostResolver : public net::HostResolver { | 
| TEST_F(HttpNetworkTransactionTest, | 
| UseIPConnectionPoolingWithHostCacheExpiration) { | 
| HttpStreamFactory::set_use_alternate_protocols(true); | 
| -  HttpStreamFactory::set_next_protos(kExpectedNPNString); | 
| +  HttpStreamFactory::set_next_protos(SpdyNextProtos()); | 
|  | 
| // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. | 
| SessionDependencies session_deps; | 
| @@ -9216,7 +9241,7 @@ TEST_F(HttpNetworkTransactionTest, | 
| ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 
| EXPECT_EQ("hello!", response_data); | 
|  | 
| -  HttpStreamFactory::set_next_protos(""); | 
| +  HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 
| HttpStreamFactory::set_use_alternate_protocols(false); | 
| } | 
|  | 
|  |