Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(495)

Side by Side Diff: net/socket/socket_test_util.h

Issue 1494813002: Fix HttpStreamParser::CanReuseConnection(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/socket/socket_test_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_ 5 #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_
6 #define NET_SOCKET_SOCKET_TEST_UTIL_H_ 6 #define NET_SOCKET_SOCKET_TEST_UTIL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <cstring> 10 #include <cstring>
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 MockWriteResult(IoMode io_mode, int result) : mode(io_mode), result(result) {} 183 MockWriteResult(IoMode io_mode, int result) : mode(io_mode), result(result) {}
184 184
185 IoMode mode; 185 IoMode mode;
186 int result; 186 int result;
187 }; 187 };
188 188
189 // The SocketDataProvider is an interface used by the MockClientSocket 189 // The SocketDataProvider is an interface used by the MockClientSocket
190 // for getting data about individual reads and writes on the socket. 190 // for getting data about individual reads and writes on the socket.
191 class SocketDataProvider { 191 class SocketDataProvider {
192 public: 192 public:
193 SocketDataProvider() : socket_(NULL) {} 193 SocketDataProvider();
194 194 virtual ~SocketDataProvider();
195 virtual ~SocketDataProvider() {}
196 195
197 // Returns the buffer and result code for the next simulated read. 196 // Returns the buffer and result code for the next simulated read.
198 // If the |MockRead.result| is ERR_IO_PENDING, it informs the caller 197 // If the |MockRead.result| is ERR_IO_PENDING, it informs the caller
199 // that it will be called via the AsyncSocket::OnReadComplete() 198 // that it will be called via the AsyncSocket::OnReadComplete()
200 // function at a later time. 199 // function at a later time.
201 virtual MockRead OnRead() = 0; 200 virtual MockRead OnRead() = 0;
202 virtual MockWriteResult OnWrite(const std::string& data) = 0; 201 virtual MockWriteResult OnWrite(const std::string& data) = 0;
203 virtual void Reset() = 0; 202 virtual void Reset() = 0;
204 virtual bool AllReadDataConsumed() const = 0; 203 virtual bool AllReadDataConsumed() const = 0;
205 virtual bool AllWriteDataConsumed() const = 0; 204 virtual bool AllWriteDataConsumed() const = 0;
206 205
206 // Returns true if the request should be considered idle, for the purposes of
207 // IsConnectedAndIdle.
208 virtual bool IsIdle() const;
209
207 // Accessor for the socket which is using the SocketDataProvider. 210 // Accessor for the socket which is using the SocketDataProvider.
208 AsyncSocket* socket() { return socket_; } 211 AsyncSocket* socket() { return socket_; }
209 void set_socket(AsyncSocket* socket) { socket_ = socket; } 212 void set_socket(AsyncSocket* socket) { socket_ = socket; }
210 213
211 MockConnect connect_data() const { return connect_; } 214 MockConnect connect_data() const { return connect_; }
212 void set_connect_data(const MockConnect& connect) { connect_ = connect; } 215 void set_connect_data(const MockConnect& connect) { connect_ = connect; }
213 216
214 private: 217 private:
215 MockConnect connect_; 218 MockConnect connect_;
216 AsyncSocket* socket_; 219 AsyncSocket* socket_;
(...skipping 11 matching lines...) Expand all
228 // data.async is ignored, and this read is completed synchronously as 231 // data.async is ignored, and this read is completed synchronously as
229 // part of this call. 232 // part of this call.
230 // TODO(rch): this should take a StringPiece since most of the fields 233 // TODO(rch): this should take a StringPiece since most of the fields
231 // are ignored. 234 // are ignored.
232 virtual void OnReadComplete(const MockRead& data) = 0; 235 virtual void OnReadComplete(const MockRead& data) = 0;
233 // If an async IO is pending because the SocketDataProvider returned 236 // If an async IO is pending because the SocketDataProvider returned
234 // ERR_IO_PENDING, then the AsyncSocket waits until this OnReadComplete 237 // ERR_IO_PENDING, then the AsyncSocket waits until this OnReadComplete
235 // is called to complete the asynchronous read operation. 238 // is called to complete the asynchronous read operation.
236 virtual void OnWriteComplete(int rv) = 0; 239 virtual void OnWriteComplete(int rv) = 0;
237 virtual void OnConnectComplete(const MockConnect& data) = 0; 240 virtual void OnConnectComplete(const MockConnect& data) = 0;
241
242 // Called when the SocketDataProvider associated with the socket is destroyed.
243 // The socket may continue to be used after the data provider is destroyed,
244 // so it should be sure not to dereference the provider after this is called.
245 virtual void OnDataProviderDestroyed() = 0;
mmenke 2015/12/03 19:37:10 Could use weak ptrs instead, but I think this is a
238 }; 246 };
239 247
240 // StaticSocketDataHelper manages a list of reads and writes. 248 // StaticSocketDataHelper manages a list of reads and writes.
241 class StaticSocketDataHelper { 249 class StaticSocketDataHelper {
242 public: 250 public:
243 StaticSocketDataHelper(MockRead* reads, 251 StaticSocketDataHelper(MockRead* reads,
244 size_t reads_count, 252 size_t reads_count,
245 MockWrite* writes, 253 MockWrite* writes,
246 size_t writes_count); 254 size_t writes_count);
247 ~StaticSocketDataHelper(); 255 ~StaticSocketDataHelper();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 size_t writes_count); 365 size_t writes_count);
358 366
359 ~SequencedSocketData() override; 367 ~SequencedSocketData() override;
360 368
361 // SocketDataProviderBase implementation. 369 // SocketDataProviderBase implementation.
362 MockRead OnRead() override; 370 MockRead OnRead() override;
363 MockWriteResult OnWrite(const std::string& data) override; 371 MockWriteResult OnWrite(const std::string& data) override;
364 void Reset() override; 372 void Reset() override;
365 bool AllReadDataConsumed() const override; 373 bool AllReadDataConsumed() const override;
366 bool AllWriteDataConsumed() const override; 374 bool AllWriteDataConsumed() const override;
375 bool IsIdle() const override;
367 376
368 bool IsReadPaused(); 377 bool IsReadPaused();
369 void CompleteRead(); 378 void CompleteRead();
370 379
380 // When true, IsConnectedAndIdle() will return false if the next event in the
381 // sequence is a synchronous. Otherwise, the socket claims to be idle as
382 // long as it's connected. Defaults to false.
383 void set_busy_before_sync_reads(bool busy_before_sync_reads) {
384 busy_before_sync_reads_ = busy_before_sync_reads;
385 }
386
371 private: 387 private:
372 // Defines the state for the read or write path. 388 // Defines the state for the read or write path.
373 enum IoState { 389 enum IoState {
374 IDLE, // No async operation is in progress. 390 IDLE, // No async operation is in progress.
375 PENDING, // An async operation in waiting for another opteration to 391 PENDING, // An async operation in waiting for another opteration to
376 // complete. 392 // complete.
377 COMPLETING, // A task has been posted to complet an async operation. 393 COMPLETING, // A task has been posted to complet an async operation.
378 PAUSED, // IO is paused until CompleteRead() is called. 394 PAUSED, // IO is paused until CompleteRead() is called.
379 }; 395 };
380 396
381 void OnReadComplete(); 397 void OnReadComplete();
382 void OnWriteComplete(); 398 void OnWriteComplete();
383 399
384 void MaybePostReadCompleteTask(); 400 void MaybePostReadCompleteTask();
385 void MaybePostWriteCompleteTask(); 401 void MaybePostWriteCompleteTask();
386 402
387 StaticSocketDataHelper helper_; 403 StaticSocketDataHelper helper_;
388 int sequence_number_; 404 int sequence_number_;
389 IoState read_state_; 405 IoState read_state_;
390 IoState write_state_; 406 IoState write_state_;
391 407
408 bool busy_before_sync_reads_;
409
392 base::WeakPtrFactory<SequencedSocketData> weak_factory_; 410 base::WeakPtrFactory<SequencedSocketData> weak_factory_;
393 411
394 DISALLOW_COPY_AND_ASSIGN(SequencedSocketData); 412 DISALLOW_COPY_AND_ASSIGN(SequencedSocketData);
395 }; 413 };
396 414
397 class DeterministicMockTCPClientSocket; 415 class DeterministicMockTCPClientSocket;
398 416
399 // This class gives the user full control over the network activity, 417 // This class gives the user full control over the network activity,
400 // specifically the timing of the COMPLETION of I/O operations. Regardless of 418 // specifically the timing of the COMPLETION of I/O operations. Regardless of
401 // the order in which I/O operations are initiated, this class ensures that they 419 // the order in which I/O operations are initiated, this class ensures that they
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 bool WasNpnNegotiated() const override; 728 bool WasNpnNegotiated() const override;
711 bool GetSSLInfo(SSLInfo* ssl_info) override; 729 bool GetSSLInfo(SSLInfo* ssl_info) override;
712 void GetConnectionAttempts(ConnectionAttempts* out) const override; 730 void GetConnectionAttempts(ConnectionAttempts* out) const override;
713 void ClearConnectionAttempts() override; 731 void ClearConnectionAttempts() override;
714 void AddConnectionAttempts(const ConnectionAttempts& attempts) override; 732 void AddConnectionAttempts(const ConnectionAttempts& attempts) override;
715 733
716 // AsyncSocket: 734 // AsyncSocket:
717 void OnReadComplete(const MockRead& data) override; 735 void OnReadComplete(const MockRead& data) override;
718 void OnWriteComplete(int rv) override; 736 void OnWriteComplete(int rv) override;
719 void OnConnectComplete(const MockConnect& data) override; 737 void OnConnectComplete(const MockConnect& data) override;
738 void OnDataProviderDestroyed() override;
720 739
721 private: 740 private:
722 int CompleteRead(); 741 int CompleteRead();
723 742
724 AddressList addresses_; 743 AddressList addresses_;
725 744
726 SocketDataProvider* data_; 745 SocketDataProvider* data_;
727 int read_offset_; 746 int read_offset_;
728 MockRead read_data_; 747 MockRead read_data_;
729 bool need_read_data_; 748 bool need_read_data_;
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 int buf_len, 910 int buf_len,
892 const CompletionCallback& callback) override; 911 const CompletionCallback& callback) override;
893 int Write(IOBuffer* buf, 912 int Write(IOBuffer* buf,
894 int buf_len, 913 int buf_len,
895 const CompletionCallback& callback) override; 914 const CompletionCallback& callback) override;
896 915
897 // StreamSocket implementation. 916 // StreamSocket implementation.
898 int Connect(const CompletionCallback& callback) override; 917 int Connect(const CompletionCallback& callback) override;
899 void Disconnect() override; 918 void Disconnect() override;
900 bool IsConnected() const override; 919 bool IsConnected() const override;
920 bool IsConnectedAndIdle() const override;
901 bool WasEverUsed() const override; 921 bool WasEverUsed() const override;
902 bool UsingTCPFastOpen() const override; 922 bool UsingTCPFastOpen() const override;
903 int GetPeerAddress(IPEndPoint* address) const override; 923 int GetPeerAddress(IPEndPoint* address) const override;
904 bool GetSSLInfo(SSLInfo* ssl_info) override; 924 bool GetSSLInfo(SSLInfo* ssl_info) override;
905 925
906 // SSLClientSocket implementation. 926 // SSLClientSocket implementation.
907 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override; 927 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override;
908 NextProtoStatus GetNextProto(std::string* proto) const override; 928 NextProtoStatus GetNextProto(std::string* proto) const override;
909 929
910 // This MockSocket does not implement the manual async IO feature. 930 // This MockSocket does not implement the manual async IO feature.
911 void OnReadComplete(const MockRead& data) override; 931 void OnReadComplete(const MockRead& data) override;
912 void OnWriteComplete(int rv) override; 932 void OnWriteComplete(int rv) override;
913 void OnConnectComplete(const MockConnect& data) override; 933 void OnConnectComplete(const MockConnect& data) override;
934 // SSL sockets don't need magic to deal with destruction of their data
935 // provider.
936 // TODO(mmenke): Probably a good idea to support it, anyways.
937 void OnDataProviderDestroyed() override {}
914 938
915 ChannelIDService* GetChannelIDService() const override; 939 ChannelIDService* GetChannelIDService() const override;
916 940
917 private: 941 private:
918 static void ConnectCallback(MockSSLClientSocket* ssl_client_socket, 942 static void ConnectCallback(MockSSLClientSocket* ssl_client_socket,
919 const CompletionCallback& callback, 943 const CompletionCallback& callback,
920 int rv); 944 int rv);
921 945
922 scoped_ptr<ClientSocketHandle> transport_; 946 scoped_ptr<ClientSocketHandle> transport_;
923 SSLSocketDataProvider* data_; 947 SSLSocketDataProvider* data_;
(...skipping 23 matching lines...) Expand all
947 const BoundNetLog& NetLog() const override; 971 const BoundNetLog& NetLog() const override;
948 972
949 // DatagramClientSocket implementation. 973 // DatagramClientSocket implementation.
950 int BindToNetwork(NetworkChangeNotifier::NetworkHandle network) override; 974 int BindToNetwork(NetworkChangeNotifier::NetworkHandle network) override;
951 int Connect(const IPEndPoint& address) override; 975 int Connect(const IPEndPoint& address) override;
952 976
953 // AsyncSocket implementation. 977 // AsyncSocket implementation.
954 void OnReadComplete(const MockRead& data) override; 978 void OnReadComplete(const MockRead& data) override;
955 void OnWriteComplete(int rv) override; 979 void OnWriteComplete(int rv) override;
956 void OnConnectComplete(const MockConnect& data) override; 980 void OnConnectComplete(const MockConnect& data) override;
981 void OnDataProviderDestroyed() override;
957 982
958 void set_source_port(uint16 port) { source_port_ = port;} 983 void set_source_port(uint16 port) { source_port_ = port;}
959 984
960 private: 985 private:
961 int CompleteRead(); 986 int CompleteRead();
962 987
963 void RunCallbackAsync(const CompletionCallback& callback, int result); 988 void RunCallbackAsync(const CompletionCallback& callback, int result);
964 void RunCallback(const CompletionCallback& callback, int result); 989 void RunCallback(const CompletionCallback& callback, int result);
965 990
966 bool connected_; 991 bool connected_;
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 1273
1249 // Helper function to get the total data size of the MockReads in |reads|. 1274 // Helper function to get the total data size of the MockReads in |reads|.
1250 int64_t CountReadBytes(const MockRead reads[], size_t reads_size); 1275 int64_t CountReadBytes(const MockRead reads[], size_t reads_size);
1251 1276
1252 // Helper function to get the total data size of the MockWrites in |writes|. 1277 // Helper function to get the total data size of the MockWrites in |writes|.
1253 int64_t CountWriteBytes(const MockWrite writes[], size_t writes_size); 1278 int64_t CountWriteBytes(const MockWrite writes[], size_t writes_size);
1254 1279
1255 } // namespace net 1280 } // namespace net
1256 1281
1257 #endif // NET_SOCKET_SOCKET_TEST_UTIL_H_ 1282 #endif // NET_SOCKET_SOCKET_TEST_UTIL_H_
OLDNEW
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/socket/socket_test_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698