| Index: net/websockets/websocket_handshake_handler_unittest.cc
|
| diff --git a/net/websockets/websocket_handshake_handler_unittest.cc b/net/websockets/websocket_handshake_handler_unittest.cc
|
| index fafd77e7df99780820d0838f2f9f84a8e11f8214..50199d9407739188d6172b9a5456f38e922db720 100644
|
| --- a/net/websockets/websocket_handshake_handler_unittest.cc
|
| +++ b/net/websockets/websocket_handshake_handler_unittest.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -47,6 +47,30 @@ TEST(WebSocketHandshakeRequestHandlerTest, SimpleRequest) {
|
|
|
| EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
|
| strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(0, handler.protocol_version());
|
| +
|
| + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
|
| +
|
| + EXPECT_EQ(kHandshakeRequestMessage, handler.GetRawRequest());
|
| +}
|
| +
|
| +TEST(WebSocketHandshakeRequestHandlerTest, SimpleRequestHybi06Handshake) {
|
| + WebSocketHandshakeRequestHandler handler;
|
| +
|
| + static const char* kHandshakeRequestMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
|
| + strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(6, handler.protocol_version());
|
|
|
| handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
|
|
|
| @@ -71,6 +95,7 @@ TEST(WebSocketHandshakeRequestHandlerTest, ReplaceRequestCookies) {
|
|
|
| EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
|
| strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(0, handler.protocol_version());
|
|
|
| handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
|
|
|
| @@ -94,8 +119,50 @@ TEST(WebSocketHandshakeRequestHandlerTest, ReplaceRequestCookies) {
|
| EXPECT_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest());
|
| }
|
|
|
| +TEST(WebSocketHandshakeRequestHandlerTest,
|
| + ReplaceRequestCookiesHybi06Handshake) {
|
| + WebSocketHandshakeRequestHandler handler;
|
| +
|
| + static const char* kHandshakeRequestMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "Cookie: WK-websocket-test=1\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
|
| + strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(6, handler.protocol_version());
|
| +
|
| + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
|
| +
|
| + handler.AppendHeaderIfMissing("Cookie",
|
| + "WK-websocket-test=1; "
|
| + "WK-websocket-test-httponly=1");
|
| +
|
| + static const char* kHandshakeRequestExpectedMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest());
|
| +}
|
| +
|
| TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponse) {
|
| WebSocketHandshakeResponseHandler handler;
|
| + EXPECT_EQ(0, handler.protocol_version());
|
|
|
| static const char* kHandshakeResponseMessage =
|
| "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
|
| @@ -117,8 +184,32 @@ TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponse) {
|
| EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse());
|
| }
|
|
|
| +TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponseHybi06Handshake) {
|
| + WebSocketHandshakeResponseHandler handler;
|
| + handler.set_protocol_version(6);
|
| + EXPECT_EQ(6, handler.protocol_version());
|
| +
|
| + static const char* kHandshakeResponseMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(strlen(kHandshakeResponseMessage),
|
| + handler.ParseRawResponse(kHandshakeResponseMessage,
|
| + strlen(kHandshakeResponseMessage)));
|
| + EXPECT_TRUE(handler.HasResponse());
|
| +
|
| + handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
|
| +
|
| + EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse());
|
| +}
|
| +
|
| TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) {
|
| WebSocketHandshakeResponseHandler handler;
|
| + EXPECT_EQ(0, handler.protocol_version());
|
|
|
| static const char* kHandshakeResponseMessage =
|
| "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
|
| @@ -156,6 +247,44 @@ TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) {
|
| EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse());
|
| }
|
|
|
| +TEST(WebSocketHandshakeResponseHandlerTest,
|
| + ReplaceResponseCookiesHybi06Handshake) {
|
| + WebSocketHandshakeResponseHandler handler;
|
| + handler.set_protocol_version(6);
|
| + EXPECT_EQ(6, handler.protocol_version());
|
| +
|
| + static const char* kHandshakeResponseMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Set-Cookie: WK-websocket-test-1\r\n"
|
| + "Set-Cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(strlen(kHandshakeResponseMessage),
|
| + handler.ParseRawResponse(kHandshakeResponseMessage,
|
| + strlen(kHandshakeResponseMessage)));
|
| + EXPECT_TRUE(handler.HasResponse());
|
| + std::vector<std::string> cookies;
|
| + handler.GetHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders), &cookies);
|
| + ASSERT_EQ(2U, cookies.size());
|
| + EXPECT_EQ("WK-websocket-test-1", cookies[0]);
|
| + EXPECT_EQ("WK-websocket-test-httponly=1; HttpOnly", cookies[1]);
|
| + handler.RemoveHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders));
|
| +
|
| + static const char* kHandshakeResponseExpectedMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse());
|
| +}
|
| +
|
| TEST(WebSocketHandshakeResponseHandlerTest, BadResponse) {
|
| WebSocketHandshakeResponseHandler handler;
|
|
|
| @@ -193,6 +322,7 @@ TEST(WebSocketHandshakeHandlerTest, HttpRequestResponse) {
|
|
|
| EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(0, request_handler.protocol_version());
|
|
|
| GURL url("ws://example.com/demo");
|
| std::string challenge;
|
| @@ -214,7 +344,7 @@ TEST(WebSocketHandshakeHandlerTest, HttpRequestResponse) {
|
| &value));
|
| EXPECT_EQ("sample", value);
|
|
|
| - const char expected_challenge[] = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U";
|
| + const char* expected_challenge = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U";
|
|
|
| EXPECT_EQ(expected_challenge, challenge);
|
|
|
| @@ -242,6 +372,7 @@ TEST(WebSocketHandshakeHandlerTest, HttpRequestResponse) {
|
| "sample"));
|
|
|
| WebSocketHandshakeResponseHandler response_handler;
|
| + EXPECT_EQ(0, response_handler.protocol_version());
|
| EXPECT_TRUE(response_handler.ParseResponseInfo(response_info, challenge));
|
| EXPECT_TRUE(response_handler.HasResponse());
|
|
|
| @@ -258,6 +389,82 @@ TEST(WebSocketHandshakeHandlerTest, HttpRequestResponse) {
|
| EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| }
|
|
|
| +TEST(WebSocketHandshakeHandlerTest, HttpRequestResponseHybi06Handshake) {
|
| + WebSocketHandshakeRequestHandler request_handler;
|
| +
|
| + static const char* kHandshakeRequestMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| + strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(6, request_handler.protocol_version());
|
| +
|
| + GURL url("ws://example.com/demo");
|
| + std::string challenge;
|
| + const HttpRequestInfo& request_info =
|
| + request_handler.GetRequestInfo(url, &challenge);
|
| +
|
| + EXPECT_EQ(url, request_info.url);
|
| + EXPECT_EQ("GET", request_info.method);
|
| + EXPECT_FALSE(request_info.extra_headers.HasHeader("Upgrade"));
|
| + EXPECT_FALSE(request_info.extra_headers.HasHeader("Connection"));
|
| + EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key"));
|
| + std::string value;
|
| + EXPECT_TRUE(request_info.extra_headers.GetHeader("Host", &value));
|
| + EXPECT_EQ("example.com", value);
|
| + EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Origin",
|
| + &value));
|
| + EXPECT_EQ("http://example.com", value);
|
| + EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Protocol",
|
| + &value));
|
| + EXPECT_EQ("sample", value);
|
| +
|
| + EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
|
| +
|
| + static const char* kHandshakeResponseHeader =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n";
|
| +
|
| + std::string raw_headers =
|
| + HttpUtil::AssembleRawHeaders(kHandshakeResponseHeader,
|
| + strlen(kHandshakeResponseHeader));
|
| + HttpResponseInfo response_info;
|
| + response_info.headers = new HttpResponseHeaders(raw_headers);
|
| +
|
| + EXPECT_TRUE(StartsWithASCII(response_info.headers->GetStatusLine(),
|
| + "HTTP/1.1 101 ", false));
|
| + EXPECT_FALSE(response_info.headers->HasHeader("Upgrade"));
|
| + EXPECT_FALSE(response_info.headers->HasHeader("Connection"));
|
| + EXPECT_FALSE(response_info.headers->HasHeader("Sec-WebSocket-Accept"));
|
| + EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Protocol",
|
| + "sample"));
|
| +
|
| + WebSocketHandshakeResponseHandler response_handler;
|
| + response_handler.set_protocol_version(request_handler.protocol_version());
|
| + EXPECT_EQ(6, response_handler.protocol_version());
|
| +
|
| + EXPECT_TRUE(response_handler.ParseResponseInfo(response_info, challenge));
|
| + EXPECT_TRUE(response_handler.HasResponse());
|
| +
|
| + static const char* kHandshakeResponseExpectedMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| +}
|
| +
|
| TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
|
| WebSocketHandshakeRequestHandler request_handler;
|
|
|
| @@ -277,6 +484,7 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
|
|
|
| EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(0, request_handler.protocol_version());
|
|
|
| GURL url("ws://example.com/demo");
|
| std::string challenge;
|
| @@ -310,6 +518,7 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
|
| headers["sec-websocket-protocol"] = "sample";
|
|
|
| WebSocketHandshakeResponseHandler response_handler;
|
| + EXPECT_EQ(0, response_handler.protocol_version());
|
| EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
|
| EXPECT_TRUE(response_handler.HasResponse());
|
|
|
| @@ -327,6 +536,68 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
|
| EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| }
|
|
|
| +TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseHybi06Handshake) {
|
| + WebSocketHandshakeRequestHandler request_handler;
|
| +
|
| + static const char* kHandshakeRequestMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "X-bogus-header: X\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "X-bogus-header: Y\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| + strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(6, request_handler.protocol_version());
|
| +
|
| + GURL url("ws://example.com/demo");
|
| + std::string challenge;
|
| + spdy::SpdyHeaderBlock headers;
|
| + ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
|
| +
|
| + EXPECT_EQ(url.spec(), headers["url"]);
|
| + EXPECT_TRUE(headers.find("upgrade") == headers.end());
|
| + EXPECT_TRUE(headers.find("Upgrade") == headers.end());
|
| + EXPECT_TRUE(headers.find("connection") == headers.end());
|
| + EXPECT_TRUE(headers.find("Connection") == headers.end());
|
| + EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
|
| + EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
|
| + EXPECT_EQ("example.com", headers["host"]);
|
| + EXPECT_EQ("http://example.com", headers["sec-websocket-origin"]);
|
| + EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
|
| + const char bogus_header[] = "X\0Y";
|
| + std::string bogus_header_str(bogus_header, sizeof(bogus_header) - 1);
|
| + EXPECT_EQ(bogus_header_str, headers["x-bogus-header"]);
|
| +
|
| + EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
|
| +
|
| + headers.clear();
|
| +
|
| + headers["sec-websocket-protocol"] = "sample";
|
| +
|
| + WebSocketHandshakeResponseHandler response_handler;
|
| + response_handler.set_protocol_version(request_handler.protocol_version());
|
| + EXPECT_EQ(6, response_handler.protocol_version());
|
| + EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
|
| + EXPECT_TRUE(response_handler.HasResponse());
|
| +
|
| + // Note that order of sec-websocket-* is sensitive with hash_map order.
|
| + static const char* kHandshakeResponseExpectedMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "sec-websocket-protocol: sample\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| +}
|
|
|
| TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
|
| WebSocketHandshakeRequestHandler request_handler;
|
| @@ -347,6 +618,7 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
|
|
|
| EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(0, request_handler.protocol_version());
|
|
|
| GURL url("ws://example.com/demo");
|
| std::string challenge;
|
| @@ -383,6 +655,7 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
|
| headers["set-cookie"] = cookie;
|
|
|
| WebSocketHandshakeResponseHandler response_handler;
|
| + EXPECT_EQ(0, response_handler.protocol_version());
|
| EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
|
| EXPECT_TRUE(response_handler.HasResponse());
|
|
|
| @@ -402,4 +675,73 @@ TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
|
| EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| }
|
|
|
| +TEST(WebSocketHandshakeHandlerTest,
|
| + SpdyRequestResponseWithCookiesHybi06Handshake) {
|
| + WebSocketHandshakeRequestHandler request_handler;
|
| +
|
| + // Note that websocket won't use multiple headers in request now.
|
| + static const char* kHandshakeRequestMessage =
|
| + "GET /demo HTTP/1.1\r\n"
|
| + "Host: example.com\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
|
| + "Sec-WebSocket-Origin: http://example.com\r\n"
|
| + "Sec-WebSocket-Protocol: sample\r\n"
|
| + "Sec-WebSocket-Version: 6\r\n"
|
| + "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
|
| + strlen(kHandshakeRequestMessage)));
|
| + EXPECT_EQ(6, request_handler.protocol_version());
|
| +
|
| + GURL url("ws://example.com/demo");
|
| + std::string challenge;
|
| + spdy::SpdyHeaderBlock headers;
|
| + ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
|
| +
|
| + EXPECT_EQ(url.spec(), headers["url"]);
|
| + EXPECT_TRUE(headers.find("upgrade") == headers.end());
|
| + EXPECT_TRUE(headers.find("Upgrade") == headers.end());
|
| + EXPECT_TRUE(headers.find("connection") == headers.end());
|
| + EXPECT_TRUE(headers.find("Connection") == headers.end());
|
| + EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
|
| + EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
|
| + EXPECT_EQ("example.com", headers["host"]);
|
| + EXPECT_EQ("http://example.com", headers["sec-websocket-origin"]);
|
| + EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
|
| + EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1",
|
| + headers["cookie"]);
|
| +
|
| + EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
|
| +
|
| + headers.clear();
|
| +
|
| + headers["sec-websocket-protocol"] = "sample";
|
| + std::string cookie = "WK-websocket-test=1";
|
| + cookie.append(1, '\0');
|
| + cookie += "WK-websocket-test-httponly=1; HttpOnly";
|
| + headers["set-cookie"] = cookie;
|
| +
|
| + WebSocketHandshakeResponseHandler response_handler;
|
| + response_handler.set_protocol_version(request_handler.protocol_version());
|
| + EXPECT_EQ(6, response_handler.protocol_version());
|
| + EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
|
| + EXPECT_TRUE(response_handler.HasResponse());
|
| +
|
| + // Note that order of sec-websocket-* is sensitive with hash_map order.
|
| + static const char* kHandshakeResponseExpectedMessage =
|
| + "HTTP/1.1 101 Switching Protocols\r\n"
|
| + "Upgrade: websocket\r\n"
|
| + "Connection: Upgrade\r\n"
|
| + "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
|
| + "sec-websocket-protocol: sample\r\n"
|
| + "set-cookie: WK-websocket-test=1\r\n"
|
| + "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
|
| + "\r\n";
|
| +
|
| + EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
|
| +}
|
| +
|
| } // namespace net
|
|
|