// 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. #ifndef NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ #define NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ #include #include #include #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "base/run_loop.h" #include "base/timer/timer.h" #include "net/base/net_export.h" #include "net/socket/socket_test_util.h" #include "net/ssl/ssl_info.h" #include "net/websockets/websocket_event_interface.h" #include "net/websockets/websocket_test_util.h" namespace net { class HttpRequestHeaders; class HttpResponseHeaders; class WebSocketStream; class WebSocketStreamRequest; struct WebSocketHandshakeRequestInfo; struct WebSocketHandshakeResponseInfo; class WebSocketStreamCreateTestBase { public: using HeaderKeyValuePair = std::pair; WebSocketStreamCreateTestBase(); virtual ~WebSocketStreamCreateTestBase(); // A wrapper for CreateAndConnectStreamForTesting that knows about our default // parameters. void CreateAndConnectStream(const std::string& socket_url, const std::vector& sub_protocols, const url::Origin& origin, scoped_ptr timer); static std::vector RequestHeadersToVector( const HttpRequestHeaders& headers); static std::vector ResponseHeadersToVector( const HttpResponseHeaders& headers); const std::string& failure_message() const { return failure_message_; } bool has_failed() const { return has_failed_; } // Runs |connect_run_loop_|. It will stop when the connection establishes or // fails. void WaitUntilConnectDone(); // A simple function to make the tests more readable. std::vector NoSubProtocols(); protected: WebSocketTestURLRequestContextHost url_request_context_host_; scoped_ptr stream_request_; // Only set if the connection succeeded. scoped_ptr stream_; // Only set if the connection failed. std::string failure_message_; bool has_failed_; scoped_ptr request_info_; scoped_ptr response_info_; scoped_ptr ssl_error_callbacks_; SSLInfo ssl_info_; bool ssl_fatal_; ScopedVector ssl_data_; // This temporarily sets WebSocketEndpointLockManager unlock delay to zero // during tests. ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_; base::RunLoop connect_run_loop_; private: class TestConnectDelegate; DISALLOW_COPY_AND_ASSIGN(WebSocketStreamCreateTestBase); }; } // namespace net #endif // NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_