Index: net/socket_stream/socket_stream_unittest.cc |
diff --git a/net/socket_stream/socket_stream_unittest.cc b/net/socket_stream/socket_stream_unittest.cc |
index 76bb379d1d9f9f6e924aa3f10a1e191152316956..cc93035c7212523fe178f8036925d1072d51d64d 100644 |
--- a/net/socket_stream/socket_stream_unittest.cc |
+++ b/net/socket_stream/socket_stream_unittest.cc |
@@ -188,6 +188,26 @@ class TestURLRequestContextWithProxy : public TestURLRequestContext { |
virtual ~TestURLRequestContextWithProxy() {} |
}; |
+class TestSocketStreamNetworkDelegate : public TestNetworkDelegate { |
+ public: |
+ TestSocketStreamNetworkDelegate() |
+ : before_connect_result_(net::OK) {} |
+ virtual ~TestSocketStreamNetworkDelegate() {} |
+ |
+ virtual int OnBeforeSocketStreamConnect( |
+ net::SocketStream* stream, |
+ const net::CompletionCallback& callback) OVERRIDE { |
+ return before_connect_result_; |
+ } |
+ |
+ void SetBeforeConnectResult(int result) { |
+ before_connect_result_ = result; |
+ } |
+ |
+ private: |
+ int before_connect_result_; |
+}; |
+ |
} // namespace |
namespace net { |
@@ -646,4 +666,32 @@ TEST_F(SocketStreamTest, SecureProxyConnect) { |
EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); |
} |
+TEST_F(SocketStreamTest, BeforeConnectFailed) { |
+ TestCompletionCallback test_callback; |
+ |
+ scoped_ptr<SocketStreamEventRecorder> delegate( |
+ new SocketStreamEventRecorder(test_callback.callback())); |
+ |
+ TestURLRequestContext context; |
+ TestSocketStreamNetworkDelegate network_delegate; |
+ network_delegate.SetBeforeConnectResult(ERR_ACCESS_DENIED); |
+ context.set_network_delegate(&network_delegate); |
+ |
+ scoped_refptr<SocketStream> socket_stream( |
+ new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
+ |
+ socket_stream->set_context(&context); |
+ |
+ socket_stream->Connect(); |
+ |
+ test_callback.WaitForResult(); |
+ |
+ const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
+ ASSERT_EQ(2U, events.size()); |
+ |
+ EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type); |
+ EXPECT_EQ(net::ERR_ACCESS_DENIED, events[0].error_code); |
+ EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type); |
+} |
+ |
} // namespace net |