OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "net/websockets/websocket_test_util.h" | 5 #include "net/websockets/websocket_test_util.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/memory/scoped_vector.h" | 11 #include "base/memory/scoped_vector.h" |
12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "net/proxy/proxy_service.h" |
14 #include "net/socket/socket_test_util.h" | 15 #include "net/socket/socket_test_util.h" |
15 | 16 |
16 namespace net { | 17 namespace net { |
17 | 18 |
18 namespace { | 19 namespace { |
19 const uint64 kA = | 20 const uint64 kA = |
20 (static_cast<uint64>(0x5851f42d) << 32) + static_cast<uint64>(0x4c957f2d); | 21 (static_cast<uint64>(0x5851f42d) << 32) + static_cast<uint64>(0x4c957f2d); |
21 const uint64 kC = 12345; | 22 const uint64 kC = 12345; |
22 const uint64 kM = static_cast<uint64>(1) << 48; | 23 const uint64 kM = static_cast<uint64>(1) << 48; |
23 | 24 |
24 } // namespace | 25 } // namespace |
25 | 26 |
26 LinearCongruentialGenerator::LinearCongruentialGenerator(uint32 seed) | 27 LinearCongruentialGenerator::LinearCongruentialGenerator(uint32 seed) |
27 : current_(seed) {} | 28 : current_(seed) {} |
28 | 29 |
29 uint32 LinearCongruentialGenerator::Generate() { | 30 uint32 LinearCongruentialGenerator::Generate() { |
30 uint64 result = current_; | 31 uint64 result = current_; |
31 current_ = (current_ * kA + kC) % kM; | 32 current_ = (current_ * kA + kC) % kM; |
32 return static_cast<uint32>(result >> 16); | 33 return static_cast<uint32>(result >> 16); |
33 } | 34 } |
34 | 35 |
35 std::string WebSocketStandardRequest(const std::string& path, | 36 std::string WebSocketStandardRequest(const std::string& path, |
36 const std::string& host, | 37 const std::string& host, |
37 const std::string& origin, | 38 const std::string& origin, |
38 const std::string& extra_headers) { | 39 const std::string& extra_headers) { |
| 40 return WebSocketStandardRequestWithCookies(path, host, origin, std::string(), |
| 41 extra_headers); |
| 42 } |
| 43 |
| 44 std::string WebSocketStandardRequestWithCookies( |
| 45 const std::string& path, |
| 46 const std::string& host, |
| 47 const std::string& origin, |
| 48 const std::string& cookies, |
| 49 const std::string& extra_headers) { |
39 // Unrelated changes in net/http may change the order and default-values of | 50 // Unrelated changes in net/http may change the order and default-values of |
40 // HTTP headers, causing WebSocket tests to fail. It is safe to update this | 51 // HTTP headers, causing WebSocket tests to fail. It is safe to update this |
41 // string in that case. | 52 // string in that case. |
42 return base::StringPrintf( | 53 return base::StringPrintf( |
43 "GET %s HTTP/1.1\r\n" | 54 "GET %s HTTP/1.1\r\n" |
44 "Host: %s\r\n" | 55 "Host: %s\r\n" |
45 "Connection: Upgrade\r\n" | 56 "Connection: Upgrade\r\n" |
46 "Pragma: no-cache\r\n" | 57 "Pragma: no-cache\r\n" |
47 "Cache-Control: no-cache\r\n" | 58 "Cache-Control: no-cache\r\n" |
48 "Upgrade: websocket\r\n" | 59 "Upgrade: websocket\r\n" |
49 "Origin: %s\r\n" | 60 "Origin: %s\r\n" |
50 "Sec-WebSocket-Version: 13\r\n" | 61 "Sec-WebSocket-Version: 13\r\n" |
51 "User-Agent:\r\n" | 62 "User-Agent:\r\n" |
52 "Accept-Encoding: gzip, deflate\r\n" | 63 "Accept-Encoding: gzip, deflate\r\n" |
53 "Accept-Language: en-us,fr\r\n" | 64 "Accept-Language: en-us,fr\r\n" |
| 65 "%s" |
54 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" | 66 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" |
55 "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n" | 67 "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n" |
56 "%s\r\n", | 68 "%s\r\n", |
57 path.c_str(), host.c_str(), origin.c_str(), extra_headers.c_str()); | 69 path.c_str(), host.c_str(), origin.c_str(), cookies.c_str(), |
| 70 extra_headers.c_str()); |
58 } | 71 } |
59 | 72 |
60 std::string WebSocketStandardResponse(const std::string& extra_headers) { | 73 std::string WebSocketStandardResponse(const std::string& extra_headers) { |
61 return base::StringPrintf( | 74 return base::StringPrintf( |
62 "HTTP/1.1 101 Switching Protocols\r\n" | 75 "HTTP/1.1 101 Switching Protocols\r\n" |
63 "Upgrade: websocket\r\n" | 76 "Upgrade: websocket\r\n" |
64 "Connection: Upgrade\r\n" | 77 "Connection: Upgrade\r\n" |
65 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n" | 78 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n" |
66 "%s\r\n", | 79 "%s\r\n", |
67 extra_headers.c_str()); | 80 extra_headers.c_str()); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 void WebSocketTestURLRequestContextHost::AddRawExpectations( | 157 void WebSocketTestURLRequestContextHost::AddRawExpectations( |
145 scoped_ptr<DeterministicSocketData> socket_data) { | 158 scoped_ptr<DeterministicSocketData> socket_data) { |
146 maker_.AddRawExpectations(socket_data.Pass()); | 159 maker_.AddRawExpectations(socket_data.Pass()); |
147 } | 160 } |
148 | 161 |
149 void WebSocketTestURLRequestContextHost::AddSSLSocketDataProvider( | 162 void WebSocketTestURLRequestContextHost::AddSSLSocketDataProvider( |
150 scoped_ptr<SSLSocketDataProvider> ssl_socket_data) { | 163 scoped_ptr<SSLSocketDataProvider> ssl_socket_data) { |
151 maker_.AddSSLSocketDataProvider(ssl_socket_data.Pass()); | 164 maker_.AddSSLSocketDataProvider(ssl_socket_data.Pass()); |
152 } | 165 } |
153 | 166 |
| 167 void WebSocketTestURLRequestContextHost::SetProxyConfig( |
| 168 const std::string& proxy_rules) { |
| 169 DCHECK(!url_request_context_initialized_); |
| 170 proxy_service_.reset(ProxyService::CreateFixed(proxy_rules)); |
| 171 url_request_context_.set_proxy_service(proxy_service_.get()); |
| 172 } |
| 173 |
154 TestURLRequestContext* | 174 TestURLRequestContext* |
155 WebSocketTestURLRequestContextHost::GetURLRequestContext() { | 175 WebSocketTestURLRequestContextHost::GetURLRequestContext() { |
156 if (!url_request_context_initialized_) { | 176 if (!url_request_context_initialized_) { |
157 url_request_context_.Init(); | 177 url_request_context_.Init(); |
158 // A Network Delegate is required to make the URLRequest::Delegate work. | 178 // A Network Delegate is required to make the URLRequest::Delegate work. |
159 url_request_context_.set_network_delegate(&network_delegate_); | 179 url_request_context_.set_network_delegate(&network_delegate_); |
160 url_request_context_initialized_ = true; | 180 url_request_context_initialized_ = true; |
161 } | 181 } |
162 return &url_request_context_; | 182 return &url_request_context_; |
163 } | 183 } |
164 | 184 |
165 } // namespace net | 185 } // namespace net |
OLD | NEW |