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 int request_id, 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