| 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 |