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

Side by Side Diff: net/http/http_stream_factory_impl_job.h

Issue 2935293002: HttpStreamFactoryImpl::Job cleanup. (Closed)
Patch Set: Created 3 years, 6 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 #ifndef NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_ 5 #ifndef NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
6 #define NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_ 6 #define NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 virtual const NetLogWithSource* GetNetLog() const = 0; 138 virtual const NetLogWithSource* GetNetLog() const = 0;
139 139
140 virtual WebSocketHandshakeStreamBase::CreateHelper* 140 virtual WebSocketHandshakeStreamBase::CreateHelper*
141 websocket_handshake_stream_create_helper() = 0; 141 websocket_handshake_stream_create_helper() = 0;
142 142
143 virtual void MaybeSetWaitTimeForMainJob(const base::TimeDelta& delay) = 0; 143 virtual void MaybeSetWaitTimeForMainJob(const base::TimeDelta& delay) = 0;
144 144
145 virtual bool for_websockets() = 0; 145 virtual bool for_websockets() = 0;
146 }; 146 };
147 147
148 // Constructor for non-alternative Job. 148 // Job is owned by |delegate|, hence |delegate| is valid for the lifetime of
149 // Job is owned by |delegate|, hence |delegate| is valid for the 149 // the Job.
150 // lifetime of the Job. 150 //
151 // |alternative_protocol| is the protocol required by Alternative Service, if
152 // any:
153 // * |alternative_protocol == kProtoUnknown| means that the Job can pool to an
154 // existing SpdySession, or bind to a idle TCP socket that might use either
155 // HTTP/1.1 or HTTP/2.
156 // * |alternative_protocol == kProtoHTTP2| means that the Job can pool to an
157 // existing SpdySession, or bind to a idle TCP socket. In the latter case,
158 // if the socket does not use HTTP/2, then the Job fails.
159 // * |alternative_protocol == kProtoQUIC| means that the Job can pool to an
160 // existing QUIC connection or open a new one.
161 // Note that this can be overwritten by using a QUIC proxy, or by setting
xunjieli 2017/06/14 18:28:01 Just to be explicit. Could you specify that the QU
Bence 2017/06/14 19:33:30 It's good that you bring it up: in fact it is prox
162 // HttpNetworkSession::Params::origins_to_force_quic_on.
163 //
164 // If |alternative_proxy_server| is a valid proxy server, then the Job will
165 // use that instead of using ProxyService for proxy resolution. Further, if
166 // |alternative_proxy_server| is a valid but bad proxy, then fallback proxies
167 // are not used. It is illegal to call this constructor with a valid
168 // |alternative_proxy_server| and an |alternate_protocol| different from
169 // kProtoUnknown.
151 Job(Delegate* delegate, 170 Job(Delegate* delegate,
152 JobType job_type, 171 JobType job_type,
153 HttpNetworkSession* session, 172 HttpNetworkSession* session,
154 const HttpRequestInfo& request_info, 173 const HttpRequestInfo& request_info,
155 RequestPriority priority, 174 RequestPriority priority,
156 const ProxyInfo& proxy_info, 175 const ProxyInfo& proxy_info,
157 const SSLConfig& server_ssl_config, 176 const SSLConfig& server_ssl_config,
158 const SSLConfig& proxy_ssl_config, 177 const SSLConfig& proxy_ssl_config,
159 HostPortPair destination, 178 HostPortPair destination,
160 GURL origin_url, 179 GURL origin_url,
161 bool enable_ip_based_pooling, 180 NextProto alternative_protocol,
162 NetLog* net_log);
163
164 // Constructor for the alternative Job. The Job is owned by |delegate|, hence
165 // |delegate| is valid for the lifetime of the Job. If |alternative_service|
166 // is initialized, then the Job will use the alternative service. On the
167 // other hand, if |alternative_proxy_server| is a valid proxy server, then the
168 // job will use that instead of using ProxyService for proxy resolution.
169 // Further, if |alternative_proxy_server| is a valid but bad proxy, then
170 // fallback proxies are not used. It is illegal to call this with an
171 // initialized |alternative_service|, and a valid |alternative_proxy_server|.
172 Job(Delegate* delegate,
173 JobType job_type,
174 HttpNetworkSession* session,
175 const HttpRequestInfo& request_info,
176 RequestPriority priority,
177 const ProxyInfo& proxy_info,
178 const SSLConfig& server_ssl_config,
179 const SSLConfig& proxy_ssl_config,
180 HostPortPair destination,
181 GURL origin_url,
182 AlternativeService alternative_service,
183 const ProxyServer& alternative_proxy_server, 181 const ProxyServer& alternative_proxy_server,
184 bool enable_ip_based_pooling, 182 bool enable_ip_based_pooling,
185 NetLog* net_log); 183 NetLog* net_log);
186 virtual ~Job(); 184 virtual ~Job();
187 185
188 // Start initiates the process of creating a new HttpStream. 186 // Start initiates the process of creating a new HttpStream.
189 // |delegate_| will be notified upon completion. 187 // |delegate_| will be notified upon completion.
190 void Start(HttpStreamRequest::StreamType stream_type); 188 void Start(HttpStreamRequest::StreamType stream_type);
191 189
192 // Preconnect will attempt to request |num_streams| sockets from the 190 // Preconnect will attempt to request |num_streams| sockets from the
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 // Returns the estimated memory usage in bytes. 222 // Returns the estimated memory usage in bytes.
225 size_t EstimateMemoryUsage() const; 223 size_t EstimateMemoryUsage() const;
226 224
227 bool is_waiting() const { return next_state_ == STATE_WAIT_COMPLETE; } 225 bool is_waiting() const { return next_state_ == STATE_WAIT_COMPLETE; }
228 const SSLConfig& server_ssl_config() const; 226 const SSLConfig& server_ssl_config() const;
229 const SSLConfig& proxy_ssl_config() const; 227 const SSLConfig& proxy_ssl_config() const;
230 const ProxyInfo& proxy_info() const; 228 const ProxyInfo& proxy_info() const;
231 229
232 JobType job_type() const { return job_type_; } 230 JobType job_type() const { return job_type_; }
233 231
234 const AlternativeService alternative_service() const {
235 return alternative_service_;
236 }
237
238 const ProxyServer alternative_proxy_server() const { 232 const ProxyServer alternative_proxy_server() const {
239 return alternative_proxy_server_; 233 return alternative_proxy_server_;
240 } 234 }
241 235
242 bool using_existing_quic_session() const { 236 bool using_existing_quic_session() const {
243 return using_existing_quic_session_; 237 return using_existing_quic_session_;
244 } 238 }
245 239
246 bool should_reconsider_proxy() const { return should_reconsider_proxy_; } 240 bool should_reconsider_proxy() const { return should_reconsider_proxy_; }
247 241
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 int SetSpdyHttpStreamOrBidirectionalStreamImpl( 321 int SetSpdyHttpStreamOrBidirectionalStreamImpl(
328 base::WeakPtr<SpdySession> session, 322 base::WeakPtr<SpdySession> session,
329 bool direct); 323 bool direct);
330 324
331 // Returns to STATE_INIT_CONNECTION and resets some state. 325 // Returns to STATE_INIT_CONNECTION and resets some state.
332 void ReturnToStateInitConnection(bool close_connection); 326 void ReturnToStateInitConnection(bool close_connection);
333 327
334 // Set the motivation for this request onto the underlying socket. 328 // Set the motivation for this request onto the underlying socket.
335 void SetSocketMotivation(); 329 void SetSocketMotivation();
336 330
337 // Is this a SPDY or QUIC alternative Job?
338 bool IsSpdyAlternative() const;
339 bool IsQuicAlternative() const;
340
341 // Sets several fields of |ssl_config| based on the proxy info and other 331 // Sets several fields of |ssl_config| based on the proxy info and other
342 // factors. 332 // factors.
343 void InitSSLConfig(SSLConfig* ssl_config, bool is_proxy) const; 333 void InitSSLConfig(SSLConfig* ssl_config, bool is_proxy) const;
344 334
345 // Retrieve SSLInfo from our SSL Socket. 335 // Retrieve SSLInfo from our SSL Socket.
346 // This must only be called when we are using an SSLSocket. 336 // This must only be called when we are using an SSLSocket.
347 void GetSSLInfo(SSLInfo* ssl_info); 337 void GetSSLInfo(SSLInfo* ssl_info);
348 338
339 // Called in Job constructor: should Job be forced to use QUIC.
340 static bool ShouldForceQuic(HttpNetworkSession* session,
341 const HostPortPair& destination,
342 GURL origin_url,
xunjieli 2017/06/14 18:28:01 nit: const GURL&
Bence 2017/06/14 19:33:30 Done.
343 const ProxyInfo& proxy_info);
344
349 // Called in Job constructor. Use |spdy_session_key_| after construction. 345 // Called in Job constructor. Use |spdy_session_key_| after construction.
350 SpdySessionKey GetSpdySessionKey() const; 346 static SpdySessionKey GetSpdySessionKey(bool spdy_session_direct,
347 const ProxyServer& proxy_server,
348 const GURL& origin_url,
349 PrivacyMode privacy_mode);
351 350
352 // Returns true if the current request can use an existing spdy session. 351 // Returns true if the current request can use an existing spdy session.
353 bool CanUseExistingSpdySession() const; 352 bool CanUseExistingSpdySession() const;
354 353
355 // Called when we encounter a network error that could be resolved by trying 354 // Called when we encounter a network error that could be resolved by trying
356 // a new proxy configuration. If there is another proxy configuration to try 355 // a new proxy configuration. If there is another proxy configuration to try
357 // then this method sets next_state_ appropriately and returns either OK or 356 // then this method sets next_state_ appropriately and returns either OK or
358 // ERR_IO_PENDING depending on whether or not the new proxy configuration is 357 // ERR_IO_PENDING depending on whether or not the new proxy configuration is
359 // available synchronously or asynchronously. Otherwise, the given error 358 // available synchronously or asynchronously. Otherwise, the given error
360 // code is simply returned. 359 // code is simply returned.
361 int ReconsiderProxyAfterError(int error); 360 int ReconsiderProxyAfterError(int error);
362 361
363 // Called to handle a certificate error. Stores the certificate in the 362 // Called to handle a certificate error. Stores the certificate in the
364 // allowed_bad_certs list, and checks if the error can be ignored. Returns 363 // allowed_bad_certs list, and checks if the error can be ignored. Returns
365 // OK if it can be ignored, or the error code otherwise. 364 // OK if it can be ignored, or the error code otherwise.
366 int HandleCertificateError(int error); 365 int HandleCertificateError(int error);
367 366
368 // Called to handle a client certificate request. 367 // Called to handle a client certificate request.
369 int HandleCertificateRequest(int error); 368 int HandleCertificateRequest(int error);
370 369
371 // Should we force QUIC for this stream request.
372 bool ShouldForceQuic() const;
373
374 ClientSocketPoolManager::SocketGroupType GetSocketGroup() const; 370 ClientSocketPoolManager::SocketGroupType GetSocketGroup() const;
375 371
376 void MaybeCopyConnectionAttemptsFromSocketOrHandle(); 372 void MaybeCopyConnectionAttemptsFromSocketOrHandle();
377 373
378 // Record histograms of latency until Connect() completes. 374 // Record histograms of latency until Connect() completes.
379 static void LogHttpConnectedMetrics(const ClientSocketHandle& handle); 375 static void LogHttpConnectedMetrics(const ClientSocketHandle& handle);
380 376
381 // Invoked by the transport socket pool after host resolution is complete 377 // Invoked by the transport socket pool after host resolution is complete
382 // to allow the connection to be aborted, if a matching SPDY session can 378 // to allow the connection to be aborted, if a matching SPDY session can
383 // be found. Will return ERR_SPDY_SESSION_ALREADY_EXISTS if such a 379 // be found. Will return ERR_SPDY_SESSION_ALREADY_EXISTS if such a
(...skipping 22 matching lines...) Expand all
406 State next_state_; 402 State next_state_;
407 403
408 // The server we are trying to reach, could be that of the origin or of the 404 // The server we are trying to reach, could be that of the origin or of the
409 // alternative service (after applying host mapping rules). 405 // alternative service (after applying host mapping rules).
410 const HostPortPair destination_; 406 const HostPortPair destination_;
411 407
412 // The origin url we're trying to reach. This url may be different from the 408 // The origin url we're trying to reach. This url may be different from the
413 // original request when host mapping rules are set-up. 409 // original request when host mapping rules are set-up.
414 const GURL origin_url_; 410 const GURL origin_url_;
415 411
416 // AlternativeService for this Job if this is an alternative Job.
417 const AlternativeService alternative_service_;
418
419 // Alternative proxy server that should be used by |this| to fetch the 412 // Alternative proxy server that should be used by |this| to fetch the
420 // request. 413 // request.
421 const ProxyServer alternative_proxy_server_; 414 const ProxyServer alternative_proxy_server_;
422 415
423 // Enable pooling to a SpdySession with matching IP and certificate 416 // Enable pooling to a SpdySession with matching IP and certificate
424 // even if the SpdySessionKey is different. 417 // even if the SpdySessionKey is different.
425 const bool enable_ip_based_pooling_; 418 const bool enable_ip_based_pooling_;
426 419
427 // Unowned. |this| job is owned by |delegate_|. 420 // Unowned. |this| job is owned by |delegate_|.
428 Delegate* const delegate_; 421 Delegate* const delegate_;
429 422
430 const JobType job_type_; 423 const JobType job_type_;
431 424
432 // True if handling a HTTPS request. 425 // True if handling a HTTPS request.
433 const bool using_ssl_; 426 const bool using_ssl_;
434 427
435 // True if this network transaction is using SPDY instead of HTTP. 428 // True if Job uses QUIC.
429 const bool using_quic_;
430
431 // True if Alternative Service protocol field requires that HTTP/2 is used.
432 // In this case, Job fails if it cannot pool to an existing SpdySession and
433 // the server does not negotiate HTTP/2 on a new socket.
434 const bool expect_spdy_;
435
436 // True if Job actually uses HTTP/2.
436 bool using_spdy_; 437 bool using_spdy_;
437 438
438 // True if this network transaction is using QUIC instead of HTTP.
439 bool using_quic_;
440
441 // True if this job might succeed with a different proxy config. 439 // True if this job might succeed with a different proxy config.
442 bool should_reconsider_proxy_; 440 bool should_reconsider_proxy_;
443 441
444 QuicStreamRequest quic_request_; 442 QuicStreamRequest quic_request_;
445 443
446 // True if this job used an existing QUIC session. 444 // True if this job used an existing QUIC session.
447 bool using_existing_quic_session_; 445 bool using_existing_quic_session_;
448 446
449 // True when the tunnel is in the process of being established - we can't 447 // True when the tunnel is in the process of being established - we can't
450 // read from the socket until the tunnel is done. 448 // read from the socket until the tunnel is done.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 HttpStreamFactoryImpl::Job::Delegate* delegate, 508 HttpStreamFactoryImpl::Job::Delegate* delegate,
511 HttpStreamFactoryImpl::JobType job_type, 509 HttpStreamFactoryImpl::JobType job_type,
512 HttpNetworkSession* session, 510 HttpNetworkSession* session,
513 const HttpRequestInfo& request_info, 511 const HttpRequestInfo& request_info,
514 RequestPriority priority, 512 RequestPriority priority,
515 const ProxyInfo& proxy_info, 513 const ProxyInfo& proxy_info,
516 const SSLConfig& server_ssl_config, 514 const SSLConfig& server_ssl_config,
517 const SSLConfig& proxy_ssl_config, 515 const SSLConfig& proxy_ssl_config,
518 HostPortPair destination, 516 HostPortPair destination,
519 GURL origin_url, 517 GURL origin_url,
520 AlternativeService alternative_service, 518 NextProto alternative_protocol,
521 bool enable_ip_based_pooling, 519 bool enable_ip_based_pooling,
522 NetLog* net_log); 520 NetLog* net_log);
523 521
524 virtual std::unique_ptr<HttpStreamFactoryImpl::Job> CreateAltProxyJob( 522 virtual std::unique_ptr<HttpStreamFactoryImpl::Job> CreateAltProxyJob(
525 HttpStreamFactoryImpl::Job::Delegate* delegate, 523 HttpStreamFactoryImpl::Job::Delegate* delegate,
526 HttpStreamFactoryImpl::JobType job_type, 524 HttpStreamFactoryImpl::JobType job_type,
527 HttpNetworkSession* session, 525 HttpNetworkSession* session,
528 const HttpRequestInfo& request_info, 526 const HttpRequestInfo& request_info,
529 RequestPriority priority, 527 RequestPriority priority,
530 const ProxyInfo& proxy_info, 528 const ProxyInfo& proxy_info,
531 const SSLConfig& server_ssl_config, 529 const SSLConfig& server_ssl_config,
532 const SSLConfig& proxy_ssl_config, 530 const SSLConfig& proxy_ssl_config,
533 HostPortPair destination, 531 HostPortPair destination,
534 GURL origin_url, 532 GURL origin_url,
535 const ProxyServer& alternative_proxy_server, 533 const ProxyServer& alternative_proxy_server,
536 bool enable_ip_based_pooling, 534 bool enable_ip_based_pooling,
537 NetLog* net_log); 535 NetLog* net_log);
538 }; 536 };
539 537
540 } // namespace net 538 } // namespace net
541 539
542 #endif // NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_ 540 #endif // NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_
OLDNEW
« no previous file with comments | « no previous file | net/http/http_stream_factory_impl_job.cc » ('j') | net/http/http_stream_factory_impl_job.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698