| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "remoting/protocol/fake_stream_socket.h" | 5 #include "remoting/protocol/fake_stream_socket.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 next_write_error_(net::OK), | 24 next_write_error_(net::OK), |
| 25 next_read_error_(net::OK), | 25 next_read_error_(net::OK), |
| 26 read_buffer_size_(0), | 26 read_buffer_size_(0), |
| 27 input_pos_(0), | 27 input_pos_(0), |
| 28 task_runner_(base::ThreadTaskRunnerHandle::Get()), | 28 task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| 29 weak_factory_(this) { | 29 weak_factory_(this) { |
| 30 } | 30 } |
| 31 | 31 |
| 32 FakeStreamSocket::~FakeStreamSocket() { | 32 FakeStreamSocket::~FakeStreamSocket() { |
| 33 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | 33 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
| 34 if (peer_socket_) { |
| 35 task_runner_->PostTask( |
| 36 FROM_HERE, base::Bind(&FakeStreamSocket::AppendReadError, peer_socket_, |
| 37 net::ERR_CONNECTION_CLOSED)); |
| 38 } |
| 34 } | 39 } |
| 35 | 40 |
| 36 void FakeStreamSocket::AppendInputData(const std::string& data) { | 41 void FakeStreamSocket::AppendInputData(const std::string& data) { |
| 37 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | 42 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
| 38 input_data_.insert(input_data_.end(), data.begin(), data.end()); | 43 input_data_.insert(input_data_.end(), data.begin(), data.end()); |
| 39 // Complete pending read if any. | 44 // Complete pending read if any. |
| 40 if (!read_callback_.is_null()) { | 45 if (!read_callback_.is_null()) { |
| 41 int result = std::min(read_buffer_size_, | 46 int result = std::min(read_buffer_size_, |
| 42 static_cast<int>(input_data_.size() - input_pos_)); | 47 static_cast<int>(input_data_.size() - input_pos_)); |
| 43 EXPECT_GT(result, 0); | 48 EXPECT_GT(result, 0); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 63 void FakeStreamSocket::PairWith(FakeStreamSocket* peer_socket) { | 68 void FakeStreamSocket::PairWith(FakeStreamSocket* peer_socket) { |
| 64 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | 69 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
| 65 peer_socket_ = peer_socket->GetWeakPtr(); | 70 peer_socket_ = peer_socket->GetWeakPtr(); |
| 66 peer_socket->peer_socket_ = GetWeakPtr(); | 71 peer_socket->peer_socket_ = GetWeakPtr(); |
| 67 } | 72 } |
| 68 | 73 |
| 69 base::WeakPtr<FakeStreamSocket> FakeStreamSocket::GetWeakPtr() { | 74 base::WeakPtr<FakeStreamSocket> FakeStreamSocket::GetWeakPtr() { |
| 70 return weak_factory_.GetWeakPtr(); | 75 return weak_factory_.GetWeakPtr(); |
| 71 } | 76 } |
| 72 | 77 |
| 73 int FakeStreamSocket::Read(net::IOBuffer* buf, int buf_len, | 78 int FakeStreamSocket::Read(const scoped_refptr<net::IOBuffer>& buf, |
| 79 int buf_len, |
| 74 const net::CompletionCallback& callback) { | 80 const net::CompletionCallback& callback) { |
| 75 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | 81 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
| 76 | 82 |
| 77 if (input_pos_ < static_cast<int>(input_data_.size())) { | 83 if (input_pos_ < static_cast<int>(input_data_.size())) { |
| 78 int result = std::min(buf_len, | 84 int result = std::min(buf_len, |
| 79 static_cast<int>(input_data_.size()) - input_pos_); | 85 static_cast<int>(input_data_.size()) - input_pos_); |
| 80 memcpy(buf->data(), &(*input_data_.begin()) + input_pos_, result); | 86 memcpy(buf->data(), &(*input_data_.begin()) + input_pos_, result); |
| 81 input_pos_ += result; | 87 input_pos_ += result; |
| 82 return result; | 88 return result; |
| 83 } else if (next_read_error_ != net::OK) { | 89 } else if (next_read_error_ != net::OK) { |
| 84 int r = next_read_error_; | 90 int r = next_read_error_; |
| 85 next_read_error_ = net::OK; | 91 next_read_error_ = net::OK; |
| 86 return r; | 92 return r; |
| 87 } else { | 93 } else { |
| 88 read_buffer_ = buf; | 94 read_buffer_ = buf; |
| 89 read_buffer_size_ = buf_len; | 95 read_buffer_size_ = buf_len; |
| 90 read_callback_ = callback; | 96 read_callback_ = callback; |
| 91 return net::ERR_IO_PENDING; | 97 return net::ERR_IO_PENDING; |
| 92 } | 98 } |
| 93 } | 99 } |
| 94 | 100 |
| 95 int FakeStreamSocket::Write(net::IOBuffer* buf, int buf_len, | 101 int FakeStreamSocket::Write(const scoped_refptr<net::IOBuffer>& buf, |
| 96 const net::CompletionCallback& callback) { | 102 int buf_len, |
| 103 const net::CompletionCallback& callback) { |
| 97 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | 104 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
| 98 EXPECT_FALSE(write_pending_); | 105 EXPECT_FALSE(write_pending_); |
| 99 | 106 |
| 100 if (write_limit_ > 0) | 107 if (write_limit_ > 0) |
| 101 buf_len = std::min(write_limit_, buf_len); | 108 buf_len = std::min(write_limit_, buf_len); |
| 102 | 109 |
| 103 if (async_write_) { | 110 if (async_write_) { |
| 104 task_runner_->PostTask(FROM_HERE, base::Bind( | 111 task_runner_->PostTask(FROM_HERE, base::Bind( |
| 105 &FakeStreamSocket::DoAsyncWrite, weak_factory_.GetWeakPtr(), | 112 &FakeStreamSocket::DoAsyncWrite, weak_factory_.GetWeakPtr(), |
| 106 scoped_refptr<net::IOBuffer>(buf), buf_len, callback)); | 113 scoped_refptr<net::IOBuffer>(buf), buf_len, callback)); |
| 107 write_pending_ = true; | 114 write_pending_ = true; |
| 108 return net::ERR_IO_PENDING; | 115 return net::ERR_IO_PENDING; |
| 109 } else { | 116 } else { |
| 110 if (next_write_error_ != net::OK) { | 117 if (next_write_error_ != net::OK) { |
| 111 int r = next_write_error_; | 118 int r = next_write_error_; |
| 112 next_write_error_ = net::OK; | 119 next_write_error_ = net::OK; |
| 113 return r; | 120 return r; |
| 114 } | 121 } |
| 115 | 122 |
| 116 DoWrite(buf, buf_len); | 123 DoWrite(buf, buf_len); |
| 117 return buf_len; | 124 return buf_len; |
| 118 } | 125 } |
| 119 } | 126 } |
| 120 | 127 |
| 121 void FakeStreamSocket::DoAsyncWrite(scoped_refptr<net::IOBuffer> buf, | 128 void FakeStreamSocket::DoAsyncWrite(const scoped_refptr<net::IOBuffer>& buf, |
| 122 int buf_len, | 129 int buf_len, |
| 123 const net::CompletionCallback& callback) { | 130 const net::CompletionCallback& callback) { |
| 124 write_pending_ = false; | 131 write_pending_ = false; |
| 125 | 132 |
| 126 if (next_write_error_ != net::OK) { | 133 if (next_write_error_ != net::OK) { |
| 127 int r = next_write_error_; | 134 int r = next_write_error_; |
| 128 next_write_error_ = net::OK; | 135 next_write_error_ = net::OK; |
| 129 callback.Run(r); | 136 callback.Run(r); |
| 130 return; | 137 return; |
| 131 } | 138 } |
| 132 | 139 |
| 133 DoWrite(buf.get(), buf_len); | 140 DoWrite(buf.get(), buf_len); |
| 134 callback.Run(buf_len); | 141 callback.Run(buf_len); |
| 135 } | 142 } |
| 136 | 143 |
| 137 void FakeStreamSocket::DoWrite(net::IOBuffer* buf, int buf_len) { | 144 void FakeStreamSocket::DoWrite(const scoped_refptr<net::IOBuffer>& buf, |
| 145 int buf_len) { |
| 138 written_data_.insert(written_data_.end(), | 146 written_data_.insert(written_data_.end(), |
| 139 buf->data(), buf->data() + buf_len); | 147 buf->data(), buf->data() + buf_len); |
| 140 | 148 |
| 141 if (peer_socket_.get()) { | 149 if (peer_socket_) { |
| 142 task_runner_->PostTask( | 150 task_runner_->PostTask( |
| 143 FROM_HERE, | 151 FROM_HERE, |
| 144 base::Bind(&FakeStreamSocket::AppendInputData, | 152 base::Bind(&FakeStreamSocket::AppendInputData, |
| 145 peer_socket_, | 153 peer_socket_, |
| 146 std::string(buf->data(), buf->data() + buf_len))); | 154 std::string(buf->data(), buf->data() + buf_len))); |
| 147 } | 155 } |
| 148 } | 156 } |
| 149 | 157 |
| 150 int FakeStreamSocket::SetReceiveBufferSize(int32 size) { | |
| 151 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 152 NOTIMPLEMENTED(); | |
| 153 return net::ERR_NOT_IMPLEMENTED; | |
| 154 } | |
| 155 | |
| 156 int FakeStreamSocket::SetSendBufferSize(int32 size) { | |
| 157 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 158 NOTIMPLEMENTED(); | |
| 159 return net::ERR_NOT_IMPLEMENTED; | |
| 160 } | |
| 161 | |
| 162 int FakeStreamSocket::Connect(const net::CompletionCallback& callback) { | |
| 163 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 164 return net::OK; | |
| 165 } | |
| 166 | |
| 167 void FakeStreamSocket::Disconnect() { | |
| 168 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 169 | |
| 170 if (peer_socket_.get()) { | |
| 171 task_runner_->PostTask( | |
| 172 FROM_HERE, | |
| 173 base::Bind(&FakeStreamSocket::AppendReadError, | |
| 174 peer_socket_, | |
| 175 net::ERR_CONNECTION_CLOSED)); | |
| 176 } | |
| 177 peer_socket_.reset(); | |
| 178 } | |
| 179 | |
| 180 bool FakeStreamSocket::IsConnected() const { | |
| 181 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 182 return true; | |
| 183 } | |
| 184 | |
| 185 bool FakeStreamSocket::IsConnectedAndIdle() const { | |
| 186 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 187 NOTIMPLEMENTED(); | |
| 188 return false; | |
| 189 } | |
| 190 | |
| 191 int FakeStreamSocket::GetPeerAddress(net::IPEndPoint* address) const { | |
| 192 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 193 net::IPAddressNumber ip(net::kIPv4AddressSize); | |
| 194 *address = net::IPEndPoint(ip, 0); | |
| 195 return net::OK; | |
| 196 } | |
| 197 | |
| 198 int FakeStreamSocket::GetLocalAddress(net::IPEndPoint* address) const { | |
| 199 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 200 NOTIMPLEMENTED(); | |
| 201 return net::ERR_NOT_IMPLEMENTED; | |
| 202 } | |
| 203 | |
| 204 const net::BoundNetLog& FakeStreamSocket::NetLog() const { | |
| 205 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 206 return net_log_; | |
| 207 } | |
| 208 | |
| 209 void FakeStreamSocket::SetSubresourceSpeculation() { | |
| 210 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 211 NOTIMPLEMENTED(); | |
| 212 } | |
| 213 | |
| 214 void FakeStreamSocket::SetOmniboxSpeculation() { | |
| 215 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 216 NOTIMPLEMENTED(); | |
| 217 } | |
| 218 | |
| 219 bool FakeStreamSocket::WasEverUsed() const { | |
| 220 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 221 NOTIMPLEMENTED(); | |
| 222 return true; | |
| 223 } | |
| 224 | |
| 225 bool FakeStreamSocket::UsingTCPFastOpen() const { | |
| 226 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 227 NOTIMPLEMENTED(); | |
| 228 return true; | |
| 229 } | |
| 230 | |
| 231 bool FakeStreamSocket::WasNpnNegotiated() const { | |
| 232 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 233 return false; | |
| 234 } | |
| 235 | |
| 236 net::NextProto FakeStreamSocket::GetNegotiatedProtocol() const { | |
| 237 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 238 NOTIMPLEMENTED(); | |
| 239 return net::kProtoUnknown; | |
| 240 } | |
| 241 | |
| 242 bool FakeStreamSocket::GetSSLInfo(net::SSLInfo* ssl_info) { | |
| 243 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 244 return false; | |
| 245 } | |
| 246 | |
| 247 void FakeStreamSocket::GetConnectionAttempts( | |
| 248 net::ConnectionAttempts* out) const { | |
| 249 EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); | |
| 250 out->clear(); | |
| 251 } | |
| 252 | |
| 253 FakeStreamChannelFactory::FakeStreamChannelFactory() | 158 FakeStreamChannelFactory::FakeStreamChannelFactory() |
| 254 : task_runner_(base::ThreadTaskRunnerHandle::Get()), | 159 : task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| 255 asynchronous_create_(false), | 160 asynchronous_create_(false), |
| 256 fail_create_(false), | 161 fail_create_(false), |
| 257 weak_factory_(this) { | 162 weak_factory_(this) { |
| 258 } | 163 } |
| 259 | 164 |
| 260 FakeStreamChannelFactory::~FakeStreamChannelFactory() {} | 165 FakeStreamChannelFactory::~FakeStreamChannelFactory() {} |
| 261 | 166 |
| 262 FakeStreamSocket* FakeStreamChannelFactory::GetFakeChannel( | 167 FakeStreamSocket* FakeStreamChannelFactory::GetFakeChannel( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 289 if (channels_.find(name) != channels_.end()) | 194 if (channels_.find(name) != channels_.end()) |
| 290 callback.Run(owned_channel.Pass()); | 195 callback.Run(owned_channel.Pass()); |
| 291 } | 196 } |
| 292 | 197 |
| 293 void FakeStreamChannelFactory::CancelChannelCreation(const std::string& name) { | 198 void FakeStreamChannelFactory::CancelChannelCreation(const std::string& name) { |
| 294 channels_.erase(name); | 199 channels_.erase(name); |
| 295 } | 200 } |
| 296 | 201 |
| 297 } // namespace protocol | 202 } // namespace protocol |
| 298 } // namespace remoting | 203 } // namespace remoting |
| OLD | NEW |