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_URL_REQUEST_URL_REQUEST_H_ | 5 #ifndef NET_URL_REQUEST_URL_REQUEST_H_ |
6 #define NET_URL_REQUEST_URL_REQUEST_H_ | 6 #define NET_URL_REQUEST_URL_REQUEST_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 // indicating what's wrong with the certificate. | 189 // indicating what's wrong with the certificate. |
190 // If |fatal| is true then the host in question demands a higher level | 190 // If |fatal| is true then the host in question demands a higher level |
191 // of security (due e.g. to HTTP Strict Transport Security, user | 191 // of security (due e.g. to HTTP Strict Transport Security, user |
192 // preference, or built-in policy). In this case, errors must not be | 192 // preference, or built-in policy). In this case, errors must not be |
193 // bypassable by the user. | 193 // bypassable by the user. |
194 virtual void OnSSLCertificateError(URLRequest* request, | 194 virtual void OnSSLCertificateError(URLRequest* request, |
195 const SSLInfo& ssl_info, | 195 const SSLInfo& ssl_info, |
196 bool fatal); | 196 bool fatal); |
197 | 197 |
198 // After calling Start(), the delegate will receive an OnResponseStarted | 198 // After calling Start(), the delegate will receive an OnResponseStarted |
199 // callback when the request has completed. If an error occurred, the | 199 // callback when the request has completed. |net_error| will be set to OK |
200 // request->status() will be set. On success, all redirects have been | 200 // or an actual net error. On success, all redirects have been |
201 // followed and the final response is beginning to arrive. At this point, | 201 // followed and the final response is beginning to arrive. At this point, |
202 // meta data about the response is available, including for example HTTP | 202 // meta data about the response is available, including for example HTTP |
203 // response headers if this is a request for a HTTP resource. | 203 // response headers if this is a request for a HTTP resource. |
204 virtual void OnResponseStarted(URLRequest* request) = 0; | 204 virtual void OnResponseStarted(URLRequest* request, int net_error); |
205 // Deprecated. | |
206 // TODO(maksims): Remove this; | |
207 virtual void OnResponseStarted(URLRequest* request); | |
205 | 208 |
206 // Called when the a Read of the response body is completed after an | 209 // Called when the a Read of the response body is completed after an |
207 // IO_PENDING status from a Read() call. | 210 // IO_PENDING status from a Read() call. |
208 // The data read is filled into the buffer which the caller passed | 211 // The data read is filled into the buffer which the caller passed |
209 // to Read() previously. | 212 // to Read() previously. |
210 // | 213 // |
211 // If an error occurred, request->status() will contain the error, | 214 // If an error occurred, |bytes_read| will be set to the error. |
212 // and bytes read will be -1. | |
213 virtual void OnReadCompleted(URLRequest* request, int bytes_read) = 0; | 215 virtual void OnReadCompleted(URLRequest* request, int bytes_read) = 0; |
214 | 216 |
217 // Used to call OnResponseStarted(). There are two the same methods. The one | |
218 // that has |net_error| in arguments is a new one. This method is used to | |
219 // distinguish whether clients have already overridden new OnResponseStarted | |
220 // and call that one instead of old one without |net_error|. | |
221 // | |
222 // The method will be removed as soon as all clients are modified. | |
223 void NotifyOnResponseStarted(URLRequest* request, int net_error); | |
mmenke
2016/08/30 22:09:12
This method doesn't exist any more.
maksims (do not use this acc)
2016/08/31 11:16:59
Done.
| |
224 | |
215 protected: | 225 protected: |
216 virtual ~Delegate() {} | 226 virtual ~Delegate() {} |
227 | |
228 private: | |
229 // Used to distinguish whether modified a method is overridden by clients. | |
230 bool implemented_; | |
mmenke
2016/08/30 22:09:12
Not used.
maksims (do not use this acc)
2016/08/31 11:16:59
Done.
| |
217 }; | 231 }; |
218 | 232 |
219 // If destroyed after Start() has been called but while IO is pending, | 233 // If destroyed after Start() has been called but while IO is pending, |
220 // then the request will be effectively canceled and the delegate | 234 // then the request will be effectively canceled and the delegate |
221 // will not have any more of its methods called. | 235 // will not have any more of its methods called. |
222 ~URLRequest() override; | 236 ~URLRequest() override; |
223 | 237 |
224 // Changes the default cookie policy from allowing all cookies to blocking all | 238 // Changes the default cookie policy from allowing all cookies to blocking all |
225 // cookies. Embedders that want to implement a more flexible policy should | 239 // cookies. Embedders that want to implement a more flexible policy should |
226 // change the default to blocking all cookies, and provide a NetworkDelegate | 240 // change the default to blocking all cookies, and provide a NetworkDelegate |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
517 void SetLoadFlags(int flags); | 531 void SetLoadFlags(int flags); |
518 | 532 |
519 // Returns true if the request is "pending" (i.e., if Start() has been called, | 533 // Returns true if the request is "pending" (i.e., if Start() has been called, |
520 // and the response has not yet been called). | 534 // and the response has not yet been called). |
521 bool is_pending() const { return is_pending_; } | 535 bool is_pending() const { return is_pending_; } |
522 | 536 |
523 // Returns true if the request is in the process of redirecting to a new | 537 // Returns true if the request is in the process of redirecting to a new |
524 // URL but has not yet initiated the new request. | 538 // URL but has not yet initiated the new request. |
525 bool is_redirecting() const { return is_redirecting_; } | 539 bool is_redirecting() const { return is_redirecting_; } |
526 | 540 |
527 // Returns the error status of the request. | |
528 const URLRequestStatus& status() const { return status_; } | |
529 | |
530 // Returns a globally unique identifier for this request. | 541 // Returns a globally unique identifier for this request. |
531 uint64_t identifier() const { return identifier_; } | 542 uint64_t identifier() const { return identifier_; } |
532 | 543 |
533 // This method is called to start the request. The delegate will receive | 544 // This method is called to start the request. The delegate will receive |
534 // a OnResponseStarted callback when the request is started. The request | 545 // a OnResponseStarted callback when the request is started. The request |
535 // must have a delegate set before this method is called. | 546 // must have a delegate set before this method is called. |
536 void Start(); | 547 void Start(); |
537 | 548 |
538 // This method may be called at any time after Start() has been called to | 549 // This method may be called at any time after Start() has been called to |
539 // cancel the request. This method may be called many times, and it has | 550 // cancel the request. This method may be called many times, and it has |
540 // no effect once the response has completed. It is guaranteed that no | 551 // no effect once the response has completed. It is guaranteed that no |
541 // methods of the delegate will be called after the request has been | 552 // methods of the delegate will be called after the request has been |
542 // cancelled, except that this may call the delegate's OnReadCompleted() | 553 // cancelled, except that this may call the delegate's OnReadCompleted() |
543 // during the call to Cancel itself. | 554 // during the call to Cancel itself. Returns |ERR_ABORTED| or other net error |
544 void Cancel(); | 555 // if there was one. |
556 int Cancel(); | |
545 | 557 |
546 // Cancels the request and sets the error to |error| (see net_error_list.h | 558 // Cancels the request and sets the error to |error| (see net_error_list.h |
mmenke
2016/08/30 22:09:12
Let's improve this comment. How about "Cancels th
maksims (do not use this acc)
2016/08/31 11:16:59
Sounds reasonable!
| |
547 // for values). | 559 // for values). Returns set error. |
mmenke
2016/08/30 22:09:12
"Returns set error." -> "Returns final network err
maksims (do not use this acc)
2016/08/31 11:16:59
Done.
| |
548 void CancelWithError(int error); | 560 int CancelWithError(int error); |
549 | 561 |
550 // Cancels the request and sets the error to |error| (see net_error_list.h | 562 // Cancels the request and sets the error to |error| (see net_error_list.h |
551 // for values) and attaches |ssl_info| as the SSLInfo for that request. This | 563 // for values) and attaches |ssl_info| as the SSLInfo for that request. This |
552 // is useful to attach a certificate and certificate error to a canceled | 564 // is useful to attach a certificate and certificate error to a canceled |
553 // request. | 565 // request. |
554 void CancelWithSSLError(int error, const SSLInfo& ssl_info); | 566 void CancelWithSSLError(int error, const SSLInfo& ssl_info); |
555 | 567 |
556 // Read initiates an asynchronous read from the response, and must only | 568 // Read initiates an asynchronous read from the response, and must only |
557 // be called after the OnResponseStarted callback is received with a | 569 // be called after the OnResponseStarted callback is received with a net::OK. |
558 // successful status. | 570 // If data is available, length and the data will be returned immediately. |
559 // If data is available, Read will return true, and the data and length will | 571 // If data is not available, Read returns net::ERR_IO_PENDING, and an |
560 // be returned immediately. If data is not available, Read returns false, | 572 // asynchronous Read is initiated. The Read is finished when the caller |
561 // and an asynchronous Read is initiated. The Read is finished when | 573 // receives the OnReadComplete callback. Unless the request was cancelled, |
562 // the caller receives the OnReadComplete callback. Unless the request was | 574 // OnReadComplete will always be called on async completion with the result of |
563 // cancelled, OnReadComplete will always be called, even if the read failed. | 575 // the read. |
576 // | |
577 // If an error occurs during synchronous read, net error is | |
578 // returned immediately, If an error occurs asynchronously, OnReadComplete | |
579 // callback will be called with the net error code instead. | |
mmenke
2016/08/30 22:09:12
Let's merge these two paragraphs. Suggested text:
maksims (do not use this acc)
2016/08/31 11:16:59
Done.
| |
564 // | 580 // |
565 // The buf parameter is a buffer to receive the data. If the operation | 581 // The buf parameter is a buffer to receive the data. If the operation |
566 // completes asynchronously, the implementation will reference the buffer | 582 // completes asynchronously, the implementation will reference the buffer |
567 // until OnReadComplete is called. The buffer must be at least max_bytes in | 583 // until OnReadComplete is called. The buffer must be at least max_bytes in |
568 // length. | 584 // length. |
569 // | 585 // |
570 // The max_bytes parameter is the maximum number of bytes to read. | 586 // The max_bytes parameter is the maximum number of bytes to read. |
571 // | 587 int Read(IOBuffer* buf, int max_bytes); |
572 // The bytes_read parameter is an output parameter containing the | 588 // Deprecated. |
573 // the number of bytes read. A value of 0 indicates that there is no | 589 // TODO(maksims): Remove this. |
574 // more data available to read from the stream. | |
575 // | |
576 // If a read error occurs, Read returns false and the request->status | |
577 // will be set to an error. | |
578 bool Read(IOBuffer* buf, int max_bytes, int* bytes_read); | 590 bool Read(IOBuffer* buf, int max_bytes, int* bytes_read); |
579 | 591 |
580 // If this request is being cached by the HTTP cache, stop subsequent caching. | 592 // If this request is being cached by the HTTP cache, stop subsequent caching. |
581 // Note that this method has no effect on other (simultaneous or not) requests | 593 // Note that this method has no effect on other (simultaneous or not) requests |
582 // for the same resource. The typical example is a request that results in | 594 // for the same resource. The typical example is a request that results in |
583 // the data being stored to disk (downloaded instead of rendered) so we don't | 595 // the data being stored to disk (downloaded instead of rendered) so we don't |
584 // want to store it twice. | 596 // want to store it twice. |
585 void StopCaching(); | 597 void StopCaching(); |
586 | 598 |
587 // This method may be called to follow a redirect that was deferred in | 599 // This method may be called to follow a redirect that was deferred in |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
641 // the more general response_info() is available, even though it is a subset. | 653 // the more general response_info() is available, even though it is a subset. |
642 const HostPortPair& proxy_server() const { | 654 const HostPortPair& proxy_server() const { |
643 return proxy_server_; | 655 return proxy_server_; |
644 } | 656 } |
645 | 657 |
646 // Gets the connection attempts made in the process of servicing this | 658 // Gets the connection attempts made in the process of servicing this |
647 // URLRequest. Only guaranteed to be valid if called after the request fails | 659 // URLRequest. Only guaranteed to be valid if called after the request fails |
648 // or after the response headers are received. | 660 // or after the response headers are received. |
649 void GetConnectionAttempts(ConnectionAttempts* out) const; | 661 void GetConnectionAttempts(ConnectionAttempts* out) const; |
650 | 662 |
663 // Returns the error status of the request. | |
664 // Do not use! Going to be protected! | |
665 const URLRequestStatus& status() const { return status_; } | |
666 | |
651 protected: | 667 protected: |
652 // Allow the URLRequestJob class to control the is_pending() flag. | 668 // Allow the URLRequestJob class to control the is_pending() flag. |
653 void set_is_pending(bool value) { is_pending_ = value; } | 669 void set_is_pending(bool value) { is_pending_ = value; } |
654 | 670 |
655 // Allow the URLRequestJob class to set our status too. | 671 // Allow the URLRequestJob class to set our status too. |
656 void set_status(URLRequestStatus status); | 672 void set_status(URLRequestStatus status); |
657 | 673 |
658 // Allow the URLRequestJob to redirect this request. Returns OK if | 674 // Allow the URLRequestJob to redirect this request. Returns OK if |
659 // successful, otherwise an error code is returned. | 675 // successful, otherwise an error code is returned. |
660 int Redirect(const RedirectInfo& redirect_info); | 676 int Redirect(const RedirectInfo& redirect_info); |
661 | 677 |
662 // Called by URLRequestJob to allow interception when a redirect occurs. | 678 // Called by URLRequestJob to allow interception when a redirect occurs. |
663 void NotifyReceivedRedirect(const RedirectInfo& redirect_info, | 679 void NotifyReceivedRedirect(const RedirectInfo& redirect_info, |
664 bool* defer_redirect); | 680 bool* defer_redirect); |
665 | 681 |
666 // Allow an interceptor's URLRequestJob to restart this request. | 682 // Allow an interceptor's URLRequestJob to restart this request. |
667 // Should only be called if the original job has not started a response. | 683 // Should only be called if the original job has not started a response. |
668 void Restart(); | 684 void Restart(); |
669 | 685 |
670 private: | 686 private: |
671 friend class URLRequestJob; | 687 friend class URLRequestJob; |
672 friend class URLRequestContext; | 688 friend class URLRequestContext; |
673 | 689 |
690 // For testing purposes. | |
691 // TODO(maksims): Remove this. | |
692 friend class TestNetworkDelegate; | |
693 | |
674 // URLRequests are always created by calling URLRequestContext::CreateRequest. | 694 // URLRequests are always created by calling URLRequestContext::CreateRequest. |
675 // | 695 // |
676 // If no network delegate is passed in, will use the ones from the | 696 // If no network delegate is passed in, will use the ones from the |
677 // URLRequestContext. | 697 // URLRequestContext. |
678 URLRequest(const GURL& url, | 698 URLRequest(const GURL& url, |
679 RequestPriority priority, | 699 RequestPriority priority, |
680 Delegate* delegate, | 700 Delegate* delegate, |
681 const URLRequestContext* context, | 701 const URLRequestContext* context, |
682 NetworkDelegate* network_delegate); | 702 NetworkDelegate* network_delegate); |
683 | 703 |
(...skipping 11 matching lines...) Expand all Loading... | |
695 // happens when following a HTTP redirect. | 715 // happens when following a HTTP redirect. |
696 void RestartWithJob(URLRequestJob* job); | 716 void RestartWithJob(URLRequestJob* job); |
697 void PrepareToRestart(); | 717 void PrepareToRestart(); |
698 | 718 |
699 // Detaches the job from this request in preparation for this object going | 719 // Detaches the job from this request in preparation for this object going |
700 // away or the job being replaced. The job will not call us back when it has | 720 // away or the job being replaced. The job will not call us back when it has |
701 // been orphaned. | 721 // been orphaned. |
702 void OrphanJob(); | 722 void OrphanJob(); |
703 | 723 |
704 // Cancels the request and set the error and ssl info for this request to the | 724 // Cancels the request and set the error and ssl info for this request to the |
705 // passed values. | 725 // passed values. Returns the error that was set. |
706 void DoCancel(int error, const SSLInfo& ssl_info); | 726 int DoCancel(int error, const SSLInfo& ssl_info); |
707 | 727 |
708 // Called by the URLRequestJob when the headers are received, before any other | 728 // Called by the URLRequestJob when the headers are received, before any other |
709 // method, to allow caching of load timing information. | 729 // method, to allow caching of load timing information. |
710 void OnHeadersComplete(); | 730 void OnHeadersComplete(); |
711 | 731 |
712 // Notifies the network delegate that the request has been completed. | 732 // Notifies the network delegate that the request has been completed. |
713 // This does not imply a successful completion. Also a canceled request is | 733 // This does not imply a successful completion. Also a canceled request is |
714 // considered completed. | 734 // considered completed. |
715 void NotifyRequestCompleted(); | 735 void NotifyRequestCompleted(); |
716 | 736 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
847 | 867 |
848 // The proxy server used for this request, if any. | 868 // The proxy server used for this request, if any. |
849 HostPortPair proxy_server_; | 869 HostPortPair proxy_server_; |
850 | 870 |
851 DISALLOW_COPY_AND_ASSIGN(URLRequest); | 871 DISALLOW_COPY_AND_ASSIGN(URLRequest); |
852 }; | 872 }; |
853 | 873 |
854 } // namespace net | 874 } // namespace net |
855 | 875 |
856 #endif // NET_URL_REQUEST_URL_REQUEST_H_ | 876 #endif // NET_URL_REQUEST_URL_REQUEST_H_ |
OLD | NEW |