OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/socket_stream/socket_stream.h" | 5 #include "net/socket_stream/socket_stream.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 int error_code; | 52 int error_code; |
53 }; | 53 }; |
54 | 54 |
55 class SocketStreamEventRecorder : public SocketStream::Delegate { | 55 class SocketStreamEventRecorder : public SocketStream::Delegate { |
56 public: | 56 public: |
57 // |callback| will be run when the OnClose() or OnError() method is called. | 57 // |callback| will be run when the OnClose() or OnError() method is called. |
58 // For OnClose(), |callback| is called with OK. For OnError(), it's called | 58 // For OnClose(), |callback| is called with OK. For OnError(), it's called |
59 // with the error code. | 59 // with the error code. |
60 explicit SocketStreamEventRecorder(const CompletionCallback& callback) | 60 explicit SocketStreamEventRecorder(const CompletionCallback& callback) |
61 : callback_(callback) {} | 61 : callback_(callback) {} |
62 virtual ~SocketStreamEventRecorder() {} | 62 ~SocketStreamEventRecorder() override {} |
63 | 63 |
64 void SetOnStartOpenConnection( | 64 void SetOnStartOpenConnection( |
65 const base::Callback<int(SocketStreamEvent*)>& callback) { | 65 const base::Callback<int(SocketStreamEvent*)>& callback) { |
66 on_start_open_connection_ = callback; | 66 on_start_open_connection_ = callback; |
67 } | 67 } |
68 void SetOnConnected( | 68 void SetOnConnected( |
69 const base::Callback<void(SocketStreamEvent*)>& callback) { | 69 const base::Callback<void(SocketStreamEvent*)>& callback) { |
70 on_connected_ = callback; | 70 on_connected_ = callback; |
71 } | 71 } |
72 void SetOnSentData( | 72 void SetOnSentData( |
73 const base::Callback<void(SocketStreamEvent*)>& callback) { | 73 const base::Callback<void(SocketStreamEvent*)>& callback) { |
74 on_sent_data_ = callback; | 74 on_sent_data_ = callback; |
75 } | 75 } |
76 void SetOnReceivedData( | 76 void SetOnReceivedData( |
77 const base::Callback<void(SocketStreamEvent*)>& callback) { | 77 const base::Callback<void(SocketStreamEvent*)>& callback) { |
78 on_received_data_ = callback; | 78 on_received_data_ = callback; |
79 } | 79 } |
80 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) { | 80 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) { |
81 on_close_ = callback; | 81 on_close_ = callback; |
82 } | 82 } |
83 void SetOnAuthRequired( | 83 void SetOnAuthRequired( |
84 const base::Callback<void(SocketStreamEvent*)>& callback) { | 84 const base::Callback<void(SocketStreamEvent*)>& callback) { |
85 on_auth_required_ = callback; | 85 on_auth_required_ = callback; |
86 } | 86 } |
87 void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) { | 87 void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) { |
88 on_error_ = callback; | 88 on_error_ = callback; |
89 } | 89 } |
90 | 90 |
91 virtual int OnStartOpenConnection( | 91 int OnStartOpenConnection(SocketStream* socket, |
92 SocketStream* socket, | 92 const CompletionCallback& callback) override { |
93 const CompletionCallback& callback) override { | |
94 connection_callback_ = callback; | 93 connection_callback_ = callback; |
95 events_.push_back( | 94 events_.push_back( |
96 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 95 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
97 socket, 0, std::string(), NULL, OK)); | 96 socket, 0, std::string(), NULL, OK)); |
98 if (!on_start_open_connection_.is_null()) | 97 if (!on_start_open_connection_.is_null()) |
99 return on_start_open_connection_.Run(&events_.back()); | 98 return on_start_open_connection_.Run(&events_.back()); |
100 return OK; | 99 return OK; |
101 } | 100 } |
102 virtual void OnConnected(SocketStream* socket, | 101 void OnConnected(SocketStream* socket, |
103 int num_pending_send_allowed) override { | 102 int num_pending_send_allowed) override { |
104 events_.push_back( | 103 events_.push_back( |
105 SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED, | 104 SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED, |
106 socket, num_pending_send_allowed, std::string(), | 105 socket, num_pending_send_allowed, std::string(), |
107 NULL, OK)); | 106 NULL, OK)); |
108 if (!on_connected_.is_null()) | 107 if (!on_connected_.is_null()) |
109 on_connected_.Run(&events_.back()); | 108 on_connected_.Run(&events_.back()); |
110 } | 109 } |
111 virtual void OnSentData(SocketStream* socket, | 110 void OnSentData(SocketStream* socket, int amount_sent) override { |
112 int amount_sent) override { | |
113 events_.push_back( | 111 events_.push_back( |
114 SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, socket, | 112 SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, socket, |
115 amount_sent, std::string(), NULL, OK)); | 113 amount_sent, std::string(), NULL, OK)); |
116 if (!on_sent_data_.is_null()) | 114 if (!on_sent_data_.is_null()) |
117 on_sent_data_.Run(&events_.back()); | 115 on_sent_data_.Run(&events_.back()); |
118 } | 116 } |
119 virtual void OnReceivedData(SocketStream* socket, | 117 void OnReceivedData(SocketStream* socket, |
120 const char* data, int len) override { | 118 const char* data, |
| 119 int len) override { |
121 events_.push_back( | 120 events_.push_back( |
122 SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, socket, len, | 121 SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, socket, len, |
123 std::string(data, len), NULL, OK)); | 122 std::string(data, len), NULL, OK)); |
124 if (!on_received_data_.is_null()) | 123 if (!on_received_data_.is_null()) |
125 on_received_data_.Run(&events_.back()); | 124 on_received_data_.Run(&events_.back()); |
126 } | 125 } |
127 virtual void OnClose(SocketStream* socket) override { | 126 void OnClose(SocketStream* socket) override { |
128 events_.push_back( | 127 events_.push_back( |
129 SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, socket, 0, | 128 SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, socket, 0, |
130 std::string(), NULL, OK)); | 129 std::string(), NULL, OK)); |
131 if (!on_close_.is_null()) | 130 if (!on_close_.is_null()) |
132 on_close_.Run(&events_.back()); | 131 on_close_.Run(&events_.back()); |
133 if (!callback_.is_null()) | 132 if (!callback_.is_null()) |
134 callback_.Run(OK); | 133 callback_.Run(OK); |
135 } | 134 } |
136 virtual void OnAuthRequired(SocketStream* socket, | 135 void OnAuthRequired(SocketStream* socket, |
137 AuthChallengeInfo* auth_info) override { | 136 AuthChallengeInfo* auth_info) override { |
138 events_.push_back( | 137 events_.push_back( |
139 SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, socket, 0, | 138 SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, socket, 0, |
140 std::string(), auth_info, OK)); | 139 std::string(), auth_info, OK)); |
141 if (!on_auth_required_.is_null()) | 140 if (!on_auth_required_.is_null()) |
142 on_auth_required_.Run(&events_.back()); | 141 on_auth_required_.Run(&events_.back()); |
143 } | 142 } |
144 virtual void OnError(const SocketStream* socket, int error) override { | 143 void OnError(const SocketStream* socket, int error) override { |
145 events_.push_back( | 144 events_.push_back( |
146 SocketStreamEvent(SocketStreamEvent::EVENT_ERROR, NULL, 0, | 145 SocketStreamEvent(SocketStreamEvent::EVENT_ERROR, NULL, 0, |
147 std::string(), NULL, error)); | 146 std::string(), NULL, error)); |
148 if (!on_error_.is_null()) | 147 if (!on_error_.is_null()) |
149 on_error_.Run(&events_.back()); | 148 on_error_.Run(&events_.back()); |
150 if (!callback_.is_null()) | 149 if (!callback_.is_null()) |
151 callback_.Run(error); | 150 callback_.Run(error); |
152 } | 151 } |
153 | 152 |
154 void DoClose(SocketStreamEvent* event) { | 153 void DoClose(SocketStreamEvent* event) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 DISALLOW_COPY_AND_ASSIGN(SocketStreamEventRecorder); | 187 DISALLOW_COPY_AND_ASSIGN(SocketStreamEventRecorder); |
189 }; | 188 }; |
190 | 189 |
191 // This is used for the test OnErrorDetachDelegate. | 190 // This is used for the test OnErrorDetachDelegate. |
192 class SelfDeletingDelegate : public SocketStream::Delegate { | 191 class SelfDeletingDelegate : public SocketStream::Delegate { |
193 public: | 192 public: |
194 // |callback| must cause the test message loop to exit when called. | 193 // |callback| must cause the test message loop to exit when called. |
195 explicit SelfDeletingDelegate(const CompletionCallback& callback) | 194 explicit SelfDeletingDelegate(const CompletionCallback& callback) |
196 : socket_stream_(), callback_(callback) {} | 195 : socket_stream_(), callback_(callback) {} |
197 | 196 |
198 virtual ~SelfDeletingDelegate() {} | 197 ~SelfDeletingDelegate() override {} |
199 | 198 |
200 // Call DetachDelegate(), delete |this|, then run the callback. | 199 // Call DetachDelegate(), delete |this|, then run the callback. |
201 virtual void OnError(const SocketStream* socket, int error) override { | 200 void OnError(const SocketStream* socket, int error) override { |
202 // callback_ will be deleted when we delete |this|, so copy it to call it | 201 // callback_ will be deleted when we delete |this|, so copy it to call it |
203 // afterwards. | 202 // afterwards. |
204 CompletionCallback callback = callback_; | 203 CompletionCallback callback = callback_; |
205 socket_stream_->DetachDelegate(); | 204 socket_stream_->DetachDelegate(); |
206 delete this; | 205 delete this; |
207 callback.Run(OK); | 206 callback.Run(OK); |
208 } | 207 } |
209 | 208 |
210 // This can't be passed in the constructor because this object needs to be | 209 // This can't be passed in the constructor because this object needs to be |
211 // created before SocketStream. | 210 // created before SocketStream. |
212 void set_socket_stream(const scoped_refptr<SocketStream>& socket_stream) { | 211 void set_socket_stream(const scoped_refptr<SocketStream>& socket_stream) { |
213 socket_stream_ = socket_stream; | 212 socket_stream_ = socket_stream; |
214 EXPECT_EQ(socket_stream_->delegate(), this); | 213 EXPECT_EQ(socket_stream_->delegate(), this); |
215 } | 214 } |
216 | 215 |
217 virtual void OnConnected(SocketStream* socket, int max_pending_send_allowed) | 216 void OnConnected(SocketStream* socket, |
218 override { | 217 int max_pending_send_allowed) override { |
219 ADD_FAILURE() << "OnConnected() should not be called"; | 218 ADD_FAILURE() << "OnConnected() should not be called"; |
220 } | 219 } |
221 virtual void OnSentData(SocketStream* socket, int amount_sent) override { | 220 void OnSentData(SocketStream* socket, int amount_sent) override { |
222 ADD_FAILURE() << "OnSentData() should not be called"; | 221 ADD_FAILURE() << "OnSentData() should not be called"; |
223 } | 222 } |
224 virtual void OnReceivedData(SocketStream* socket, const char* data, int len) | 223 void OnReceivedData(SocketStream* socket, |
225 override { | 224 const char* data, |
| 225 int len) override { |
226 ADD_FAILURE() << "OnReceivedData() should not be called"; | 226 ADD_FAILURE() << "OnReceivedData() should not be called"; |
227 } | 227 } |
228 virtual void OnClose(SocketStream* socket) override { | 228 void OnClose(SocketStream* socket) override { |
229 ADD_FAILURE() << "OnClose() should not be called"; | 229 ADD_FAILURE() << "OnClose() should not be called"; |
230 } | 230 } |
231 | 231 |
232 private: | 232 private: |
233 scoped_refptr<SocketStream> socket_stream_; | 233 scoped_refptr<SocketStream> socket_stream_; |
234 const CompletionCallback callback_; | 234 const CompletionCallback callback_; |
235 | 235 |
236 DISALLOW_COPY_AND_ASSIGN(SelfDeletingDelegate); | 236 DISALLOW_COPY_AND_ASSIGN(SelfDeletingDelegate); |
237 }; | 237 }; |
238 | 238 |
239 class TestURLRequestContextWithProxy : public TestURLRequestContext { | 239 class TestURLRequestContextWithProxy : public TestURLRequestContext { |
240 public: | 240 public: |
241 explicit TestURLRequestContextWithProxy(const std::string& proxy) | 241 explicit TestURLRequestContextWithProxy(const std::string& proxy) |
242 : TestURLRequestContext(true) { | 242 : TestURLRequestContext(true) { |
243 context_storage_.set_proxy_service(ProxyService::CreateFixed(proxy)); | 243 context_storage_.set_proxy_service(ProxyService::CreateFixed(proxy)); |
244 Init(); | 244 Init(); |
245 } | 245 } |
246 virtual ~TestURLRequestContextWithProxy() {} | 246 ~TestURLRequestContextWithProxy() override {} |
247 }; | 247 }; |
248 | 248 |
249 class TestSocketStreamNetworkDelegate : public TestNetworkDelegate { | 249 class TestSocketStreamNetworkDelegate : public TestNetworkDelegate { |
250 public: | 250 public: |
251 TestSocketStreamNetworkDelegate() | 251 TestSocketStreamNetworkDelegate() |
252 : before_connect_result_(OK) {} | 252 : before_connect_result_(OK) {} |
253 virtual ~TestSocketStreamNetworkDelegate() {} | 253 ~TestSocketStreamNetworkDelegate() override {} |
254 | 254 |
255 virtual int OnBeforeSocketStreamConnect( | 255 int OnBeforeSocketStreamConnect(SocketStream* stream, |
256 SocketStream* stream, | 256 const CompletionCallback& callback) override { |
257 const CompletionCallback& callback) override { | |
258 return before_connect_result_; | 257 return before_connect_result_; |
259 } | 258 } |
260 | 259 |
261 void SetBeforeConnectResult(int result) { | 260 void SetBeforeConnectResult(int result) { |
262 before_connect_result_ = result; | 261 before_connect_result_ = result; |
263 } | 262 } |
264 | 263 |
265 private: | 264 private: |
266 int before_connect_result_; | 265 int before_connect_result_; |
267 }; | 266 }; |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 | 1034 |
1036 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 1035 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
1037 events[0].event_type); | 1036 events[0].event_type); |
1038 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); | 1037 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); |
1039 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); | 1038 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); |
1040 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); | 1039 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); |
1041 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); | 1040 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); |
1042 } | 1041 } |
1043 | 1042 |
1044 } // namespace net | 1043 } // namespace net |
OLD | NEW |