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

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: 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..fd8529e711e5c2102b47d93f3a28728ecc2b95ad 100644
--- a/chrome/browser/download/download_resource_throttle.cc
+++ b/chrome/browser/download/download_resource_throttle.cc
@@ -8,8 +8,39 @@
#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;
+using content::DownloadControllerAndroid;
+
+namespace {
+
+void OnAcquireFileAccessPermissionDone(
+ const DownloadControllerAndroid::AcquireFileAccessPermissionCallback& cb,
+ bool granted) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE, base::Bind(cb, granted));
+}
+
+void AcquireFileAccessPermission(
+ int render_process_id,
+ int render_view_id,
+ const DownloadControllerAndroid::AcquireFileAccessPermissionCallback& cb) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ content::DownloadControllerAndroid::Get()->AcquireFileAccessPermission(
+ render_process_id, render_view_id,
+ base::Bind(&OnAcquireFileAccessPermissionDone, cb));
+}
+
+} // namespace
+#endif
+
DownloadResourceThrottle::DownloadResourceThrottle(
- DownloadRequestLimiter* limiter,
+ scoped_refptr<DownloadRequestLimiter> limiter,
int render_process_id,
int render_view_id,
const GURL& url,
@@ -17,13 +48,19 @@ 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()));
+#if defined(OS_ANDROID)
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,base::Bind(
+ &AcquireFileAccessPermission, render_process_id, render_view_id,
+ base::Bind(
+ &DownloadResourceThrottle::FileAccessPermissionGranted,
+ AsWeakPtr(), limiter, render_process_id, render_view_id,
+ url, request_method)));
asanka 2015/07/13 19:13:42 Let's try to reduce thread hopping. Currently we
qinmin 2015/07/14 00:30:57 Done.
+#else
+ FileAccessPermissionGranted(
+ limiter, render_process_id, render_view_id, url, request_method, true);
+#endif
}
DownloadResourceThrottle::~DownloadResourceThrottle() {
@@ -47,6 +84,26 @@ const char* DownloadResourceThrottle::GetNameForLogging() const {
return "DownloadResourceThrottle";
}
+void DownloadResourceThrottle::FileAccessPermissionGranted(
+ scoped_refptr<DownloadRequestLimiter> limiter,
+ int render_process_id,
+ int render_view_id,
+ const GURL& url,
+ const std::string& request_method,
+ bool granted) {
+ if (granted) {
+ limiter->CanDownloadOnIOThread(
+ render_process_id,
+ render_view_id,
+ url,
+ request_method,
+ base::Bind(&DownloadResourceThrottle::ContinueDownload,
+ AsWeakPtr()));
+ } else {
+ controller()->Cancel();
+ }
+}
+
void DownloadResourceThrottle::WillDownload(bool* defer) {
DCHECK(!request_deferred_);

Powered by Google App Engine
This is Rietveld 408576698