Chromium Code Reviews| Index: net/websockets/websocket_stream_test_util.cc |
| diff --git a/net/websockets/websocket_stream_test_util.cc b/net/websockets/websocket_stream_test_util.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..52b70fcb01dc6e33834dbb9cf619f6e31bc59f54 |
| --- /dev/null |
| +++ b/net/websockets/websocket_stream_test_util.cc |
| @@ -0,0 +1,141 @@ |
| +// Copyright 2015 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. |
| + |
| +#include "net/websockets/websocket_stream_test_util.h" |
| + |
| +#include <algorithm> |
|
Ryan Sleevi
2015/02/02 20:14:42
Unnecessary?
yhirano
2015/02/09 10:50:14
Done.
|
| +#include <string> |
| +#include <utility> |
| +#include <vector> |
|
Ryan Sleevi
2015/02/02 20:14:41
These three are in your header, unnecessary.
yhirano
2015/02/09 10:50:15
Done.
|
| + |
| +#include "base/compiler_specific.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary
yhirano
2015/02/09 10:50:15
Done.
|
| +#include "base/timer/timer.h" |
| +#include "net/base/net_errors.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary
yhirano
2015/02/09 10:50:15
Done.
|
| +#include "net/http/http_request_headers.h" |
| +#include "net/http/http_response_headers.h" |
| +#include "net/socket/client_socket_handle.h" |
|
Ryan Sleevi
2015/02/02 20:14:41
unnecessary
yhirano
2015/02/09 10:50:14
Done.
|
| +#include "net/socket/socket_test_util.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary?
yhirano
2015/02/09 10:50:14
Done.
|
| +#include "net/test/cert_test_util.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary
yhirano
2015/02/09 10:50:14
Done.
|
| +#include "net/url_request/url_request_test_util.h" |
|
Ryan Sleevi
2015/02/02 20:14:41
unnecessary?
yhirano
2015/02/09 10:50:14
Done.
|
| +#include "net/websockets/websocket_basic_handshake_stream.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary?
yhirano
2015/02/09 10:50:15
For WebSocketBasicHandshakeStream
|
| +#include "net/websockets/websocket_handshake_request_info.h" |
| +#include "net/websockets/websocket_handshake_response_info.h" |
| +#include "net/websockets/websocket_handshake_stream_create_helper.h" |
| +#include "net/websockets/websocket_test_util.h" |
|
Ryan Sleevi
2015/02/02 20:14:42
unnecessary, in your header
yhirano
2015/02/09 10:50:15
Done.
|
| +#include "url/gurl.h" |
| +#include "url/origin.h" |
| + |
| +namespace net { |
| + |
| +using HeaderKeyValuePair = WebSocketStreamCreateTestBase::HeaderKeyValuePair; |
| + |
| +// A sub-class of WebSocketHandshakeStreamCreateHelper which always sets a |
| +// deterministic key to use in the WebSocket handshake. |
| +class DeterministicKeyWebSocketHandshakeStreamCreateHelper |
| + : public WebSocketHandshakeStreamCreateHelper { |
| + public: |
| + DeterministicKeyWebSocketHandshakeStreamCreateHelper( |
| + WebSocketStream::ConnectDelegate* connect_delegate, |
| + const std::vector<std::string>& requested_subprotocols) |
| + : WebSocketHandshakeStreamCreateHelper(connect_delegate, |
| + requested_subprotocols) {} |
| + |
| + void OnStreamCreated(WebSocketBasicHandshakeStream* stream) override { |
| + stream->SetWebSocketKeyForTesting("dGhlIHNhbXBsZSBub25jZQ=="); |
| + } |
| +}; |
| + |
| +class WebSocketStreamCreateTestBase::TestConnectDelegate |
| + : public WebSocketStream::ConnectDelegate { |
| + public: |
| + explicit TestConnectDelegate(WebSocketStreamCreateTestBase* owner) |
| + : owner_(owner) {} |
| + |
| + void OnSuccess(scoped_ptr<WebSocketStream> stream) override { |
| + stream.swap(owner_->stream_); |
| + } |
| + |
| + void OnFailure(const std::string& message) override { |
| + owner_->has_failed_ = true; |
| + owner_->failure_message_ = message; |
| + } |
| + |
| + void OnStartOpeningHandshake( |
| + scoped_ptr<WebSocketHandshakeRequestInfo> request) override { |
| + // Can be called multiple times (in the case of HTTP auth). Last call |
| + // wins. |
| + owner_->request_info_ = request.Pass(); |
| + } |
| + void OnFinishOpeningHandshake( |
| + scoped_ptr<WebSocketHandshakeResponseInfo> response) override { |
| + if (owner_->response_info_) |
| + ADD_FAILURE(); |
| + owner_->response_info_ = response.Pass(); |
| + } |
| + void OnSSLCertificateError( |
| + scoped_ptr<WebSocketEventInterface::SSLErrorCallbacks> |
| + ssl_error_callbacks, |
| + const SSLInfo& ssl_info, |
| + bool fatal) override { |
| + owner_->ssl_error_callbacks_ = ssl_error_callbacks.Pass(); |
| + owner_->ssl_info_ = ssl_info; |
| + owner_->ssl_fatal_ = fatal; |
| + } |
| + |
| + private: |
| + WebSocketStreamCreateTestBase* owner_; |
| +}; |
| + |
| +WebSocketStreamCreateTestBase::WebSocketStreamCreateTestBase() |
| + : has_failed_(false), ssl_fatal_(false) { |
| +} |
| + |
| +WebSocketStreamCreateTestBase::~WebSocketStreamCreateTestBase() { |
| +} |
| + |
| +void WebSocketStreamCreateTestBase::CreateAndConnectStream( |
| + const std::string& socket_url, |
| + const std::vector<std::string>& sub_protocols, |
| + const std::string& origin, |
| + scoped_ptr<base::Timer> timer) { |
| + for (size_t i = 0; i < ssl_data_.size(); ++i) { |
| + scoped_ptr<SSLSocketDataProvider> ssl_data(ssl_data_[i]); |
| + ssl_data_[i] = NULL; |
| + url_request_context_host_.AddSSLSocketDataProvider(ssl_data.Pass()); |
| + } |
| + ssl_data_.clear(); |
| + scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate( |
| + new TestConnectDelegate(this)); |
| + WebSocketStream::ConnectDelegate* delegate = connect_delegate.get(); |
| + scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( |
| + new DeterministicKeyWebSocketHandshakeStreamCreateHelper(delegate, |
| + sub_protocols)); |
| + stream_request_ = ::net::CreateAndConnectStreamForTesting( |
| + GURL(socket_url), create_helper.Pass(), url::Origin(origin), |
| + url_request_context_host_.GetURLRequestContext(), BoundNetLog(), |
| + connect_delegate.Pass(), |
| + timer ? timer.Pass() |
| + : scoped_ptr<base::Timer>(new base::Timer(false, false))); |
| +} |
| + |
| +std::vector<HeaderKeyValuePair> WebSocketStreamCreateTestBase::ToVector( |
| + const HttpRequestHeaders& headers) { |
| + HttpRequestHeaders::Iterator it(headers); |
| + std::vector<HeaderKeyValuePair> result; |
| + while (it.GetNext()) |
| + result.push_back(HeaderKeyValuePair(it.name(), it.value())); |
| + return result; |
| +} |
| + |
| +std::vector<HeaderKeyValuePair> WebSocketStreamCreateTestBase::ToVector( |
| + const HttpResponseHeaders& headers) { |
| + void* iter = NULL; |
| + std::string name, value; |
| + std::vector<HeaderKeyValuePair> result; |
| + while (headers.EnumerateHeaderLines(&iter, &name, &value)) |
| + result.push_back(HeaderKeyValuePair(name, value)); |
| + return result; |
| +} |
| + |
| +} // namespace net |