Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2132)

Unified Diff: chrome/browser/download/download_resource_throttle.cc

Issue 1229933010: move file access permission logic to DownloadResourceThrottle (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing asanka's comments Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698