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 |