diff options
author | nharper <nharper@chromium.org> | 2016-01-25 15:54:14 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-25 23:55:18 +0000 |
commit | b7441ef2effe86324798710a82d8a006f5eb1395 (patch) | |
tree | bbc0a66b978a7d10640509cc3eb91dc3e8662303 /net/http/http_network_transaction_unittest.cc | |
parent | 65295cfea49ef91053171841767163db073df1da (diff) | |
download | chromium_src-b7441ef2effe86324798710a82d8a006f5eb1395.zip chromium_src-b7441ef2effe86324798710a82d8a006f5eb1395.tar.gz chromium_src-b7441ef2effe86324798710a82d8a006f5eb1395.tar.bz2 |
Set Token-Binding HTTP header
Adds a new method to SSLClientSocket to get the Token Binding from an SSL
connection where Token Binding was negotiated, and uses that to add the
Set-Token-Binding HTTP header (only when Token Binding was negotiated).
BUG=467312
Review URL: https://codereview.chromium.org/1378613004
Cr-Commit-Position: refs/heads/master@{#371347}
Diffstat (limited to 'net/http/http_network_transaction_unittest.cc')
-rw-r--r-- | net/http/http_network_transaction_unittest.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index ef00344..9bda396 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -75,6 +75,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 +14414,12 @@ class FakeStream : public HttpStream, bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; } + Error 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 +14651,12 @@ class FakeWebSocketBasicHandshakeStream : public WebSocketHandshakeStreamBase { bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; } + Error 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 +15815,41 @@ TEST_P(HttpNetworkTransactionTest, DisableNPN) { EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); } +#if !defined(OS_IOS) +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(nullptr, 0, 1)); + scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); + MockRead reads[] = {CreateMockRead(*resp), CreateMockRead(*body), + MockRead(ASYNC, ERR_IO_PENDING)}; + StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); + session_deps_.socket_factory->AddSocketDataProvider(&data); + session_deps_.channel_id_service.reset(new ChannelIDService( + new DefaultChannelIDStore(nullptr), 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(); + + EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); + HttpRequestHeaders headers; + ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); + EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); +} +#endif // !defined(OS_IOS) + } // namespace net |