Implement WebSocket*HandshakeStream::GetTokenBindingSignature().
Locally verified that this fixes the linked bug.
Bug: 823643
Change-Id: Icb7048ce60e46babdae278c1d2b913e44df8f7a5
Reviewed-on: https://chromium-review.googlesource.com/980964
Commit-Queue: Bence Béky <[email protected]>
Reviewed-by: Nick Harper <[email protected]>
Reviewed-by: Ryan Hamilton <[email protected]>
Reviewed-by: Adam Rice <[email protected]>
Cr-Commit-Position: refs/heads/master@{#546975}
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc
index 8cf6c78..7bc25ed 100644
--- a/net/websockets/websocket_basic_handshake_stream.cc
+++ b/net/websockets/websocket_basic_handshake_stream.cc
@@ -32,6 +32,7 @@
#include "net/http/http_status_code.h"
#include "net/http/http_stream_parser.h"
#include "net/socket/client_socket_handle.h"
+#include "net/socket/ssl_client_socket.h"
#include "net/socket/websocket_transport_client_socket_pool.h"
#include "net/websockets/websocket_basic_stream.h"
#include "net/websockets/websocket_basic_stream_adapters.h"
@@ -334,8 +335,12 @@
crypto::ECPrivateKey* key,
TokenBindingType tb_type,
std::vector<uint8_t>* out) {
- NOTREACHED();
- return ERR_NOT_IMPLEMENTED;
+ DCHECK(url_.SchemeIsCryptographic());
+
+ // Encrypted WebSocket must use an SSL socket.
+ StreamSocket* socket = state_.connection()->socket();
+ SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(socket);
+ return ssl_socket->GetTokenBindingSignature(key, tb_type, out);
}
void WebSocketBasicHandshakeStream::Drain(HttpNetworkSession* session) {