Chromium Code Reviews| 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 ed7470b3a618ffba8be29837496992d3e2f5ca21..afbc9210d1c9ec57ce17c939838df8da1a87c04a 100644 |
| --- a/net/http/http_network_transaction_unittest.cc |
| +++ b/net/http/http_network_transaction_unittest.cc |
| @@ -21,6 +21,8 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/run_loop.h" |
| +#include "base/stl_util.h" |
| +#include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/test/test_file_util.h" |
| @@ -75,6 +77,7 @@ |
| #include "net/spdy/spdy_session.h" |
| #include "net/spdy/spdy_session_pool.h" |
| #include "net/spdy/spdy_test_util_common.h" |
| +#include "net/ssl/default_channel_id_store.h" |
| #include "net/ssl/ssl_cert_request_info.h" |
| #include "net/ssl/ssl_config_service.h" |
| #include "net/ssl/ssl_config_service_defaults.h" |
| @@ -14413,6 +14416,12 @@ class FakeStream : public HttpStream, |
| bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; } |
| + int GetSignedEKMForTokenBinding(crypto::ECPrivateKey* key, |
| + std::vector<uint8_t>* out) override { |
| + ADD_FAILURE(); |
| + return ERR_NOT_IMPLEMENTED; |
| + } |
| + |
| void Drain(HttpNetworkSession* session) override { ADD_FAILURE(); } |
| void PopulateNetErrorDetails(NetErrorDetails* details) override { return; } |
| @@ -14644,6 +14653,12 @@ class FakeWebSocketBasicHandshakeStream : public WebSocketHandshakeStreamBase { |
| bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; } |
| + int GetSignedEKMForTokenBinding(crypto::ECPrivateKey* key, |
| + std::vector<uint8_t>* out) override { |
| + ADD_FAILURE(); |
| + return ERR_NOT_IMPLEMENTED; |
| + } |
| + |
| void Drain(HttpNetworkSession* session) override { NOTREACHED(); } |
| void PopulateNetErrorDetails(NetErrorDetails* details) override { return; } |
| @@ -15802,4 +15817,36 @@ TEST_P(HttpNetworkTransactionTest, DisableNPN) { |
| EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); |
| } |
| +TEST_P(HttpNetworkTransactionTest, TokenBindingSpdy) { |
| + const std::string https_url = "https://www.example.com"; |
| + HttpRequestInfo request; |
| + request.url = GURL(https_url); |
| + request.method = "GET"; |
| + |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + ssl.token_binding_negotiated = true; |
| + ssl.token_binding_key_param = TB_PARAM_ECDSAP256; |
| + ssl.SetNextProto(GetProtocol()); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| + scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| + MockRead reads[] = {CreateMockRead(*resp, 1), CreateMockRead(*body, 2), |
| + MockRead(ASYNC, ERR_IO_PENDING, 3)}; |
| + StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| + session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + session_deps_.channel_id_service.reset(new ChannelIDService( |
| + new DefaultChannelIDStore(NULL), base::ThreadTaskRunnerHandle::Get())); |
| + scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| + TestCompletionCallback callback; |
| + EXPECT_EQ(ERR_IO_PENDING, |
| + trans.Start(&request, callback.callback(), BoundNetLog())); |
| + base::MessageLoop::current()->RunUntilIdle(); |
|
davidben
2016/01/22 00:19:21
[I have no clue what's going on with this block an
nharper
2016/01/22 19:36:52
This should be mostly copypasta from another unitt
|
| + |
| + EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
| + HttpRequestHeaders headers; |
| + ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
| + EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
| +} |
| + |
| } // namespace net |