| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // The lifetime of an instance of this class is completely controlled by the | 51 // The lifetime of an instance of this class is completely controlled by the |
| 52 // consumer, and the instance is not required to live on the heap or be | 52 // consumer, and the instance is not required to live on the heap or be |
| 53 // allocated in any special way. It is also valid to delete an URLRequest | 53 // allocated in any special way. It is also valid to delete an URLRequest |
| 54 // object during the handling of a callback to its delegate. Of course, once | 54 // object during the handling of a callback to its delegate. Of course, once |
| 55 // the URLRequest is deleted, no further callbacks to its delegate will occur. | 55 // the URLRequest is deleted, no further callbacks to its delegate will occur. |
| 56 // | 56 // |
| 57 // NOTE: All usage of all instances of this class should be on the same thread. | 57 // NOTE: All usage of all instances of this class should be on the same thread. |
| 58 // | 58 // |
| 59 class URLRequest : public base::NonThreadSafe { | 59 class URLRequest : public base::NonThreadSafe { |
| 60 public: | 60 public: |
| 61 // Callback function implemented by protocol handlers to create new jobs. |
| 62 // The factory may return NULL to indicate an error, which will cause other |
| 63 // factories to be queried. If no factory handles the request, then the |
| 64 // default job will be used. |
| 65 typedef URLRequestJob* (ProtocolFactory)(URLRequest* request, |
| 66 const std::string& scheme); |
| 67 |
| 68 // HTTP request/response header IDs (via some preprocessor fun) for use with |
| 69 // SetRequestHeaderById and GetResponseHeaderById. |
| 70 enum { |
| 71 #define HTTP_ATOM(x) HTTP_ ## x, |
| 72 #include "net/http/http_atom_list.h" |
| 73 #undef HTTP_ATOM |
| 74 }; |
| 75 |
| 61 // Derive from this class and add your own data members to associate extra | 76 // Derive from this class and add your own data members to associate extra |
| 62 // information with a URLRequest. Use GetUserData(key) and SetUserData() | 77 // information with a URLRequest. Use GetUserData(key) and SetUserData() |
| 63 class UserData { | 78 class UserData { |
| 64 public: | 79 public: |
| 65 UserData() {} | 80 UserData() {} |
| 66 virtual ~UserData() {} | 81 virtual ~UserData() {} |
| 67 }; | 82 }; |
| 68 | 83 |
| 69 // Callback function implemented by protocol handlers to create new jobs. | |
| 70 // The factory may return NULL to indicate an error, which will cause other | |
| 71 // factories to be queried. If no factory handles the request, then the | |
| 72 // default job will be used. | |
| 73 typedef URLRequestJob* (ProtocolFactory)(URLRequest* request, | |
| 74 const std::string& scheme); | |
| 75 | |
| 76 // This class handles network interception. Use with | 84 // This class handles network interception. Use with |
| 77 // (Un)RegisterRequestInterceptor. | 85 // (Un)RegisterRequestInterceptor. |
| 78 class Interceptor { | 86 class Interceptor { |
| 79 public: | 87 public: |
| 80 virtual ~Interceptor() {} | 88 virtual ~Interceptor() {} |
| 81 | 89 |
| 82 // Called for every request made. Should return a new job to handle the | 90 // Called for every request made. Should return a new job to handle the |
| 83 // request if it should be intercepted, or NULL to allow the request to | 91 // request if it should be intercepted, or NULL to allow the request to |
| 84 // be handled in the normal manner. | 92 // be handled in the normal manner. |
| 85 virtual URLRequestJob* MaybeIntercept(URLRequest* request) = 0; | 93 virtual URLRequestJob* MaybeIntercept(URLRequest* request) = 0; |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 // This method can be called after the user selects a client certificate to | 510 // This method can be called after the user selects a client certificate to |
| 503 // instruct this URLRequest to continue with the request with the | 511 // instruct this URLRequest to continue with the request with the |
| 504 // certificate. Pass NULL if the user doesn't have a client certificate. | 512 // certificate. Pass NULL if the user doesn't have a client certificate. |
| 505 void ContinueWithCertificate(net::X509Certificate* client_cert); | 513 void ContinueWithCertificate(net::X509Certificate* client_cert); |
| 506 | 514 |
| 507 // This method can be called after some error notifications to instruct this | 515 // This method can be called after some error notifications to instruct this |
| 508 // URLRequest to ignore the current error and continue with the request. To | 516 // URLRequest to ignore the current error and continue with the request. To |
| 509 // cancel the request instead, call Cancel(). | 517 // cancel the request instead, call Cancel(). |
| 510 void ContinueDespiteLastError(); | 518 void ContinueDespiteLastError(); |
| 511 | 519 |
| 512 // HTTP request/response header IDs (via some preprocessor fun) for use with | |
| 513 // SetRequestHeaderById and GetResponseHeaderById. | |
| 514 enum { | |
| 515 #define HTTP_ATOM(x) HTTP_ ## x, | |
| 516 #include "net/http/http_atom_list.h" | |
| 517 #undef HTTP_ATOM | |
| 518 }; | |
| 519 | |
| 520 // Returns true if performance profiling should be enabled on the | 520 // Returns true if performance profiling should be enabled on the |
| 521 // URLRequestJob serving this request. | 521 // URLRequestJob serving this request. |
| 522 bool enable_profiling() const { return enable_profiling_; } | 522 bool enable_profiling() const { return enable_profiling_; } |
| 523 | 523 |
| 524 void set_enable_profiling(bool profiling) { enable_profiling_ = profiling; } | 524 void set_enable_profiling(bool profiling) { enable_profiling_ = profiling; } |
| 525 | 525 |
| 526 // Used to specify the context (cookie store, cache) for this request. | 526 // Used to specify the context (cookie store, cache) for this request. |
| 527 URLRequestContext* context(); | 527 URLRequestContext* context(); |
| 528 void set_context(URLRequestContext* context); | 528 void set_context(URLRequestContext* context); |
| 529 | 529 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 561 // Called by URLRequestJob to allow interception when the final response | 561 // Called by URLRequestJob to allow interception when the final response |
| 562 // occurs. | 562 // occurs. |
| 563 void ResponseStarted(); | 563 void ResponseStarted(); |
| 564 | 564 |
| 565 // Allow an interceptor's URLRequestJob to restart this request. | 565 // Allow an interceptor's URLRequestJob to restart this request. |
| 566 // Should only be called if the original job has not started a response. | 566 // Should only be called if the original job has not started a response. |
| 567 void Restart(); | 567 void Restart(); |
| 568 | 568 |
| 569 private: | 569 private: |
| 570 friend class URLRequestJob; | 570 friend class URLRequestJob; |
| 571 typedef std::map<const void*, linked_ptr<UserData> > UserDataMap; |
| 571 | 572 |
| 572 void StartJob(URLRequestJob* job); | 573 void StartJob(URLRequestJob* job); |
| 573 | 574 |
| 574 // Restarting involves replacing the current job with a new one such as what | 575 // Restarting involves replacing the current job with a new one such as what |
| 575 // happens when following a HTTP redirect. | 576 // happens when following a HTTP redirect. |
| 576 void RestartWithJob(URLRequestJob* job); | 577 void RestartWithJob(URLRequestJob* job); |
| 577 void PrepareToRestart(); | 578 void PrepareToRestart(); |
| 578 | 579 |
| 579 // Detaches the job from this request in preparation for this object going | 580 // Detaches the job from this request in preparation for this object going |
| 580 // away or the job being replaced. The job will not call us back when it has | 581 // away or the job being replaced. The job will not call us back when it has |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 | 614 |
| 614 // The HTTP response info, lazily initialized. | 615 // The HTTP response info, lazily initialized. |
| 615 net::HttpResponseInfo response_info_; | 616 net::HttpResponseInfo response_info_; |
| 616 | 617 |
| 617 // Tells us whether the job is outstanding. This is true from the time | 618 // Tells us whether the job is outstanding. This is true from the time |
| 618 // Start() is called to the time we dispatch RequestComplete and indicates | 619 // Start() is called to the time we dispatch RequestComplete and indicates |
| 619 // whether the job is active. | 620 // whether the job is active. |
| 620 bool is_pending_; | 621 bool is_pending_; |
| 621 | 622 |
| 622 // Externally-defined data accessible by key | 623 // Externally-defined data accessible by key |
| 623 typedef std::map<const void*, linked_ptr<UserData> > UserDataMap; | |
| 624 UserDataMap user_data_; | 624 UserDataMap user_data_; |
| 625 | 625 |
| 626 // Whether to enable performance profiling on the job serving this request. | 626 // Whether to enable performance profiling on the job serving this request. |
| 627 bool enable_profiling_; | 627 bool enable_profiling_; |
| 628 | 628 |
| 629 // Number of times we're willing to redirect. Used to guard against | 629 // Number of times we're willing to redirect. Used to guard against |
| 630 // infinite redirects. | 630 // infinite redirects. |
| 631 int redirect_limit_; | 631 int redirect_limit_; |
| 632 | 632 |
| 633 // Cached value for use after we've orphaned the job handling the | 633 // Cached value for use after we've orphaned the job handling the |
| 634 // first transaction in a request involving redirects. | 634 // first transaction in a request involving redirects. |
| 635 uint64 final_upload_progress_; | 635 uint64 final_upload_progress_; |
| 636 | 636 |
| 637 // The priority level for this request. Objects like ClientSocketPool use | 637 // The priority level for this request. Objects like ClientSocketPool use |
| 638 // this to determine which URLRequest to allocate sockets to first. | 638 // this to determine which URLRequest to allocate sockets to first. |
| 639 net::RequestPriority priority_; | 639 net::RequestPriority priority_; |
| 640 | 640 |
| 641 base::debug::LeakTracker<URLRequest> leak_tracker_; | 641 base::debug::LeakTracker<URLRequest> leak_tracker_; |
| 642 | 642 |
| 643 DISALLOW_COPY_AND_ASSIGN(URLRequest); | 643 DISALLOW_COPY_AND_ASSIGN(URLRequest); |
| 644 }; | 644 }; |
| 645 | 645 |
| 646 } // namespace net | 646 } // namespace net |
| 647 | 647 |
| 648 #endif // NET_URL_REQUEST_URL_REQUEST_H_ | 648 #endif // NET_URL_REQUEST_URL_REQUEST_H_ |
| OLD | NEW |