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 "net/socket/web_socket_server_socket.h" | 5 #include "net/socket/web_socket_server_socket.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 | 9 |
10 #include "base/callback_old.h" | 10 #include "base/callback_old.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 int lot = std::min(remaining, buf_len); | 150 int lot = std::min(remaining, buf_len); |
151 if (GetRand(0, 1)) | 151 if (GetRand(0, 1)) |
152 lot = GetRand(1, lot); | 152 lot = GetRand(1, lot); |
153 std::copy(buf->data(), buf->data() + lot, answer_->data()); | 153 std::copy(buf->data(), buf->data() + lot, answer_->data()); |
154 answer_->DidConsume(lot); | 154 answer_->DidConsume(lot); |
155 if (GetRand(0, 1)) { | 155 if (GetRand(0, 1)) { |
156 return lot; | 156 return lot; |
157 } | 157 } |
158 MessageLoop::current()->PostTask(FROM_HERE, | 158 MessageLoop::current()->PostTask(FROM_HERE, |
159 method_factory_.NewRunnableMethod( | 159 method_factory_.NewRunnableMethod( |
160 &TestingTransportSocket::DoOldWriteCallback, callback, lot)); | |
161 return net::ERR_IO_PENDING; | |
162 } | |
163 virtual int Write(net::IOBuffer* buf, int buf_len, | |
164 const net::CompletionCallback& callback) { | |
165 CHECK_GT(buf_len, 0); | |
166 int remaining = answer_->BytesRemaining(); | |
167 CHECK_GE(remaining, buf_len); | |
168 int lot = std::min(remaining, buf_len); | |
169 if (GetRand(0, 1)) | |
170 lot = GetRand(1, lot); | |
171 std::copy(buf->data(), buf->data() + lot, answer_->data()); | |
172 answer_->DidConsume(lot); | |
173 if (GetRand(0, 1)) { | |
174 return lot; | |
175 } | |
176 MessageLoop::current()->PostTask(FROM_HERE, | |
177 method_factory_.NewRunnableMethod( | |
178 &TestingTransportSocket::DoWriteCallback, callback, lot)); | 160 &TestingTransportSocket::DoWriteCallback, callback, lot)); |
179 return net::ERR_IO_PENDING; | 161 return net::ERR_IO_PENDING; |
180 } | 162 } |
181 | 163 |
182 virtual bool SetReceiveBufferSize(int32 size) { | 164 virtual bool SetReceiveBufferSize(int32 size) { |
183 return true; | 165 return true; |
184 } | 166 } |
185 | 167 |
186 virtual bool SetSendBufferSize(int32 size) { | 168 virtual bool SetSendBufferSize(int32 size) { |
187 return true; | 169 return true; |
(...skipping 15 matching lines...) Expand all Loading... |
203 if (result == 0 && !is_closed_) { | 185 if (result == 0 && !is_closed_) { |
204 MessageLoop::current()->PostTask(FROM_HERE, | 186 MessageLoop::current()->PostTask(FROM_HERE, |
205 method_factory_.NewRunnableMethod( | 187 method_factory_.NewRunnableMethod( |
206 &TestingTransportSocket::DoReadCallback, callback, 0)); | 188 &TestingTransportSocket::DoReadCallback, callback, 0)); |
207 } else { | 189 } else { |
208 if (!callback.is_null()) | 190 if (!callback.is_null()) |
209 callback.Run(result); | 191 callback.Run(result); |
210 } | 192 } |
211 } | 193 } |
212 | 194 |
213 void DoOldWriteCallback(net::OldCompletionCallback* callback, int result) { | 195 void DoWriteCallback(net::OldCompletionCallback* callback, int result) { |
214 if (callback) | 196 if (callback) |
215 callback->Run(result); | 197 callback->Run(result); |
216 } | 198 } |
217 void DoWriteCallback(const net::CompletionCallback& callback, int result) { | |
218 if (!callback.is_null()) | |
219 callback.Run(result); | |
220 } | |
221 | 199 |
222 bool is_closed_; | 200 bool is_closed_; |
223 | 201 |
224 // Data to return for Read requests. | 202 // Data to return for Read requests. |
225 scoped_refptr<net::DrainableIOBuffer> sample_; | 203 scoped_refptr<net::DrainableIOBuffer> sample_; |
226 | 204 |
227 // Data pushed to us by server socket (using Write calls). | 205 // Data pushed to us by server socket (using Write calls). |
228 scoped_refptr<net::DrainableIOBuffer> answer_; | 206 scoped_refptr<net::DrainableIOBuffer> answer_; |
229 | 207 |
230 // Final read callback to report zero (zero stands for EOF). | 208 // Final read callback to report zero (zero stands for EOF). |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 MessageLoop::current()->RunAllPending(); | 625 MessageLoop::current()->RunAllPending(); |
648 | 626 |
649 for (size_t i = kill_list.size(); i--;) | 627 for (size_t i = kill_list.size(); i--;) |
650 delete kill_list[i]; | 628 delete kill_list[i]; |
651 for (size_t i = tracker_list.size(); i--;) | 629 for (size_t i = tracker_list.size(); i--;) |
652 delete tracker_list[i]; | 630 delete tracker_list[i]; |
653 MessageLoop::current()->RunAllPending(); | 631 MessageLoop::current()->RunAllPending(); |
654 } | 632 } |
655 | 633 |
656 } // namespace net | 634 } // namespace net |
OLD | NEW |