Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: net/websockets/websocket_handshake_handler_unittest.cc

Issue 6823075: Accept new WebSocket handshake format (hybi-04 and later). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replace DCHECKs with DVLOG. Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/websockets/websocket_handshake_handler.cc ('k') | net/websockets/websocket_job.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "googleurl/src/gurl.h" 10 #include "googleurl/src/gurl.h"
11 #include "net/http/http_response_headers.h" 11 #include "net/http/http_response_headers.h"
(...skipping 28 matching lines...) Expand all
40 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 40 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
41 "Sec-WebSocket-Protocol: sample\r\n" 41 "Sec-WebSocket-Protocol: sample\r\n"
42 "Upgrade: WebSocket\r\n" 42 "Upgrade: WebSocket\r\n"
43 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 43 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
44 "Origin: http://example.com\r\n" 44 "Origin: http://example.com\r\n"
45 "\r\n" 45 "\r\n"
46 "^n:ds[4U"; 46 "^n:ds[4U";
47 47
48 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage, 48 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
49 strlen(kHandshakeRequestMessage))); 49 strlen(kHandshakeRequestMessage)));
50 EXPECT_EQ(0, handler.protocol_version());
50 51
51 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); 52 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
52 53
54 EXPECT_EQ(kHandshakeRequestMessage, handler.GetRawRequest());
55 }
56
57 TEST(WebSocketHandshakeRequestHandlerTest, SimpleRequestHybi06Handshake) {
58 WebSocketHandshakeRequestHandler handler;
59
60 static const char* kHandshakeRequestMessage =
61 "GET /demo HTTP/1.1\r\n"
62 "Host: example.com\r\n"
63 "Upgrade: websocket\r\n"
64 "Connection: Upgrade\r\n"
65 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
66 "Sec-WebSocket-Origin: http://example.com\r\n"
67 "Sec-WebSocket-Protocol: sample\r\n"
68 "Sec-WebSocket-Version: 6\r\n"
69 "\r\n";
70
71 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
72 strlen(kHandshakeRequestMessage)));
73 EXPECT_EQ(6, handler.protocol_version());
74
75 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
76
53 EXPECT_EQ(kHandshakeRequestMessage, handler.GetRawRequest()); 77 EXPECT_EQ(kHandshakeRequestMessage, handler.GetRawRequest());
54 } 78 }
55 79
56 TEST(WebSocketHandshakeRequestHandlerTest, ReplaceRequestCookies) { 80 TEST(WebSocketHandshakeRequestHandlerTest, ReplaceRequestCookies) {
57 WebSocketHandshakeRequestHandler handler; 81 WebSocketHandshakeRequestHandler handler;
58 82
59 static const char* kHandshakeRequestMessage = 83 static const char* kHandshakeRequestMessage =
60 "GET /demo HTTP/1.1\r\n" 84 "GET /demo HTTP/1.1\r\n"
61 "Host: example.com\r\n" 85 "Host: example.com\r\n"
62 "Connection: Upgrade\r\n" 86 "Connection: Upgrade\r\n"
63 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 87 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
64 "Sec-WebSocket-Protocol: sample\r\n" 88 "Sec-WebSocket-Protocol: sample\r\n"
65 "Upgrade: WebSocket\r\n" 89 "Upgrade: WebSocket\r\n"
66 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 90 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
67 "Origin: http://example.com\r\n" 91 "Origin: http://example.com\r\n"
68 "Cookie: WK-websocket-test=1\r\n" 92 "Cookie: WK-websocket-test=1\r\n"
69 "\r\n" 93 "\r\n"
70 "^n:ds[4U"; 94 "^n:ds[4U";
71 95
72 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage, 96 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
73 strlen(kHandshakeRequestMessage))); 97 strlen(kHandshakeRequestMessage)));
98 EXPECT_EQ(0, handler.protocol_version());
74 99
75 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); 100 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
76 101
77 handler.AppendHeaderIfMissing("Cookie", 102 handler.AppendHeaderIfMissing("Cookie",
78 "WK-websocket-test=1; " 103 "WK-websocket-test=1; "
79 "WK-websocket-test-httponly=1"); 104 "WK-websocket-test-httponly=1");
80 105
81 static const char* kHandshakeRequestExpectedMessage = 106 static const char* kHandshakeRequestExpectedMessage =
82 "GET /demo HTTP/1.1\r\n" 107 "GET /demo HTTP/1.1\r\n"
83 "Host: example.com\r\n" 108 "Host: example.com\r\n"
84 "Connection: Upgrade\r\n" 109 "Connection: Upgrade\r\n"
85 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 110 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
86 "Sec-WebSocket-Protocol: sample\r\n" 111 "Sec-WebSocket-Protocol: sample\r\n"
87 "Upgrade: WebSocket\r\n" 112 "Upgrade: WebSocket\r\n"
88 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 113 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
89 "Origin: http://example.com\r\n" 114 "Origin: http://example.com\r\n"
90 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n" 115 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
91 "\r\n" 116 "\r\n"
92 "^n:ds[4U"; 117 "^n:ds[4U";
93 118
94 EXPECT_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest()); 119 EXPECT_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest());
95 } 120 }
96 121
122 TEST(WebSocketHandshakeRequestHandlerTest,
123 ReplaceRequestCookiesHybi06Handshake) {
124 WebSocketHandshakeRequestHandler handler;
125
126 static const char* kHandshakeRequestMessage =
127 "GET /demo HTTP/1.1\r\n"
128 "Host: example.com\r\n"
129 "Upgrade: websocket\r\n"
130 "Connection: Upgrade\r\n"
131 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
132 "Sec-WebSocket-Origin: http://example.com\r\n"
133 "Sec-WebSocket-Protocol: sample\r\n"
134 "Sec-WebSocket-Version: 6\r\n"
135 "Cookie: WK-websocket-test=1\r\n"
136 "\r\n";
137
138 EXPECT_TRUE(handler.ParseRequest(kHandshakeRequestMessage,
139 strlen(kHandshakeRequestMessage)));
140 EXPECT_EQ(6, handler.protocol_version());
141
142 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
143
144 handler.AppendHeaderIfMissing("Cookie",
145 "WK-websocket-test=1; "
146 "WK-websocket-test-httponly=1");
147
148 static const char* kHandshakeRequestExpectedMessage =
149 "GET /demo HTTP/1.1\r\n"
150 "Host: example.com\r\n"
151 "Upgrade: websocket\r\n"
152 "Connection: Upgrade\r\n"
153 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
154 "Sec-WebSocket-Origin: http://example.com\r\n"
155 "Sec-WebSocket-Protocol: sample\r\n"
156 "Sec-WebSocket-Version: 6\r\n"
157 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
158 "\r\n";
159
160 EXPECT_EQ(kHandshakeRequestExpectedMessage, handler.GetRawRequest());
161 }
162
97 TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponse) { 163 TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponse) {
98 WebSocketHandshakeResponseHandler handler; 164 WebSocketHandshakeResponseHandler handler;
165 EXPECT_EQ(0, handler.protocol_version());
99 166
100 static const char* kHandshakeResponseMessage = 167 static const char* kHandshakeResponseMessage =
101 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 168 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
102 "Upgrade: WebSocket\r\n" 169 "Upgrade: WebSocket\r\n"
103 "Connection: Upgrade\r\n" 170 "Connection: Upgrade\r\n"
104 "Sec-WebSocket-Origin: http://example.com\r\n" 171 "Sec-WebSocket-Origin: http://example.com\r\n"
105 "Sec-WebSocket-Location: ws://example.com/demo\r\n" 172 "Sec-WebSocket-Location: ws://example.com/demo\r\n"
106 "Sec-WebSocket-Protocol: sample\r\n" 173 "Sec-WebSocket-Protocol: sample\r\n"
107 "\r\n" 174 "\r\n"
108 "8jKS'y:G*Co,Wxa-"; 175 "8jKS'y:G*Co,Wxa-";
109 176
110 EXPECT_EQ(strlen(kHandshakeResponseMessage), 177 EXPECT_EQ(strlen(kHandshakeResponseMessage),
111 handler.ParseRawResponse(kHandshakeResponseMessage, 178 handler.ParseRawResponse(kHandshakeResponseMessage,
112 strlen(kHandshakeResponseMessage))); 179 strlen(kHandshakeResponseMessage)));
113 EXPECT_TRUE(handler.HasResponse()); 180 EXPECT_TRUE(handler.HasResponse());
114 181
115 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders)); 182 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
116 183
117 EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse()); 184 EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse());
118 } 185 }
119 186
187 TEST(WebSocketHandshakeResponseHandlerTest, SimpleResponseHybi06Handshake) {
188 WebSocketHandshakeResponseHandler handler;
189 handler.set_protocol_version(6);
190 EXPECT_EQ(6, handler.protocol_version());
191
192 static const char* kHandshakeResponseMessage =
193 "HTTP/1.1 101 Switching Protocols\r\n"
194 "Upgrade: websocket\r\n"
195 "Connection: Upgrade\r\n"
196 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
197 "Sec-WebSocket-Protocol: sample\r\n"
198 "\r\n";
199
200 EXPECT_EQ(strlen(kHandshakeResponseMessage),
201 handler.ParseRawResponse(kHandshakeResponseMessage,
202 strlen(kHandshakeResponseMessage)));
203 EXPECT_TRUE(handler.HasResponse());
204
205 handler.RemoveHeaders(kCookieHeaders, arraysize(kCookieHeaders));
206
207 EXPECT_EQ(kHandshakeResponseMessage, handler.GetResponse());
208 }
209
120 TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) { 210 TEST(WebSocketHandshakeResponseHandlerTest, ReplaceResponseCookies) {
121 WebSocketHandshakeResponseHandler handler; 211 WebSocketHandshakeResponseHandler handler;
212 EXPECT_EQ(0, handler.protocol_version());
122 213
123 static const char* kHandshakeResponseMessage = 214 static const char* kHandshakeResponseMessage =
124 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 215 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
125 "Upgrade: WebSocket\r\n" 216 "Upgrade: WebSocket\r\n"
126 "Connection: Upgrade\r\n" 217 "Connection: Upgrade\r\n"
127 "Sec-WebSocket-Origin: http://example.com\r\n" 218 "Sec-WebSocket-Origin: http://example.com\r\n"
128 "Sec-WebSocket-Location: ws://example.com/demo\r\n" 219 "Sec-WebSocket-Location: ws://example.com/demo\r\n"
129 "Sec-WebSocket-Protocol: sample\r\n" 220 "Sec-WebSocket-Protocol: sample\r\n"
130 "Set-Cookie: WK-websocket-test-1\r\n" 221 "Set-Cookie: WK-websocket-test-1\r\n"
131 "Set-Cookie: WK-websocket-test-httponly=1; HttpOnly\r\n" 222 "Set-Cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
(...skipping 17 matching lines...) Expand all
149 "Connection: Upgrade\r\n" 240 "Connection: Upgrade\r\n"
150 "Sec-WebSocket-Origin: http://example.com\r\n" 241 "Sec-WebSocket-Origin: http://example.com\r\n"
151 "Sec-WebSocket-Location: ws://example.com/demo\r\n" 242 "Sec-WebSocket-Location: ws://example.com/demo\r\n"
152 "Sec-WebSocket-Protocol: sample\r\n" 243 "Sec-WebSocket-Protocol: sample\r\n"
153 "\r\n" 244 "\r\n"
154 "8jKS'y:G*Co,Wxa-"; 245 "8jKS'y:G*Co,Wxa-";
155 246
156 EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse()); 247 EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse());
157 } 248 }
158 249
250 TEST(WebSocketHandshakeResponseHandlerTest,
251 ReplaceResponseCookiesHybi06Handshake) {
252 WebSocketHandshakeResponseHandler handler;
253 handler.set_protocol_version(6);
254 EXPECT_EQ(6, handler.protocol_version());
255
256 static const char* kHandshakeResponseMessage =
257 "HTTP/1.1 101 Switching Protocols\r\n"
258 "Upgrade: websocket\r\n"
259 "Connection: Upgrade\r\n"
260 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
261 "Sec-WebSocket-Protocol: sample\r\n"
262 "Set-Cookie: WK-websocket-test-1\r\n"
263 "Set-Cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
264 "\r\n";
265
266 EXPECT_EQ(strlen(kHandshakeResponseMessage),
267 handler.ParseRawResponse(kHandshakeResponseMessage,
268 strlen(kHandshakeResponseMessage)));
269 EXPECT_TRUE(handler.HasResponse());
270 std::vector<std::string> cookies;
271 handler.GetHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders), &cookies);
272 ASSERT_EQ(2U, cookies.size());
273 EXPECT_EQ("WK-websocket-test-1", cookies[0]);
274 EXPECT_EQ("WK-websocket-test-httponly=1; HttpOnly", cookies[1]);
275 handler.RemoveHeaders(kSetCookieHeaders, arraysize(kSetCookieHeaders));
276
277 static const char* kHandshakeResponseExpectedMessage =
278 "HTTP/1.1 101 Switching Protocols\r\n"
279 "Upgrade: websocket\r\n"
280 "Connection: Upgrade\r\n"
281 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
282 "Sec-WebSocket-Protocol: sample\r\n"
283 "\r\n";
284
285 EXPECT_EQ(kHandshakeResponseExpectedMessage, handler.GetResponse());
286 }
287
159 TEST(WebSocketHandshakeResponseHandlerTest, BadResponse) { 288 TEST(WebSocketHandshakeResponseHandlerTest, BadResponse) {
160 WebSocketHandshakeResponseHandler handler; 289 WebSocketHandshakeResponseHandler handler;
161 290
162 static const char* kBadMessage = "\n\n\r\net-Location: w"; 291 static const char* kBadMessage = "\n\n\r\net-Location: w";
163 EXPECT_EQ(strlen(kBadMessage), 292 EXPECT_EQ(strlen(kBadMessage),
164 handler.ParseRawResponse(kBadMessage, strlen(kBadMessage))); 293 handler.ParseRawResponse(kBadMessage, strlen(kBadMessage)));
165 EXPECT_TRUE(handler.HasResponse()); 294 EXPECT_TRUE(handler.HasResponse());
166 EXPECT_EQ(kBadMessage, handler.GetResponse()); 295 EXPECT_EQ(kBadMessage, handler.GetResponse());
167 } 296 }
168 297
(...skipping 17 matching lines...) Expand all
186 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 315 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
187 "Sec-WebSocket-Protocol: sample\r\n" 316 "Sec-WebSocket-Protocol: sample\r\n"
188 "Upgrade: WebSocket\r\n" 317 "Upgrade: WebSocket\r\n"
189 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 318 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
190 "Origin: http://example.com\r\n" 319 "Origin: http://example.com\r\n"
191 "\r\n" 320 "\r\n"
192 "^n:ds[4U"; 321 "^n:ds[4U";
193 322
194 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage, 323 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
195 strlen(kHandshakeRequestMessage))); 324 strlen(kHandshakeRequestMessage)));
325 EXPECT_EQ(0, request_handler.protocol_version());
196 326
197 GURL url("ws://example.com/demo"); 327 GURL url("ws://example.com/demo");
198 std::string challenge; 328 std::string challenge;
199 const HttpRequestInfo& request_info = 329 const HttpRequestInfo& request_info =
200 request_handler.GetRequestInfo(url, &challenge); 330 request_handler.GetRequestInfo(url, &challenge);
201 331
202 EXPECT_EQ(url, request_info.url); 332 EXPECT_EQ(url, request_info.url);
203 EXPECT_EQ("GET", request_info.method); 333 EXPECT_EQ("GET", request_info.method);
204 EXPECT_FALSE(request_info.extra_headers.HasHeader("Upgrade")); 334 EXPECT_FALSE(request_info.extra_headers.HasHeader("Upgrade"));
205 EXPECT_FALSE(request_info.extra_headers.HasHeader("Connection")); 335 EXPECT_FALSE(request_info.extra_headers.HasHeader("Connection"));
206 EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key1")); 336 EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key1"));
207 EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key2")); 337 EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key2"));
208 std::string value; 338 std::string value;
209 EXPECT_TRUE(request_info.extra_headers.GetHeader("Host", &value)); 339 EXPECT_TRUE(request_info.extra_headers.GetHeader("Host", &value));
210 EXPECT_EQ("example.com", value); 340 EXPECT_EQ("example.com", value);
211 EXPECT_TRUE(request_info.extra_headers.GetHeader("Origin", &value)); 341 EXPECT_TRUE(request_info.extra_headers.GetHeader("Origin", &value));
212 EXPECT_EQ("http://example.com", value); 342 EXPECT_EQ("http://example.com", value);
213 EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Protocol", 343 EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Protocol",
214 &value)); 344 &value));
215 EXPECT_EQ("sample", value); 345 EXPECT_EQ("sample", value);
216 346
217 const char expected_challenge[] = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U"; 347 const char* expected_challenge = "\x31\x6e\x41\x13\x0f\x7e\xd6\x3c^n:ds[4U";
218 348
219 EXPECT_EQ(expected_challenge, challenge); 349 EXPECT_EQ(expected_challenge, challenge);
220 350
221 static const char* kHandshakeResponseHeader = 351 static const char* kHandshakeResponseHeader =
222 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 352 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
223 "Sec-WebSocket-Origin: http://example.com\r\n" 353 "Sec-WebSocket-Origin: http://example.com\r\n"
224 "Sec-WebSocket-Location: ws://example.com/demo\r\n" 354 "Sec-WebSocket-Location: ws://example.com/demo\r\n"
225 "Sec-WebSocket-Protocol: sample\r\n"; 355 "Sec-WebSocket-Protocol: sample\r\n";
226 356
227 std::string raw_headers = 357 std::string raw_headers =
228 HttpUtil::AssembleRawHeaders(kHandshakeResponseHeader, 358 HttpUtil::AssembleRawHeaders(kHandshakeResponseHeader,
229 strlen(kHandshakeResponseHeader)); 359 strlen(kHandshakeResponseHeader));
230 HttpResponseInfo response_info; 360 HttpResponseInfo response_info;
231 response_info.headers = new HttpResponseHeaders(raw_headers); 361 response_info.headers = new HttpResponseHeaders(raw_headers);
232 362
233 EXPECT_TRUE(StartsWithASCII(response_info.headers->GetStatusLine(), 363 EXPECT_TRUE(StartsWithASCII(response_info.headers->GetStatusLine(),
234 "HTTP/1.1 101 ", false)); 364 "HTTP/1.1 101 ", false));
235 EXPECT_FALSE(response_info.headers->HasHeader("Upgrade")); 365 EXPECT_FALSE(response_info.headers->HasHeader("Upgrade"));
236 EXPECT_FALSE(response_info.headers->HasHeader("Connection")); 366 EXPECT_FALSE(response_info.headers->HasHeader("Connection"));
237 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Origin", 367 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Origin",
238 "http://example.com")); 368 "http://example.com"));
239 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Location", 369 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Location",
240 "ws://example.com/demo")); 370 "ws://example.com/demo"));
241 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Protocol", 371 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Protocol",
242 "sample")); 372 "sample"));
243 373
244 WebSocketHandshakeResponseHandler response_handler; 374 WebSocketHandshakeResponseHandler response_handler;
375 EXPECT_EQ(0, response_handler.protocol_version());
245 EXPECT_TRUE(response_handler.ParseResponseInfo(response_info, challenge)); 376 EXPECT_TRUE(response_handler.ParseResponseInfo(response_info, challenge));
246 EXPECT_TRUE(response_handler.HasResponse()); 377 EXPECT_TRUE(response_handler.HasResponse());
247 378
248 static const char* kHandshakeResponseExpectedMessage = 379 static const char* kHandshakeResponseExpectedMessage =
249 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 380 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
250 "Upgrade: WebSocket\r\n" 381 "Upgrade: WebSocket\r\n"
251 "Connection: Upgrade\r\n" 382 "Connection: Upgrade\r\n"
252 "Sec-WebSocket-Origin: http://example.com\r\n" 383 "Sec-WebSocket-Origin: http://example.com\r\n"
253 "Sec-WebSocket-Location: ws://example.com/demo\r\n" 384 "Sec-WebSocket-Location: ws://example.com/demo\r\n"
254 "Sec-WebSocket-Protocol: sample\r\n" 385 "Sec-WebSocket-Protocol: sample\r\n"
255 "\r\n" 386 "\r\n"
256 "8jKS'y:G*Co,Wxa-"; 387 "8jKS'y:G*Co,Wxa-";
257 388
258 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); 389 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
259 } 390 }
260 391
392 TEST(WebSocketHandshakeHandlerTest, HttpRequestResponseHybi06Handshake) {
393 WebSocketHandshakeRequestHandler request_handler;
394
395 static const char* kHandshakeRequestMessage =
396 "GET /demo HTTP/1.1\r\n"
397 "Host: example.com\r\n"
398 "Upgrade: websocket\r\n"
399 "Connection: Upgrade\r\n"
400 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
401 "Sec-WebSocket-Origin: http://example.com\r\n"
402 "Sec-WebSocket-Protocol: sample\r\n"
403 "Sec-WebSocket-Version: 6\r\n"
404 "\r\n";
405
406 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
407 strlen(kHandshakeRequestMessage)));
408 EXPECT_EQ(6, request_handler.protocol_version());
409
410 GURL url("ws://example.com/demo");
411 std::string challenge;
412 const HttpRequestInfo& request_info =
413 request_handler.GetRequestInfo(url, &challenge);
414
415 EXPECT_EQ(url, request_info.url);
416 EXPECT_EQ("GET", request_info.method);
417 EXPECT_FALSE(request_info.extra_headers.HasHeader("Upgrade"));
418 EXPECT_FALSE(request_info.extra_headers.HasHeader("Connection"));
419 EXPECT_FALSE(request_info.extra_headers.HasHeader("Sec-WebSocket-Key"));
420 std::string value;
421 EXPECT_TRUE(request_info.extra_headers.GetHeader("Host", &value));
422 EXPECT_EQ("example.com", value);
423 EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Origin",
424 &value));
425 EXPECT_EQ("http://example.com", value);
426 EXPECT_TRUE(request_info.extra_headers.GetHeader("Sec-WebSocket-Protocol",
427 &value));
428 EXPECT_EQ("sample", value);
429
430 EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
431
432 static const char* kHandshakeResponseHeader =
433 "HTTP/1.1 101 Switching Protocols\r\n"
434 "Sec-WebSocket-Protocol: sample\r\n";
435
436 std::string raw_headers =
437 HttpUtil::AssembleRawHeaders(kHandshakeResponseHeader,
438 strlen(kHandshakeResponseHeader));
439 HttpResponseInfo response_info;
440 response_info.headers = new HttpResponseHeaders(raw_headers);
441
442 EXPECT_TRUE(StartsWithASCII(response_info.headers->GetStatusLine(),
443 "HTTP/1.1 101 ", false));
444 EXPECT_FALSE(response_info.headers->HasHeader("Upgrade"));
445 EXPECT_FALSE(response_info.headers->HasHeader("Connection"));
446 EXPECT_FALSE(response_info.headers->HasHeader("Sec-WebSocket-Accept"));
447 EXPECT_TRUE(response_info.headers->HasHeaderValue("Sec-WebSocket-Protocol",
448 "sample"));
449
450 WebSocketHandshakeResponseHandler response_handler;
451 response_handler.set_protocol_version(request_handler.protocol_version());
452 EXPECT_EQ(6, response_handler.protocol_version());
453
454 EXPECT_TRUE(response_handler.ParseResponseInfo(response_info, challenge));
455 EXPECT_TRUE(response_handler.HasResponse());
456
457 static const char* kHandshakeResponseExpectedMessage =
458 "HTTP/1.1 101 Switching Protocols\r\n"
459 "Upgrade: websocket\r\n"
460 "Connection: Upgrade\r\n"
461 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
462 "Sec-WebSocket-Protocol: sample\r\n"
463 "\r\n";
464
465 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
466 }
467
261 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) { 468 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
262 WebSocketHandshakeRequestHandler request_handler; 469 WebSocketHandshakeRequestHandler request_handler;
263 470
264 static const char* kHandshakeRequestMessage = 471 static const char* kHandshakeRequestMessage =
265 "GET /demo HTTP/1.1\r\n" 472 "GET /demo HTTP/1.1\r\n"
266 "Host: example.com\r\n" 473 "Host: example.com\r\n"
267 "Connection: Upgrade\r\n" 474 "Connection: Upgrade\r\n"
268 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 475 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
269 "Sec-WebSocket-Protocol: sample\r\n" 476 "Sec-WebSocket-Protocol: sample\r\n"
270 "Upgrade: WebSocket\r\n" 477 "Upgrade: WebSocket\r\n"
271 "X-bogus-header: X\r\n" 478 "X-bogus-header: X\r\n"
272 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 479 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
273 "Origin: http://example.com\r\n" 480 "Origin: http://example.com\r\n"
274 "X-bogus-header: Y\r\n" 481 "X-bogus-header: Y\r\n"
275 "\r\n" 482 "\r\n"
276 "^n:ds[4U"; 483 "^n:ds[4U";
277 484
278 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage, 485 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
279 strlen(kHandshakeRequestMessage))); 486 strlen(kHandshakeRequestMessage)));
487 EXPECT_EQ(0, request_handler.protocol_version());
280 488
281 GURL url("ws://example.com/demo"); 489 GURL url("ws://example.com/demo");
282 std::string challenge; 490 std::string challenge;
283 spdy::SpdyHeaderBlock headers; 491 spdy::SpdyHeaderBlock headers;
284 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge)); 492 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
285 493
286 EXPECT_EQ(url.spec(), headers["url"]); 494 EXPECT_EQ(url.spec(), headers["url"]);
287 EXPECT_TRUE(headers.find("upgrade") == headers.end()); 495 EXPECT_TRUE(headers.find("upgrade") == headers.end());
288 EXPECT_TRUE(headers.find("Upgrade") == headers.end()); 496 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
289 EXPECT_TRUE(headers.find("connection") == headers.end()); 497 EXPECT_TRUE(headers.find("connection") == headers.end());
(...skipping 13 matching lines...) Expand all
303 511
304 EXPECT_EQ(expected_challenge, challenge); 512 EXPECT_EQ(expected_challenge, challenge);
305 513
306 headers.clear(); 514 headers.clear();
307 515
308 headers["sec-websocket-origin"] = "http://example.com"; 516 headers["sec-websocket-origin"] = "http://example.com";
309 headers["sec-websocket-location"] = "ws://example.com/demo"; 517 headers["sec-websocket-location"] = "ws://example.com/demo";
310 headers["sec-websocket-protocol"] = "sample"; 518 headers["sec-websocket-protocol"] = "sample";
311 519
312 WebSocketHandshakeResponseHandler response_handler; 520 WebSocketHandshakeResponseHandler response_handler;
521 EXPECT_EQ(0, response_handler.protocol_version());
313 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge)); 522 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
314 EXPECT_TRUE(response_handler.HasResponse()); 523 EXPECT_TRUE(response_handler.HasResponse());
315 524
316 // Note that order of sec-websocket-* is sensitive with hash_map order. 525 // Note that order of sec-websocket-* is sensitive with hash_map order.
317 static const char* kHandshakeResponseExpectedMessage = 526 static const char* kHandshakeResponseExpectedMessage =
318 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 527 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
319 "Upgrade: WebSocket\r\n" 528 "Upgrade: WebSocket\r\n"
320 "Connection: Upgrade\r\n" 529 "Connection: Upgrade\r\n"
321 "sec-websocket-location: ws://example.com/demo\r\n" 530 "sec-websocket-location: ws://example.com/demo\r\n"
322 "sec-websocket-origin: http://example.com\r\n" 531 "sec-websocket-origin: http://example.com\r\n"
323 "sec-websocket-protocol: sample\r\n" 532 "sec-websocket-protocol: sample\r\n"
324 "\r\n" 533 "\r\n"
325 "8jKS'y:G*Co,Wxa-"; 534 "8jKS'y:G*Co,Wxa-";
326 535
327 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); 536 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
328 } 537 }
329 538
539 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseHybi06Handshake) {
540 WebSocketHandshakeRequestHandler request_handler;
541
542 static const char* kHandshakeRequestMessage =
543 "GET /demo HTTP/1.1\r\n"
544 "Host: example.com\r\n"
545 "Upgrade: websocket\r\n"
546 "Connection: Upgrade\r\n"
547 "X-bogus-header: X\r\n"
548 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
549 "Sec-WebSocket-Origin: http://example.com\r\n"
550 "Sec-WebSocket-Protocol: sample\r\n"
551 "Sec-WebSocket-Version: 6\r\n"
552 "X-bogus-header: Y\r\n"
553 "\r\n";
554
555 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
556 strlen(kHandshakeRequestMessage)));
557 EXPECT_EQ(6, request_handler.protocol_version());
558
559 GURL url("ws://example.com/demo");
560 std::string challenge;
561 spdy::SpdyHeaderBlock headers;
562 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
563
564 EXPECT_EQ(url.spec(), headers["url"]);
565 EXPECT_TRUE(headers.find("upgrade") == headers.end());
566 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
567 EXPECT_TRUE(headers.find("connection") == headers.end());
568 EXPECT_TRUE(headers.find("Connection") == headers.end());
569 EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
570 EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
571 EXPECT_EQ("example.com", headers["host"]);
572 EXPECT_EQ("http://example.com", headers["sec-websocket-origin"]);
573 EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
574 const char bogus_header[] = "X\0Y";
575 std::string bogus_header_str(bogus_header, sizeof(bogus_header) - 1);
576 EXPECT_EQ(bogus_header_str, headers["x-bogus-header"]);
577
578 EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
579
580 headers.clear();
581
582 headers["sec-websocket-protocol"] = "sample";
583
584 WebSocketHandshakeResponseHandler response_handler;
585 response_handler.set_protocol_version(request_handler.protocol_version());
586 EXPECT_EQ(6, response_handler.protocol_version());
587 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
588 EXPECT_TRUE(response_handler.HasResponse());
589
590 // Note that order of sec-websocket-* is sensitive with hash_map order.
591 static const char* kHandshakeResponseExpectedMessage =
592 "HTTP/1.1 101 Switching Protocols\r\n"
593 "Upgrade: websocket\r\n"
594 "Connection: Upgrade\r\n"
595 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
596 "sec-websocket-protocol: sample\r\n"
597 "\r\n";
598
599 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
600 }
330 601
331 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) { 602 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
332 WebSocketHandshakeRequestHandler request_handler; 603 WebSocketHandshakeRequestHandler request_handler;
333 604
334 // Note that websocket won't use multiple headers in request now. 605 // Note that websocket won't use multiple headers in request now.
335 static const char* kHandshakeRequestMessage = 606 static const char* kHandshakeRequestMessage =
336 "GET /demo HTTP/1.1\r\n" 607 "GET /demo HTTP/1.1\r\n"
337 "Host: example.com\r\n" 608 "Host: example.com\r\n"
338 "Connection: Upgrade\r\n" 609 "Connection: Upgrade\r\n"
339 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n" 610 "Sec-WebSocket-Key2: 12998 5 Y3 1 .P00\r\n"
340 "Sec-WebSocket-Protocol: sample\r\n" 611 "Sec-WebSocket-Protocol: sample\r\n"
341 "Upgrade: WebSocket\r\n" 612 "Upgrade: WebSocket\r\n"
342 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n" 613 "Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5\r\n"
343 "Origin: http://example.com\r\n" 614 "Origin: http://example.com\r\n"
344 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n" 615 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
345 "\r\n" 616 "\r\n"
346 "^n:ds[4U"; 617 "^n:ds[4U";
347 618
348 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage, 619 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
349 strlen(kHandshakeRequestMessage))); 620 strlen(kHandshakeRequestMessage)));
621 EXPECT_EQ(0, request_handler.protocol_version());
350 622
351 GURL url("ws://example.com/demo"); 623 GURL url("ws://example.com/demo");
352 std::string challenge; 624 std::string challenge;
353 spdy::SpdyHeaderBlock headers; 625 spdy::SpdyHeaderBlock headers;
354 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge)); 626 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
355 627
356 EXPECT_EQ(url.spec(), headers["url"]); 628 EXPECT_EQ(url.spec(), headers["url"]);
357 EXPECT_TRUE(headers.find("upgrade") == headers.end()); 629 EXPECT_TRUE(headers.find("upgrade") == headers.end());
358 EXPECT_TRUE(headers.find("Upgrade") == headers.end()); 630 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
359 EXPECT_TRUE(headers.find("connection") == headers.end()); 631 EXPECT_TRUE(headers.find("connection") == headers.end());
(...skipping 16 matching lines...) Expand all
376 648
377 headers["sec-websocket-origin"] = "http://example.com"; 649 headers["sec-websocket-origin"] = "http://example.com";
378 headers["sec-websocket-location"] = "ws://example.com/demo"; 650 headers["sec-websocket-location"] = "ws://example.com/demo";
379 headers["sec-websocket-protocol"] = "sample"; 651 headers["sec-websocket-protocol"] = "sample";
380 std::string cookie = "WK-websocket-test=1"; 652 std::string cookie = "WK-websocket-test=1";
381 cookie.append(1, '\0'); 653 cookie.append(1, '\0');
382 cookie += "WK-websocket-test-httponly=1; HttpOnly"; 654 cookie += "WK-websocket-test-httponly=1; HttpOnly";
383 headers["set-cookie"] = cookie; 655 headers["set-cookie"] = cookie;
384 656
385 WebSocketHandshakeResponseHandler response_handler; 657 WebSocketHandshakeResponseHandler response_handler;
658 EXPECT_EQ(0, response_handler.protocol_version());
386 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge)); 659 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
387 EXPECT_TRUE(response_handler.HasResponse()); 660 EXPECT_TRUE(response_handler.HasResponse());
388 661
389 // Note that order of sec-websocket-* is sensitive with hash_map order. 662 // Note that order of sec-websocket-* is sensitive with hash_map order.
390 static const char* kHandshakeResponseExpectedMessage = 663 static const char* kHandshakeResponseExpectedMessage =
391 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" 664 "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
392 "Upgrade: WebSocket\r\n" 665 "Upgrade: WebSocket\r\n"
393 "Connection: Upgrade\r\n" 666 "Connection: Upgrade\r\n"
394 "sec-websocket-location: ws://example.com/demo\r\n" 667 "sec-websocket-location: ws://example.com/demo\r\n"
395 "sec-websocket-origin: http://example.com\r\n" 668 "sec-websocket-origin: http://example.com\r\n"
396 "sec-websocket-protocol: sample\r\n" 669 "sec-websocket-protocol: sample\r\n"
397 "set-cookie: WK-websocket-test=1\r\n" 670 "set-cookie: WK-websocket-test=1\r\n"
398 "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n" 671 "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
399 "\r\n" 672 "\r\n"
400 "8jKS'y:G*Co,Wxa-"; 673 "8jKS'y:G*Co,Wxa-";
401 674
402 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); 675 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
403 } 676 }
404 677
678 TEST(WebSocketHandshakeHandlerTest,
679 SpdyRequestResponseWithCookiesHybi06Handshake) {
680 WebSocketHandshakeRequestHandler request_handler;
681
682 // Note that websocket won't use multiple headers in request now.
683 static const char* kHandshakeRequestMessage =
684 "GET /demo HTTP/1.1\r\n"
685 "Host: example.com\r\n"
686 "Upgrade: websocket\r\n"
687 "Connection: Upgrade\r\n"
688 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
689 "Sec-WebSocket-Origin: http://example.com\r\n"
690 "Sec-WebSocket-Protocol: sample\r\n"
691 "Sec-WebSocket-Version: 6\r\n"
692 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
693 "\r\n";
694
695 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
696 strlen(kHandshakeRequestMessage)));
697 EXPECT_EQ(6, request_handler.protocol_version());
698
699 GURL url("ws://example.com/demo");
700 std::string challenge;
701 spdy::SpdyHeaderBlock headers;
702 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
703
704 EXPECT_EQ(url.spec(), headers["url"]);
705 EXPECT_TRUE(headers.find("upgrade") == headers.end());
706 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
707 EXPECT_TRUE(headers.find("connection") == headers.end());
708 EXPECT_TRUE(headers.find("Connection") == headers.end());
709 EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
710 EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
711 EXPECT_EQ("example.com", headers["host"]);
712 EXPECT_EQ("http://example.com", headers["sec-websocket-origin"]);
713 EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
714 EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1",
715 headers["cookie"]);
716
717 EXPECT_EQ("dGhlIHNhbXBsZSBub25jZQ==", challenge);
718
719 headers.clear();
720
721 headers["sec-websocket-protocol"] = "sample";
722 std::string cookie = "WK-websocket-test=1";
723 cookie.append(1, '\0');
724 cookie += "WK-websocket-test-httponly=1; HttpOnly";
725 headers["set-cookie"] = cookie;
726
727 WebSocketHandshakeResponseHandler response_handler;
728 response_handler.set_protocol_version(request_handler.protocol_version());
729 EXPECT_EQ(6, response_handler.protocol_version());
730 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
731 EXPECT_TRUE(response_handler.HasResponse());
732
733 // Note that order of sec-websocket-* is sensitive with hash_map order.
734 static const char* kHandshakeResponseExpectedMessage =
735 "HTTP/1.1 101 Switching Protocols\r\n"
736 "Upgrade: websocket\r\n"
737 "Connection: Upgrade\r\n"
738 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
739 "sec-websocket-protocol: sample\r\n"
740 "set-cookie: WK-websocket-test=1\r\n"
741 "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
742 "\r\n";
743
744 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
745 }
746
405 } // namespace net 747 } // namespace net
OLDNEW
« no previous file with comments | « net/websockets/websocket_handshake_handler.cc ('k') | net/websockets/websocket_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698