OLD | NEW |
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_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ | 5 #ifndef NET_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ |
6 #define NET_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ | 6 #define NET_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 MIGRATION_STATUS_DISABLED, | 101 MIGRATION_STATUS_DISABLED, |
102 MIGRATION_STATUS_NO_ALTERNATE_NETWORK, | 102 MIGRATION_STATUS_NO_ALTERNATE_NETWORK, |
103 MIGRATION_STATUS_MAX | 103 MIGRATION_STATUS_MAX |
104 }; | 104 }; |
105 | 105 |
106 // Encapsulates a pending request for a QuicHttpStream. | 106 // Encapsulates a pending request for a QuicHttpStream. |
107 // If the request is still pending when it is destroyed, it will | 107 // If the request is still pending when it is destroyed, it will |
108 // cancel the request with the factory. | 108 // cancel the request with the factory. |
109 class NET_EXPORT_PRIVATE QuicStreamRequest { | 109 class NET_EXPORT_PRIVATE QuicStreamRequest { |
110 public: | 110 public: |
111 explicit QuicStreamRequest(QuicStreamFactory* factory, | 111 QuicStreamRequest(QuicStreamFactory* factory, |
112 HttpServerProperties* http_server_properties); | 112 HttpServerProperties* http_server_properties); |
113 ~QuicStreamRequest(); | 113 ~QuicStreamRequest(); |
114 | 114 |
115 // |cert_verify_flags| is bitwise OR'd of CertVerifier::VerifyFlags and it is | 115 // |cert_verify_flags| is bitwise OR'd of CertVerifier::VerifyFlags and it is |
116 // passed to CertVerifier::Verify. | 116 // passed to CertVerifier::Verify. |
117 // |destination| will be resolved and resulting IPEndPoint used to open a | 117 // |destination| will be resolved and resulting IPEndPoint used to open a |
118 // QuicConnection. This can be different than HostPortPair::FromURL(url). | 118 // QuicConnection. This can be different than HostPortPair::FromURL(url). |
119 int Request(const HostPortPair& destination, | 119 virtual int Request(const HostPortPair& destination, |
120 PrivacyMode privacy_mode, | 120 PrivacyMode privacy_mode, |
121 int cert_verify_flags, | 121 int cert_verify_flags, |
122 const GURL& url, | 122 const GURL& url, |
123 QuicStringPiece method, | 123 QuicStringPiece method, |
124 const NetLogWithSource& net_log, | 124 const NetLogWithSource& net_log, |
125 const CompletionCallback& callback); | 125 const CompletionCallback& callback); |
126 | 126 |
127 void OnRequestComplete(int rv); | 127 void OnRequestComplete(int rv); |
128 | 128 |
129 // Helper method that calls |factory_|'s GetTimeDelayForWaitingJob(). It | 129 // Helper method that calls |factory_|'s GetTimeDelayForWaitingJob(). It |
130 // returns the amount of time waiting job should be delayed. | 130 // returns the amount of time waiting job should be delayed. |
131 base::TimeDelta GetTimeDelayForWaitingJob() const; | 131 base::TimeDelta GetTimeDelayForWaitingJob() const; |
132 | 132 |
133 std::unique_ptr<QuicHttpStream> CreateStream(); | 133 virtual std::unique_ptr<HttpStream> CreateStream(); |
134 | 134 |
135 std::unique_ptr<BidirectionalStreamImpl> CreateBidirectionalStreamImpl(); | 135 virtual std::unique_ptr<BidirectionalStreamImpl> |
| 136 CreateBidirectionalStreamImpl(); |
136 | 137 |
137 // Sets |session_|. | 138 // Sets |session_|. |
138 void SetSession(QuicChromiumClientSession* session); | 139 void SetSession(QuicChromiumClientSession* session); |
139 | 140 |
140 const QuicServerId& server_id() const { return server_id_; } | 141 const QuicServerId& server_id() const { return server_id_; } |
141 | 142 |
142 const NetLogWithSource& net_log() const { return net_log_; } | 143 const NetLogWithSource& net_log() const { return net_log_; } |
143 | 144 |
144 private: | 145 private: |
145 QuicStreamFactory* factory_; | 146 QuicStreamFactory* factory_; |
146 HttpServerProperties* http_server_properties_; | 147 HttpServerProperties* http_server_properties_; |
147 QuicServerId server_id_; | 148 QuicServerId server_id_; |
148 NetLogWithSource net_log_; | 149 NetLogWithSource net_log_; |
149 CompletionCallback callback_; | 150 CompletionCallback callback_; |
150 base::WeakPtr<QuicChromiumClientSession> session_; | 151 base::WeakPtr<QuicChromiumClientSession> session_; |
151 | 152 |
152 DISALLOW_COPY_AND_ASSIGN(QuicStreamRequest); | 153 DISALLOW_COPY_AND_ASSIGN(QuicStreamRequest); |
153 }; | 154 }; |
154 | 155 |
| 156 // A default factory for creating QuicStreamRequest. Subclassed for testing |
| 157 // purpose. |
| 158 class NET_EXPORT_PRIVATE QuicStreamRequestFactory { |
| 159 public: |
| 160 QuicStreamRequestFactory(); |
| 161 ~QuicStreamRequestFactory(); |
| 162 |
| 163 virtual std::unique_ptr<QuicStreamRequest> CreateRequest( |
| 164 QuicStreamFactory* factory, |
| 165 HttpServerProperties* http_server_properties); |
| 166 }; |
| 167 |
155 // A factory for creating new QuicHttpStreams on top of a pool of | 168 // A factory for creating new QuicHttpStreams on top of a pool of |
156 // QuicChromiumClientSessions. | 169 // QuicChromiumClientSessions. |
157 class NET_EXPORT_PRIVATE QuicStreamFactory | 170 class NET_EXPORT_PRIVATE QuicStreamFactory |
158 : public NetworkChangeNotifier::IPAddressObserver, | 171 : public NetworkChangeNotifier::IPAddressObserver, |
159 public NetworkChangeNotifier::NetworkObserver, | 172 public NetworkChangeNotifier::NetworkObserver, |
160 public SSLConfigService::Observer, | 173 public SSLConfigService::Observer, |
161 public CertDatabase::Observer { | 174 public CertDatabase::Observer { |
162 public: | 175 public: |
163 // This class encompasses |destination| and |server_id|. | 176 // This class encompasses |destination| and |server_id|. |
164 // |destination| is a HostPortPair which is resolved | 177 // |destination| is a HostPortPair which is resolved |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 const QuicTagVector& connection_options, | 236 const QuicTagVector& connection_options, |
224 bool enable_token_binding); | 237 bool enable_token_binding); |
225 ~QuicStreamFactory() override; | 238 ~QuicStreamFactory() override; |
226 | 239 |
227 // Returns true if there is an existing session for |server_id| or if the | 240 // Returns true if there is an existing session for |server_id| or if the |
228 // request can be pooled to an existing session to the IP address of | 241 // request can be pooled to an existing session to the IP address of |
229 // |destination|. | 242 // |destination|. |
230 bool CanUseExistingSession(const QuicServerId& server_id, | 243 bool CanUseExistingSession(const QuicServerId& server_id, |
231 const HostPortPair& destination); | 244 const HostPortPair& destination); |
232 | 245 |
| 246 std::unique_ptr<QuicStreamRequest> CreateStreamRequest(); |
| 247 |
233 // Creates a new QuicHttpStream to |host_port_pair| which will be | 248 // Creates a new QuicHttpStream to |host_port_pair| which will be |
234 // owned by |request|. | 249 // owned by |request|. |
235 // If a matching session already exists, this method will return OK. If no | 250 // If a matching session already exists, this method will return OK. If no |
236 // matching session exists, this will return ERR_IO_PENDING and will invoke | 251 // matching session exists, this will return ERR_IO_PENDING and will invoke |
237 // OnRequestComplete asynchronously. | 252 // OnRequestComplete asynchronously. |
238 int Create(const QuicServerId& server_id, | 253 int Create(const QuicServerId& server_id, |
239 const HostPortPair& destination, | 254 const HostPortPair& destination, |
240 int cert_verify_flags, | 255 int cert_verify_flags, |
241 const GURL& url, | 256 const GURL& url, |
242 QuicStringPiece method, | 257 QuicStringPiece method, |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 // is created for every QUIC connection. | 501 // is created for every QUIC connection. |
487 // |socket_performance_watcher_factory_| may be null. | 502 // |socket_performance_watcher_factory_| may be null. |
488 SocketPerformanceWatcherFactory* socket_performance_watcher_factory_; | 503 SocketPerformanceWatcherFactory* socket_performance_watcher_factory_; |
489 | 504 |
490 // The helper used for all connections. | 505 // The helper used for all connections. |
491 std::unique_ptr<QuicChromiumConnectionHelper> helper_; | 506 std::unique_ptr<QuicChromiumConnectionHelper> helper_; |
492 | 507 |
493 // The alarm factory used for all connections. | 508 // The alarm factory used for all connections. |
494 std::unique_ptr<QuicAlarmFactory> alarm_factory_; | 509 std::unique_ptr<QuicAlarmFactory> alarm_factory_; |
495 | 510 |
| 511 std::unique_ptr<QuicStreamRequestFactory> stream_request_factory_; |
| 512 |
496 // Contains owning pointers to all sessions that currently exist. | 513 // Contains owning pointers to all sessions that currently exist. |
497 SessionIdMap all_sessions_; | 514 SessionIdMap all_sessions_; |
498 // Contains non-owning pointers to currently active session | 515 // Contains non-owning pointers to currently active session |
499 // (not going away session, once they're implemented). | 516 // (not going away session, once they're implemented). |
500 SessionMap active_sessions_; | 517 SessionMap active_sessions_; |
501 // Map from session to set of aliases that this session is known by. | 518 // Map from session to set of aliases that this session is known by. |
502 SessionAliasMap session_aliases_; | 519 SessionAliasMap session_aliases_; |
503 // Map from IP address to sessions which are connected to this address. | 520 // Map from IP address to sessions which are connected to this address. |
504 IPAliasMap ip_aliases_; | 521 IPAliasMap ip_aliases_; |
505 // Map from session to its original peer IP address. | 522 // Map from session to its original peer IP address. |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 const scoped_refptr<SSLConfigService> ssl_config_service_; | 596 const scoped_refptr<SSLConfigService> ssl_config_service_; |
580 | 597 |
581 base::WeakPtrFactory<QuicStreamFactory> weak_factory_; | 598 base::WeakPtrFactory<QuicStreamFactory> weak_factory_; |
582 | 599 |
583 DISALLOW_COPY_AND_ASSIGN(QuicStreamFactory); | 600 DISALLOW_COPY_AND_ASSIGN(QuicStreamFactory); |
584 }; | 601 }; |
585 | 602 |
586 } // namespace net | 603 } // namespace net |
587 | 604 |
588 #endif // NET_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ | 605 #endif // NET_QUIC_CHROMIUM_QUIC_STREAM_FACTORY_H_ |
OLD | NEW |