Home | History | Annotate | Download | only in download
      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 CHROME_BROWSER_DOWNLOAD_DOWNLOAD_RESOURCE_THROTTLE_H_
      6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_RESOURCE_THROTTLE_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "chrome/browser/download/download_request_limiter.h"
     10 #include "content/public/browser/resource_throttle.h"
     11 
     12 class GURL;
     13 
     14 // DownloadResourceThrottle is used to determine if a download should be
     15 // allowed. When a DownloadResourceThrottle is created it pauses the download
     16 // and asks the DownloadRequestLimiter if the download should be allowed. The
     17 // DownloadRequestLimiter notifies us asynchronously as to whether the download
     18 // is allowed or not. If the download is allowed the request is resumed.  If
     19 // the download is not allowed the request is canceled.
     20 
     21 class DownloadResourceThrottle
     22     : public content::ResourceThrottle,
     23       public base::SupportsWeakPtr<DownloadResourceThrottle> {
     24  public:
     25   DownloadResourceThrottle(DownloadRequestLimiter* limiter,
     26                            int render_process_id,
     27                            int render_view_id,
     28                            const GURL& url,
     29                            const std::string& request_method);
     30 
     31   // content::ResourceThrottle implementation:
     32   virtual void WillStartRequest(bool* defer) OVERRIDE;
     33   virtual void WillRedirectRequest(const GURL& new_url, bool* defer) OVERRIDE;
     34   virtual void WillProcessResponse(bool* defer) OVERRIDE;
     35   virtual const char* GetNameForLogging() const OVERRIDE;
     36 
     37  private:
     38   virtual ~DownloadResourceThrottle();
     39 
     40   void WillDownload(bool* defer);
     41   void ContinueDownload(bool allow);
     42 
     43   // Set to true when we are querying the DownloadRequestLimiter.
     44   bool querying_limiter_;
     45 
     46   // Set to true when we know that the request is allowed to start.
     47   bool request_allowed_;
     48 
     49   // Set to true when we have deferred the request.
     50   bool request_deferred_;
     51 
     52   DISALLOW_COPY_AND_ASSIGN(DownloadResourceThrottle);
     53 };
     54 
     55 #endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_RESOURCE_THROTTLE_H_
     56