Home | History | Annotate | Download | only in url_request
      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   FtpTransactionFactory* ftp_transaction_factory_;
     98   FtpAuthCache* ftp_auth_cache_;
     99 
    100   base::WeakPtrFactory<URLRequestFtpJob> weak_factory_;
    101 
    102   DISALLOW_COPY_AND_ASSIGN(URLRequestFtpJob);
    103 };
    104 
    105 }  // namespace net
    106 
    107 #endif  // NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_
    108