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_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 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 | 228 |
229 bool is_waiting() const { return next_state_ == STATE_WAIT_COMPLETE; } | 229 bool is_waiting() const { return next_state_ == STATE_WAIT_COMPLETE; } |
230 const SSLConfig& server_ssl_config() const; | 230 const SSLConfig& server_ssl_config() const; |
231 const SSLConfig& proxy_ssl_config() const; | 231 const SSLConfig& proxy_ssl_config() const; |
232 const ProxyInfo& proxy_info() const; | 232 const ProxyInfo& proxy_info() const; |
233 | 233 |
234 // Called to indicate that this job succeeded, and some other jobs | 234 // Called to indicate that this job succeeded, and some other jobs |
235 // will be orphaned. | 235 // will be orphaned. |
236 void ReportJobSucceededForRequest(); | 236 void ReportJobSucceededForRequest(); |
237 | 237 |
238 // Marks that the other |job| has completed. | 238 JobType job_type() const { return job_type_; } |
239 virtual void MarkOtherJobComplete(const Job& job); | |
240 | 239 |
241 JobType job_type() const { return job_type_; } | 240 const AlternativeService alternative_service() const { |
| 241 return alternative_service_; |
| 242 } |
| 243 |
| 244 const ProxyServer alternative_proxy_server() const { |
| 245 return alternative_proxy_server_; |
| 246 } |
242 | 247 |
243 private: | 248 private: |
244 friend class HttpStreamFactoryImplJobPeer; | 249 friend class HttpStreamFactoryImplJobPeer; |
245 | 250 |
246 enum State { | 251 enum State { |
247 STATE_START, | 252 STATE_START, |
248 STATE_RESOLVE_PROXY, | 253 STATE_RESOLVE_PROXY, |
249 STATE_RESOLVE_PROXY_COMPLETE, | 254 STATE_RESOLVE_PROXY_COMPLETE, |
250 | 255 |
251 // Note that when Alternate-Protocol says we can connect to an alternate | 256 // Note that when Alternate-Protocol says we can connect to an alternate |
(...skipping 22 matching lines...) Expand all Loading... |
274 STATE_RESTART_TUNNEL_AUTH, | 279 STATE_RESTART_TUNNEL_AUTH, |
275 STATE_RESTART_TUNNEL_AUTH_COMPLETE, | 280 STATE_RESTART_TUNNEL_AUTH_COMPLETE, |
276 STATE_CREATE_STREAM, | 281 STATE_CREATE_STREAM, |
277 STATE_CREATE_STREAM_COMPLETE, | 282 STATE_CREATE_STREAM_COMPLETE, |
278 STATE_DRAIN_BODY_FOR_AUTH_RESTART, | 283 STATE_DRAIN_BODY_FOR_AUTH_RESTART, |
279 STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE, | 284 STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE, |
280 STATE_DONE, | 285 STATE_DONE, |
281 STATE_NONE | 286 STATE_NONE |
282 }; | 287 }; |
283 | 288 |
284 enum JobStatus { | |
285 STATUS_RUNNING, | |
286 STATUS_FAILED, | |
287 STATUS_BROKEN, | |
288 STATUS_SUCCEEDED | |
289 }; | |
290 | |
291 void OnStreamReadyCallback(); | 289 void OnStreamReadyCallback(); |
292 void OnBidirectionalStreamImplReadyCallback(); | 290 void OnBidirectionalStreamImplReadyCallback(); |
293 void OnWebSocketHandshakeStreamReadyCallback(); | 291 void OnWebSocketHandshakeStreamReadyCallback(); |
294 // This callback function is called when a new SPDY session is created. | 292 // This callback function is called when a new SPDY session is created. |
295 void OnNewSpdySessionReadyCallback(); | 293 void OnNewSpdySessionReadyCallback(); |
296 void OnStreamFailedCallback(int result); | 294 void OnStreamFailedCallback(int result); |
297 void OnCertificateErrorCallback(int result, const SSLInfo& ssl_info); | 295 void OnCertificateErrorCallback(int result, const SSLInfo& ssl_info); |
298 void OnNeedsProxyAuthCallback(const HttpResponseInfo& response_info, | 296 void OnNeedsProxyAuthCallback(const HttpResponseInfo& response_info, |
299 HttpAuthController* auth_controller); | 297 HttpAuthController* auth_controller); |
300 void OnNeedsClientAuthCallback(SSLCertRequestInfo* cert_info); | 298 void OnNeedsClientAuthCallback(SSLCertRequestInfo* cert_info); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 | 371 |
374 // Called to handle a client certificate request. | 372 // Called to handle a client certificate request. |
375 int HandleCertificateRequest(int error); | 373 int HandleCertificateRequest(int error); |
376 | 374 |
377 // Moves this stream request into SPDY mode. | 375 // Moves this stream request into SPDY mode. |
378 void SwitchToSpdyMode(); | 376 void SwitchToSpdyMode(); |
379 | 377 |
380 // Should we force QUIC for this stream request. | 378 // Should we force QUIC for this stream request. |
381 bool ShouldForceQuic() const; | 379 bool ShouldForceQuic() const; |
382 | 380 |
383 void MaybeMarkAlternativeServiceBroken(); | |
384 | |
385 // May notify proxy delegate that the alternative proxy server is broken. The | |
386 // alternative proxy server is considered as broken if the alternative proxy | |
387 // server job failed, but the main job was successful. | |
388 void MaybeNotifyAlternativeProxyServerBroken() const; | |
389 | |
390 ClientSocketPoolManager::SocketGroupType GetSocketGroup() const; | 381 ClientSocketPoolManager::SocketGroupType GetSocketGroup() const; |
391 | 382 |
392 void MaybeCopyConnectionAttemptsFromSocketOrHandle(); | 383 void MaybeCopyConnectionAttemptsFromSocketOrHandle(); |
393 | 384 |
394 // Record histograms of latency until Connect() completes. | 385 // Record histograms of latency until Connect() completes. |
395 static void LogHttpConnectedMetrics(const ClientSocketHandle& handle); | 386 static void LogHttpConnectedMetrics(const ClientSocketHandle& handle); |
396 | 387 |
397 // Invoked by the transport socket pool after host resolution is complete | 388 // Invoked by the transport socket pool after host resolution is complete |
398 // to allow the connection to be aborted, if a matching SPDY session can | 389 // to allow the connection to be aborted, if a matching SPDY session can |
399 // be found. Will return ERR_SPDY_SESSION_ALREADY_EXISTS if such a | 390 // be found. Will return ERR_SPDY_SESSION_ALREADY_EXISTS if such a |
(...skipping 22 matching lines...) Expand all Loading... |
422 // alternative service (after applying host mapping rules). | 413 // alternative service (after applying host mapping rules). |
423 const HostPortPair destination_; | 414 const HostPortPair destination_; |
424 | 415 |
425 // The origin url we're trying to reach. This url may be different from the | 416 // The origin url we're trying to reach. This url may be different from the |
426 // original request when host mapping rules are set-up. | 417 // original request when host mapping rules are set-up. |
427 const GURL origin_url_; | 418 const GURL origin_url_; |
428 | 419 |
429 // AlternativeService for this Job if this is an alternative Job. | 420 // AlternativeService for this Job if this is an alternative Job. |
430 const AlternativeService alternative_service_; | 421 const AlternativeService alternative_service_; |
431 | 422 |
432 // AlternativeService for the other Job if this is not an alternative Job. | |
433 AlternativeService other_job_alternative_service_; | |
434 | |
435 // Alternative proxy server that should be used by |this| to fetch the | 423 // Alternative proxy server that should be used by |this| to fetch the |
436 // request. | 424 // request. |
437 const ProxyServer alternative_proxy_server_; | 425 const ProxyServer alternative_proxy_server_; |
438 | 426 |
439 // Alternative proxy server for the other job. | |
440 ProxyServer other_job_alternative_proxy_server_; | |
441 | |
442 // Unowned. |this| job is owned by |delegate_|. | 427 // Unowned. |this| job is owned by |delegate_|. |
443 Delegate* delegate_; | 428 Delegate* delegate_; |
444 | 429 |
445 const JobType job_type_; | 430 const JobType job_type_; |
446 | 431 |
447 // True if handling a HTTPS request, or using SPDY with SSL | 432 // True if handling a HTTPS request, or using SPDY with SSL |
448 bool using_ssl_; | 433 bool using_ssl_; |
449 | 434 |
450 // True if this network transaction is using SPDY instead of HTTP. | 435 // True if this network transaction is using SPDY instead of HTTP. |
451 bool using_spdy_; | 436 bool using_spdy_; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 | 471 |
487 // Initialized when we create a new SpdySession. | 472 // Initialized when we create a new SpdySession. |
488 base::WeakPtr<SpdySession> new_spdy_session_; | 473 base::WeakPtr<SpdySession> new_spdy_session_; |
489 | 474 |
490 // Initialized when we have an existing SpdySession. | 475 // Initialized when we have an existing SpdySession. |
491 base::WeakPtr<SpdySession> existing_spdy_session_; | 476 base::WeakPtr<SpdySession> existing_spdy_session_; |
492 | 477 |
493 // Only used if |new_spdy_session_| is non-NULL. | 478 // Only used if |new_spdy_session_| is non-NULL. |
494 bool spdy_session_direct_; | 479 bool spdy_session_direct_; |
495 | 480 |
496 JobStatus job_status_; | |
497 JobStatus other_job_status_; | |
498 | |
499 // Type of stream that is requested. | 481 // Type of stream that is requested. |
500 HttpStreamRequest::StreamType stream_type_; | 482 HttpStreamRequest::StreamType stream_type_; |
501 | 483 |
502 base::WeakPtrFactory<Job> ptr_factory_; | 484 base::WeakPtrFactory<Job> ptr_factory_; |
503 | 485 |
504 DISALLOW_COPY_AND_ASSIGN(Job); | 486 DISALLOW_COPY_AND_ASSIGN(Job); |
505 }; | 487 }; |
506 | 488 |
507 // Factory for creating Jobs. | 489 // Factory for creating Jobs. |
508 class HttpStreamFactoryImpl::JobFactory { | 490 class HttpStreamFactoryImpl::JobFactory { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 const SSLConfig& server_ssl_config, | 529 const SSLConfig& server_ssl_config, |
548 const SSLConfig& proxy_ssl_config, | 530 const SSLConfig& proxy_ssl_config, |
549 HostPortPair destination, | 531 HostPortPair destination, |
550 GURL origin_url, | 532 GURL origin_url, |
551 NetLog* net_log) = 0; | 533 NetLog* net_log) = 0; |
552 }; | 534 }; |
553 | 535 |
554 } // namespace net | 536 } // namespace net |
555 | 537 |
556 #endif // NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_ | 538 #endif // NET_HTTP_HTTP_STREAM_FACTORY_IMPL_JOB_H_ |
OLD | NEW |