Chromium Code Reviews| Index: chrome/browser/download/download_resource_throttle.cc |
| diff --git a/chrome/browser/download/download_resource_throttle.cc b/chrome/browser/download/download_resource_throttle.cc |
| index a8e2afa02b153b8f36aa26d8c0ec260aabac9a95..afba1d6eaaebbeb61e6cc77284818093199b85d4 100644 |
| --- a/chrome/browser/download/download_resource_throttle.cc |
| +++ b/chrome/browser/download/download_resource_throttle.cc |
| @@ -8,8 +8,53 @@ |
| #include "chrome/browser/download/download_stats.h" |
| #include "content/public/browser/resource_controller.h" |
| +#if defined(OS_ANDROID) |
| +#include "content/public/browser/android/download_controller_android.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/render_view_host.h" |
| + |
| +using content::BrowserThread; |
|
asanka
2015/07/15 20:23:00
Looks like non-Android code below also depend on t
qinmin
2015/07/17 00:42:35
Done.
|
| +using content::DownloadControllerAndroid; |
| +#endif |
| + |
| +namespace { |
| + |
| +void OnCanDownloadDecided( |
| + const DownloadRequestLimiter::Callback& callback, bool allow) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, base::Bind(callback, allow)); |
| +} |
| + |
| +#if defined(OS_ANDROID) |
| +void OnAcquireFileAccessPermissionDone( |
| + const base::Closure& can_download_callback, |
| + const DownloadRequestLimiter::Callback& cancel_callback, |
| + bool granted) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + if (granted) |
| + can_download_callback.Run(); |
| + else |
| + OnCanDownloadDecided(cancel_callback, false); |
| +} |
| + |
| +void AcquireFileAccessPermission( |
| + int render_process_id, |
| + int render_view_id, |
| + const base::Closure& can_download_callback, |
| + const DownloadRequestLimiter::Callback& cancel_callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + content::DownloadControllerAndroid::Get()->AcquireFileAccessPermission( |
| + render_process_id, render_view_id, base::Bind( |
| + &OnAcquireFileAccessPermissionDone, |
| + can_download_callback, cancel_callback)); |
| +} |
| +#endif |
| + |
| +} // namespace |
| + |
| DownloadResourceThrottle::DownloadResourceThrottle( |
| - DownloadRequestLimiter* limiter, |
| + scoped_refptr<DownloadRequestLimiter> limiter, |
| int render_process_id, |
| int render_view_id, |
| const GURL& url, |
| @@ -17,13 +62,21 @@ DownloadResourceThrottle::DownloadResourceThrottle( |
| : querying_limiter_(true), |
| request_allowed_(false), |
| request_deferred_(false) { |
| - limiter->CanDownloadOnIOThread( |
| - render_process_id, |
| - render_view_id, |
| - url, |
| - request_method, |
| - base::Bind(&DownloadResourceThrottle::ContinueDownload, |
| - AsWeakPtr())); |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + DownloadRequestLimiter::Callback continue_callback = base::Bind( |
| + &DownloadResourceThrottle::ContinueDownload, AsWeakPtr()); |
| + base::Closure can_download_callback = base::Bind( |
| + &DownloadRequestLimiter::CanDownload, limiter, render_process_id, |
| + render_view_id, url, request_method, base::Bind( |
| + &OnCanDownloadDecided, continue_callback)); |
| +#if defined(OS_ANDROID) |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, base::Bind( |
| + &AcquireFileAccessPermission, render_process_id, render_view_id, |
| + can_download_callback, continue_callback)); |
| +#else |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, can_download_callback); |
| +#endif |
| } |
| DownloadResourceThrottle::~DownloadResourceThrottle() { |