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

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

Issue 1580903002: Convert ignore_limits from a SocketParam to a socket request argument. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 4 years, 11 months 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
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 // A ClientSocketPoolBase is used to restrict the number of sockets open at 5 // A ClientSocketPoolBase is used to restrict the number of sockets open at
6 // a time. It also maintains a list of idle persistent sockets for reuse. 6 // a time. It also maintains a list of idle persistent sockets for reuse.
7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle 7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle
8 // the core logic of (1) restricting the number of active (connected or 8 // the core logic of (1) restricting the number of active (connected or
9 // connecting) sockets per "group" (generally speaking, the hostname), (2) 9 // connecting) sockets per "group" (generally speaking, the hostname), (2)
10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3) 10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 ConnectJob* job) = 0; 74 ConnectJob* job) = 0;
75 75
76 private: 76 private:
77 DISALLOW_COPY_AND_ASSIGN(Delegate); 77 DISALLOW_COPY_AND_ASSIGN(Delegate);
78 }; 78 };
79 79
80 // A |timeout_duration| of 0 corresponds to no timeout. 80 // A |timeout_duration| of 0 corresponds to no timeout.
81 ConnectJob(const std::string& group_name, 81 ConnectJob(const std::string& group_name,
82 base::TimeDelta timeout_duration, 82 base::TimeDelta timeout_duration,
83 RequestPriority priority, 83 RequestPriority priority,
84 bool ignore_limits,
84 Delegate* delegate, 85 Delegate* delegate,
85 const BoundNetLog& net_log); 86 const BoundNetLog& net_log);
86 virtual ~ConnectJob(); 87 virtual ~ConnectJob();
87 88
88 // Accessors 89 // Accessors
89 const std::string& group_name() const { return group_name_; } 90 const std::string& group_name() const { return group_name_; }
90 const BoundNetLog& net_log() { return net_log_; } 91 const BoundNetLog& net_log() { return net_log_; }
91 92
92 // Releases ownership of the underlying socket to the caller. 93 // Releases ownership of the underlying socket to the caller.
93 // Returns the released socket, or NULL if there was a connection 94 // Returns the released socket, or NULL if there was a connection
(...skipping 16 matching lines...) Expand all
110 virtual void GetAdditionalErrorState(ClientSocketHandle* handle) {} 111 virtual void GetAdditionalErrorState(ClientSocketHandle* handle) {}
111 112
112 const LoadTimingInfo::ConnectTiming& connect_timing() const { 113 const LoadTimingInfo::ConnectTiming& connect_timing() const {
113 return connect_timing_; 114 return connect_timing_;
114 } 115 }
115 116
116 const BoundNetLog& net_log() const { return net_log_; } 117 const BoundNetLog& net_log() const { return net_log_; }
117 118
118 protected: 119 protected:
119 RequestPriority priority() const { return priority_; } 120 RequestPriority priority() const { return priority_; }
121 bool ignore_limits() const { return ignore_limits_; }
120 void SetSocket(scoped_ptr<StreamSocket> socket); 122 void SetSocket(scoped_ptr<StreamSocket> socket);
121 StreamSocket* socket() { return socket_.get(); } 123 StreamSocket* socket() { return socket_.get(); }
122 void NotifyDelegateOfCompletion(int rv); 124 void NotifyDelegateOfCompletion(int rv);
123 void ResetTimer(base::TimeDelta remainingTime); 125 void ResetTimer(base::TimeDelta remainingTime);
124 126
125 // Connection establishment timing information. 127 // Connection establishment timing information.
126 LoadTimingInfo::ConnectTiming connect_timing_; 128 LoadTimingInfo::ConnectTiming connect_timing_;
127 129
128 private: 130 private:
129 virtual int ConnectInternal() = 0; 131 virtual int ConnectInternal() = 0;
130 132
131 void LogConnectStart(); 133 void LogConnectStart();
132 void LogConnectCompletion(int net_error); 134 void LogConnectCompletion(int net_error);
133 135
134 // Alerts the delegate that the ConnectJob has timed out. 136 // Alerts the delegate that the ConnectJob has timed out.
135 void OnTimeout(); 137 void OnTimeout();
136 138
137 const std::string group_name_; 139 const std::string group_name_;
138 const base::TimeDelta timeout_duration_; 140 const base::TimeDelta timeout_duration_;
139 // TODO(akalin): Support reprioritization. 141 // TODO(akalin): Support reprioritization.
140 const RequestPriority priority_; 142 const RequestPriority priority_;
143 const bool ignore_limits_;
141 // Timer to abort jobs that take too long. 144 // Timer to abort jobs that take too long.
142 base::OneShotTimer timer_; 145 base::OneShotTimer timer_;
143 Delegate* delegate_; 146 Delegate* delegate_;
144 scoped_ptr<StreamSocket> socket_; 147 scoped_ptr<StreamSocket> socket_;
145 BoundNetLog net_log_; 148 BoundNetLog net_log_;
146 // A ConnectJob is idle until Connect() has been called. 149 // A ConnectJob is idle until Connect() has been called.
147 bool idle_; 150 bool idle_;
148 151
149 DISALLOW_COPY_AND_ASSIGN(ConnectJob); 152 DISALLOW_COPY_AND_ASSIGN(ConnectJob);
150 }; 153 };
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 } // namespace internal 676 } // namespace internal
674 677
675 template <typename SocketParams> 678 template <typename SocketParams>
676 class ClientSocketPoolBase { 679 class ClientSocketPoolBase {
677 public: 680 public:
678 class Request : public internal::ClientSocketPoolBaseHelper::Request { 681 class Request : public internal::ClientSocketPoolBaseHelper::Request {
679 public: 682 public:
680 Request(ClientSocketHandle* handle, 683 Request(ClientSocketHandle* handle,
681 const CompletionCallback& callback, 684 const CompletionCallback& callback,
682 RequestPriority priority, 685 RequestPriority priority,
686 bool ignore_limits,
683 internal::ClientSocketPoolBaseHelper::Flags flags, 687 internal::ClientSocketPoolBaseHelper::Flags flags,
684 bool ignore_limits,
685 const scoped_refptr<SocketParams>& params, 688 const scoped_refptr<SocketParams>& params,
686 const BoundNetLog& net_log) 689 const BoundNetLog& net_log)
687 : internal::ClientSocketPoolBaseHelper::Request( 690 : internal::ClientSocketPoolBaseHelper::Request(handle,
688 handle, callback, priority, ignore_limits, flags, net_log), 691 callback,
692 priority,
693 ignore_limits,
694 flags,
695 net_log),
689 params_(params) {} 696 params_(params) {}
690 697
691 const scoped_refptr<SocketParams>& params() const { return params_; } 698 const scoped_refptr<SocketParams>& params() const { return params_; }
692 699
693 private: 700 private:
694 const scoped_refptr<SocketParams> params_; 701 const scoped_refptr<SocketParams> params_;
695 }; 702 };
696 703
697 class ConnectJobFactory { 704 class ConnectJobFactory {
698 public: 705 public:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 749
743 void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) { 750 void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) {
744 helper_.RemoveHigherLayeredPool(higher_pool); 751 helper_.RemoveHigherLayeredPool(higher_pool);
745 } 752 }
746 753
747 // RequestSocket bundles up the parameters into a Request and then forwards to 754 // RequestSocket bundles up the parameters into a Request and then forwards to
748 // ClientSocketPoolBaseHelper::RequestSocket(). 755 // ClientSocketPoolBaseHelper::RequestSocket().
749 int RequestSocket(const std::string& group_name, 756 int RequestSocket(const std::string& group_name,
750 const scoped_refptr<SocketParams>& params, 757 const scoped_refptr<SocketParams>& params,
751 RequestPriority priority, 758 RequestPriority priority,
759 bool ignore_limits,
752 ClientSocketHandle* handle, 760 ClientSocketHandle* handle,
753 const CompletionCallback& callback, 761 const CompletionCallback& callback,
754 const BoundNetLog& net_log) { 762 const BoundNetLog& net_log) {
755 scoped_ptr<const Request> request( 763 scoped_ptr<const Request> request(new Request(
756 new Request(handle, callback, priority, 764 handle, callback, priority, ignore_limits,
757 internal::ClientSocketPoolBaseHelper::NORMAL, 765 internal::ClientSocketPoolBaseHelper::NORMAL, params, net_log));
758 params->ignore_limits(),
759 params, net_log));
760 return helper_.RequestSocket(group_name, std::move(request)); 766 return helper_.RequestSocket(group_name, std::move(request));
761 } 767 }
762 768
763 // RequestSockets bundles up the parameters into a Request and then forwards 769 // RequestSockets bundles up the parameters into a Request and then forwards
764 // to ClientSocketPoolBaseHelper::RequestSockets(). Note that it assigns the 770 // to ClientSocketPoolBaseHelper::RequestSockets(). Note that it assigns the
765 // priority to IDLE and specifies the NO_IDLE_SOCKETS flag. 771 // priority to IDLE and specifies the NO_IDLE_SOCKETS flag.
766 void RequestSockets(const std::string& group_name, 772 void RequestSockets(const std::string& group_name,
767 const scoped_refptr<SocketParams>& params, 773 const scoped_refptr<SocketParams>& params,
768 int num_sockets, 774 int num_sockets,
769 const BoundNetLog& net_log) { 775 const BoundNetLog& net_log) {
770 const Request request(NULL /* no handle */, CompletionCallback(), IDLE, 776 const Request request(NULL /* no handle */, CompletionCallback(), IDLE,
777 false /* ignore_limits */,
771 internal::ClientSocketPoolBaseHelper::NO_IDLE_SOCKETS, 778 internal::ClientSocketPoolBaseHelper::NO_IDLE_SOCKETS,
772 params->ignore_limits(), params, net_log); 779 params, net_log);
773 helper_.RequestSockets(group_name, request, num_sockets); 780 helper_.RequestSockets(group_name, request, num_sockets);
774 } 781 }
775 782
776 void CancelRequest(const std::string& group_name, 783 void CancelRequest(const std::string& group_name,
777 ClientSocketHandle* handle) { 784 ClientSocketHandle* handle) {
778 return helper_.CancelRequest(group_name, handle); 785 return helper_.CancelRequest(group_name, handle);
779 } 786 }
780 787
781 void ReleaseSocket(const std::string& group_name, 788 void ReleaseSocket(const std::string& group_name,
782 scoped_ptr<StreamSocket> socket, 789 scoped_ptr<StreamSocket> socket,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 }; 882 };
876 883
877 internal::ClientSocketPoolBaseHelper helper_; 884 internal::ClientSocketPoolBaseHelper helper_;
878 885
879 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase); 886 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase);
880 }; 887 };
881 888
882 } // namespace net 889 } // namespace net
883 890
884 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_ 891 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698