| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/renderer/p2p/p2p_transport_impl.h" | 5 #include "content/renderer/p2p/p2p_transport_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 class UdpChannelTester : public base::RefCountedThreadSafe<UdpChannelTester> { | 45 class UdpChannelTester : public base::RefCountedThreadSafe<UdpChannelTester> { |
| 46 public: | 46 public: |
| 47 UdpChannelTester(MessageLoop* message_loop, | 47 UdpChannelTester(MessageLoop* message_loop, |
| 48 net::Socket* write_socket, | 48 net::Socket* write_socket, |
| 49 net::Socket* read_socket) | 49 net::Socket* read_socket) |
| 50 : message_loop_(message_loop), | 50 : message_loop_(message_loop), |
| 51 write_socket_(write_socket), | 51 write_socket_(write_socket), |
| 52 read_socket_(read_socket), | 52 read_socket_(read_socket), |
| 53 done_(false), | 53 done_(false), |
| 54 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 55 write_cb_(this, &UdpChannelTester::OnWritten)), | |
| 56 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 57 read_cb_(this, &UdpChannelTester::OnRead)), | |
| 58 write_errors_(0), | 54 write_errors_(0), |
| 59 read_errors_(0), | 55 read_errors_(0), |
| 60 packets_sent_(0), | 56 packets_sent_(0), |
| 61 packets_received_(0), | 57 packets_received_(0), |
| 62 broken_packets_(0) { | 58 broken_packets_(0) { |
| 63 } | 59 } |
| 64 | 60 |
| 65 virtual ~UdpChannelTester() { } | 61 virtual ~UdpChannelTester() { } |
| 66 | 62 |
| 67 void Start() { | 63 void Start() { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 97 Done(); | 93 Done(); |
| 98 return; | 94 return; |
| 99 } | 95 } |
| 100 | 96 |
| 101 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(kMessageSize)); | 97 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(kMessageSize)); |
| 102 memset(packet->data(), 123, kMessageSize); | 98 memset(packet->data(), 123, kMessageSize); |
| 103 sent_packets_[packets_sent_] = packet; | 99 sent_packets_[packets_sent_] = packet; |
| 104 // Put index of this packet in the beginning of the packet body. | 100 // Put index of this packet in the beginning of the packet body. |
| 105 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); | 101 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); |
| 106 | 102 |
| 107 int result = write_socket_->Write(packet, kMessageSize, &write_cb_); | 103 int result = write_socket_->Write(packet, kMessageSize, |
| 104 base::Bind(&UdpChannelTester::OnWritten, |
| 105 base::Unretained(this))); |
| 108 HandleWriteResult(result); | 106 HandleWriteResult(result); |
| 109 } | 107 } |
| 110 | 108 |
| 111 void OnWritten(int result) { | 109 void OnWritten(int result) { |
| 112 HandleWriteResult(result); | 110 HandleWriteResult(result); |
| 113 } | 111 } |
| 114 | 112 |
| 115 void HandleWriteResult(int result) { | 113 void HandleWriteResult(int result) { |
| 116 if (result <= 0 && result != net::ERR_IO_PENDING) { | 114 if (result <= 0 && result != net::ERR_IO_PENDING) { |
| 117 LOG(ERROR) << "Received error " << result << " when trying to write"; | 115 LOG(ERROR) << "Received error " << result << " when trying to write"; |
| 118 write_errors_++; | 116 write_errors_++; |
| 119 Done(); | 117 Done(); |
| 120 } else if (result > 0) { | 118 } else if (result > 0) { |
| 121 EXPECT_EQ(kMessageSize, result); | 119 EXPECT_EQ(kMessageSize, result); |
| 122 packets_sent_++; | 120 packets_sent_++; |
| 123 message_loop_->PostDelayedTask( | 121 message_loop_->PostDelayedTask( |
| 124 FROM_HERE, base::Bind(&UdpChannelTester::DoWrite, this), | 122 FROM_HERE, base::Bind(&UdpChannelTester::DoWrite, this), |
| 125 kUdpWriteDelayMs); | 123 kUdpWriteDelayMs); |
| 126 } | 124 } |
| 127 } | 125 } |
| 128 | 126 |
| 129 void DoRead() { | 127 void DoRead() { |
| 130 int result = 1; | 128 int result = 1; |
| 131 while (result > 0) { | 129 while (result > 0) { |
| 132 int kReadSize = kMessageSize * 2; | 130 int kReadSize = kMessageSize * 2; |
| 133 read_buffer_ = new net::IOBuffer(kReadSize); | 131 read_buffer_ = new net::IOBuffer(kReadSize); |
| 134 | 132 |
| 135 result = read_socket_->Read(read_buffer_, kReadSize, &read_cb_); | 133 result = read_socket_->Read(read_buffer_, kReadSize, |
| 134 base::Bind(&UdpChannelTester::OnRead, |
| 135 base::Unretained(this))); |
| 136 HandleReadResult(result); | 136 HandleReadResult(result); |
| 137 }; | 137 }; |
| 138 } | 138 } |
| 139 | 139 |
| 140 void OnRead(int result) { | 140 void OnRead(int result) { |
| 141 HandleReadResult(result); | 141 HandleReadResult(result); |
| 142 DoRead(); | 142 DoRead(); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void HandleReadResult(int result) { | 145 void HandleReadResult(int result) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 172 | 172 |
| 173 private: | 173 private: |
| 174 MessageLoop* message_loop_; | 174 MessageLoop* message_loop_; |
| 175 net::Socket* write_socket_; | 175 net::Socket* write_socket_; |
| 176 net::Socket* read_socket_; | 176 net::Socket* read_socket_; |
| 177 bool done_; | 177 bool done_; |
| 178 | 178 |
| 179 scoped_refptr<net::IOBuffer> sent_packets_[kMessages]; | 179 scoped_refptr<net::IOBuffer> sent_packets_[kMessages]; |
| 180 scoped_refptr<net::IOBuffer> read_buffer_; | 180 scoped_refptr<net::IOBuffer> read_buffer_; |
| 181 | 181 |
| 182 net::OldCompletionCallbackImpl<UdpChannelTester> write_cb_; | |
| 183 net::OldCompletionCallbackImpl<UdpChannelTester> read_cb_; | |
| 184 int write_errors_; | 182 int write_errors_; |
| 185 int read_errors_; | 183 int read_errors_; |
| 186 int packets_sent_; | 184 int packets_sent_; |
| 187 int packets_received_; | 185 int packets_received_; |
| 188 int broken_packets_; | 186 int broken_packets_; |
| 189 }; | 187 }; |
| 190 | 188 |
| 191 class TcpChannelTester : public base::RefCountedThreadSafe<TcpChannelTester> { | 189 class TcpChannelTester : public base::RefCountedThreadSafe<TcpChannelTester> { |
| 192 public: | 190 public: |
| 193 TcpChannelTester(MessageLoop* message_loop, | 191 TcpChannelTester(MessageLoop* message_loop, |
| 194 net::Socket* write_socket, | 192 net::Socket* write_socket, |
| 195 net::Socket* read_socket) | 193 net::Socket* read_socket) |
| 196 : message_loop_(message_loop), | 194 : message_loop_(message_loop), |
| 197 write_socket_(write_socket), | 195 write_socket_(write_socket), |
| 198 read_socket_(read_socket), | 196 read_socket_(read_socket), |
| 199 done_(false), | 197 done_(false), |
| 200 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 201 write_cb_(this, &TcpChannelTester::OnWritten)), | |
| 202 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 203 read_cb_(this, &TcpChannelTester::OnRead)), | |
| 204 write_errors_(0), | 198 write_errors_(0), |
| 205 read_errors_(0) { | 199 read_errors_(0) { |
| 206 } | 200 } |
| 207 | 201 |
| 208 virtual ~TcpChannelTester() { } | 202 virtual ~TcpChannelTester() { } |
| 209 | 203 |
| 210 void Init() { | 204 void Init() { |
| 211 // Initialize |send_buffer_|. | 205 // Initialize |send_buffer_|. |
| 212 send_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(kTcpDataSize), | 206 send_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(kTcpDataSize), |
| 213 kTcpDataSize); | 207 kTcpDataSize); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 243 done_ = true; | 237 done_ = true; |
| 244 message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 238 message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 245 } | 239 } |
| 246 | 240 |
| 247 void DoWrite() { | 241 void DoWrite() { |
| 248 if (send_buffer_->BytesRemaining() == 0) { | 242 if (send_buffer_->BytesRemaining() == 0) { |
| 249 return; | 243 return; |
| 250 } | 244 } |
| 251 | 245 |
| 252 int result = write_socket_->Write( | 246 int result = write_socket_->Write( |
| 253 send_buffer_, send_buffer_->BytesRemaining(), &write_cb_); | 247 send_buffer_, send_buffer_->BytesRemaining(), |
| 248 base::Bind(&TcpChannelTester::OnWritten, base::Unretained(this))); |
| 254 HandleWriteResult(result); | 249 HandleWriteResult(result); |
| 255 } | 250 } |
| 256 | 251 |
| 257 void OnWritten(int result) { | 252 void OnWritten(int result) { |
| 258 HandleWriteResult(result); | 253 HandleWriteResult(result); |
| 259 } | 254 } |
| 260 | 255 |
| 261 void HandleWriteResult(int result) { | 256 void HandleWriteResult(int result) { |
| 262 if (result <= 0 && result != net::ERR_IO_PENDING) { | 257 if (result <= 0 && result != net::ERR_IO_PENDING) { |
| 263 LOG(ERROR) << "Received error " << result << " when trying to write"; | 258 LOG(ERROR) << "Received error " << result << " when trying to write"; |
| 264 write_errors_++; | 259 write_errors_++; |
| 265 Done(); | 260 Done(); |
| 266 } else if (result > 0) { | 261 } else if (result > 0) { |
| 267 send_buffer_->DidConsume(result); | 262 send_buffer_->DidConsume(result); |
| 268 message_loop_->PostDelayedTask( | 263 message_loop_->PostDelayedTask( |
| 269 FROM_HERE, base::Bind(&TcpChannelTester::DoWrite, this), | 264 FROM_HERE, base::Bind(&TcpChannelTester::DoWrite, this), |
| 270 kTcpWriteDelayMs); | 265 kTcpWriteDelayMs); |
| 271 } | 266 } |
| 272 } | 267 } |
| 273 | 268 |
| 274 void DoRead() { | 269 void DoRead() { |
| 275 int result = 1; | 270 int result = 1; |
| 276 while (result > 0) { | 271 while (result > 0) { |
| 277 int kReadSize = kMessageSize * 2; | 272 int kReadSize = kMessageSize * 2; |
| 278 read_buffer_ = new net::IOBuffer(kReadSize); | 273 read_buffer_ = new net::IOBuffer(kReadSize); |
| 279 | 274 |
| 280 result = read_socket_->Read(read_buffer_, kReadSize, &read_cb_); | 275 result = read_socket_->Read( |
| 276 read_buffer_, kReadSize, |
| 277 base::Bind(&TcpChannelTester::OnRead, base::Unretained(this))); |
| 281 HandleReadResult(result); | 278 HandleReadResult(result); |
| 282 }; | 279 }; |
| 283 } | 280 } |
| 284 | 281 |
| 285 void OnRead(int result) { | 282 void OnRead(int result) { |
| 286 HandleReadResult(result); | 283 HandleReadResult(result); |
| 287 DoRead(); | 284 DoRead(); |
| 288 } | 285 } |
| 289 | 286 |
| 290 void HandleReadResult(int result) { | 287 void HandleReadResult(int result) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 308 net::Socket* write_socket_; | 305 net::Socket* write_socket_; |
| 309 net::Socket* read_socket_; | 306 net::Socket* read_socket_; |
| 310 bool done_; | 307 bool done_; |
| 311 | 308 |
| 312 scoped_refptr<net::DrainableIOBuffer> send_buffer_; | 309 scoped_refptr<net::DrainableIOBuffer> send_buffer_; |
| 313 scoped_refptr<net::IOBuffer> read_buffer_; | 310 scoped_refptr<net::IOBuffer> read_buffer_; |
| 314 | 311 |
| 315 std::vector<char> sent_data_; | 312 std::vector<char> sent_data_; |
| 316 std::vector<char> received_data_; | 313 std::vector<char> received_data_; |
| 317 | 314 |
| 318 net::OldCompletionCallbackImpl<TcpChannelTester> write_cb_; | |
| 319 net::OldCompletionCallbackImpl<TcpChannelTester> read_cb_; | |
| 320 int write_errors_; | 315 int write_errors_; |
| 321 int read_errors_; | 316 int read_errors_; |
| 322 }; | 317 }; |
| 323 | 318 |
| 324 } // namespace | 319 } // namespace |
| 325 | 320 |
| 326 namespace content { | 321 namespace content { |
| 327 | 322 |
| 328 class MockP2PEventHandler : public P2PTransport::EventHandler { | 323 class MockP2PEventHandler : public P2PTransport::EventHandler { |
| 329 public: | 324 public: |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 | 476 |
| 482 message_loop_.PostDelayedTask(FROM_HERE, new MessageLoop::QuitTask(), | 477 message_loop_.PostDelayedTask(FROM_HERE, new MessageLoop::QuitTask(), |
| 483 TestTimeouts::action_max_timeout_ms()); | 478 TestTimeouts::action_max_timeout_ms()); |
| 484 | 479 |
| 485 channel_tester->Init(); | 480 channel_tester->Init(); |
| 486 message_loop_.Run(); | 481 message_loop_.Run(); |
| 487 channel_tester->CheckResults(); | 482 channel_tester->CheckResults(); |
| 488 } | 483 } |
| 489 | 484 |
| 490 } // namespace content | 485 } // namespace content |
| OLD | NEW |