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 3 // found in the LICENSE file. 4 5 #ifndef NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_ 6 #define NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_ 7 8 #include <string> 9 10 #include "base/memory/weak_ptr.h" 11 #include "net/base/auth.h" 12 #include "net/base/net_export.h" 13 #include "net/ftp/ftp_request_info.h" 14 #include "net/ftp/ftp_transaction.h" 15 #include "net/http/http_request_info.h" 16 #include "net/http/http_transaction.h" 17 #include "net/proxy/proxy_info.h" 18 #include "net/proxy/proxy_service.h" 19 #include "net/url_request/url_request_job.h" 20 21 namespace net { 22 23 class NetworkDelegate; 24 class FtpTransactionFactory; 25 class FtpAuthCache; 26 27 // A URLRequestJob subclass that is built on top of FtpTransaction. It 28 // provides an implementation for FTP. 29 class NET_EXPORT_PRIVATE URLRequestFtpJob : public URLRequestJob { 30 public: 31 URLRequestFtpJob(URLRequest* request, 32 NetworkDelegate* network_delegate, 33 FtpTransactionFactory* ftp_transaction_factory, 34 FtpAuthCache* ftp_auth_cache); 35 36 protected: 37 virtual ~URLRequestFtpJob(); 38 39 // Overridden from URLRequestJob: 40 virtual bool IsSafeRedirect(const GURL& location) OVERRIDE; 41 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; 42 virtual void GetResponseInfo(HttpResponseInfo* info) OVERRIDE; 43 virtual HostPortPair GetSocketAddress() const OVERRIDE; 44 virtual void SetPriority(RequestPriority priority) OVERRIDE; 45 virtual void Start() OVERRIDE; 46 virtual void Kill() OVERRIDE; 47 48 RequestPriority priority() const { return priority_; } 49 50 private: 51 void OnResolveProxyComplete(int result); 52 53 void StartFtpTransaction(); 54 void StartHttpTransaction(); 55 56 void OnStartCompleted(int result); 57 void OnStartCompletedAsync(int result); 58 void OnReadCompleted(int result); 59 60 void RestartTransactionWithAuth(); 61 62 void LogFtpServerType(char server_type); 63 64 // Overridden from URLRequestJob: 65 virtual LoadState GetLoadState() const OVERRIDE; 66 virtual bool NeedsAuth() OVERRIDE; 67 virtual void GetAuthChallengeInfo( 68 scoped_refptr<AuthChallengeInfo>* auth_info) OVERRIDE; 69 virtual void SetAuth(const AuthCredentials& credentials) OVERRIDE; 70 virtual void CancelAuth() OVERRIDE; 71 72 // TODO(ibrar): Yet to give another look at this function. 73 virtual UploadProgress GetUploadProgress() const OVERRIDE; 74 virtual bool ReadRawData(IOBuffer* buf, 75 int buf_size, 76 int *bytes_read) OVERRIDE; 77 78 void HandleAuthNeededResponse(); 79 80 RequestPriority priority_; 81 82 ProxyService* proxy_service_; 83 ProxyInfo proxy_info_; 84 ProxyService::PacRequest* pac_request_; 85 86 FtpRequestInfo ftp_request_info_; 87 scoped_ptr<FtpTransaction> ftp_transaction_; 88 89 HttpRequestInfo http_request_info_; 90 scoped_ptr<HttpTransaction> http_transaction_; 91 const HttpResponseInfo* http_response_info_; 92 93 bool read_in_progress_; 94 95 scoped_refptr<AuthData> auth_data_; 96 97 base::WeakPtrFactory<URLRequestFtpJob> weak_factory_; 98 99 FtpTransactionFactory* ftp_transaction_factory_; 100 FtpAuthCache* ftp_auth_cache_; 101 102 DISALLOW_COPY_AND_ASSIGN(URLRequestFtpJob); 103 }; 104 105 } // namespace net 106 107 #endif // NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_ 108