| 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 56f3bb3d171cb944c83b8ff0fd5882f6f9b2b850..69aed6c48839d268272e993263cde47f1e25b442 100644
|
| --- a/net/http/http_network_transaction_unittest.cc
|
| +++ b/net/http/http_network_transaction_unittest.cc
|
| @@ -21,6 +21,7 @@
|
| #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"
|
| @@ -74,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"
|
| @@ -14027,6 +14029,13 @@ class FakeStream : public HttpStream,
|
|
|
| bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; }
|
|
|
| + int GetProvidedTokenBindingWithKey(
|
| + const scoped_ptr<crypto::ECPrivateKey>& key,
|
| + std::string* header_out) override {
|
| + ADD_FAILURE();
|
| + return ERR_NOT_IMPLEMENTED;
|
| + }
|
| +
|
| void Drain(HttpNetworkSession* session) override { ADD_FAILURE(); }
|
|
|
| void SetPriority(RequestPriority priority) override { priority_ = priority; }
|
| @@ -14245,6 +14254,13 @@ class FakeWebSocketBasicHandshakeStream : public WebSocketHandshakeStreamBase {
|
|
|
| bool GetRemoteEndpoint(IPEndPoint* endpoint) override { return false; }
|
|
|
| + int GetProvidedTokenBindingWithKey(
|
| + const scoped_ptr<crypto::ECPrivateKey>& key,
|
| + std::string* header_out) override {
|
| + ADD_FAILURE();
|
| + return ERR_NOT_IMPLEMENTED;
|
| + }
|
| +
|
| void Drain(HttpNetworkSession* session) override { NOTREACHED(); }
|
|
|
| void SetPriority(RequestPriority priority) override { NOTREACHED(); }
|
| @@ -15373,4 +15389,36 @@ TEST_P(HttpNetworkTransactionTest, TotalNetworkBytesChunkedPost) {
|
| trans->GetTotalReceivedBytes());
|
| }
|
|
|
| +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(GetParam());
|
| + 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();
|
| +
|
| + EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
|
| + HttpRequestHeaders headers;
|
| + ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
|
| + EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
|
| +}
|
| +
|
| } // namespace net
|
|
|