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

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: nits 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..2d0b9e088a68892a028fb224c3aa68dbaea2533e 100644
--- a/chrome/browser/download/download_resource_throttle.cc
+++ b/chrome/browser/download/download_resource_throttle.cc
@@ -6,10 +6,80 @@
#include "base/bind.h"
#include "chrome/browser/download/download_stats.h"
+#include "content/public/browser/browser_thread.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/render_view_host.h"
+
+using content::DownloadControllerAndroid;
+#endif
+
+using content::BrowserThread;
+
+namespace {
+
+void OnCanDownloadDecided(base::WeakPtr<DownloadResourceThrottle> throttle,
+ bool allow) {
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&DownloadResourceThrottle::ContinueDownload, throttle, allow));
+}
+
+void CanDownload(
+ scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ info->limiter->CanDownload(info->render_process_id, info->render_view_id,
+ info->url, info->request_method,
+ info->continue_callback);
+}
+
+#if defined(OS_ANDROID)
+void OnAcquireFileAccessPermissionDone(
+ scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info,
+ bool granted) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ if (granted)
+ CanDownload(info.Pass());
+ else
+ info->continue_callback.Run(false);
+}
+#endif
+
+void CanDownloadOnUIThread(
+ scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+#if defined(OS_ANDROID)
+ content::DownloadControllerAndroid::Get()->AcquireFileAccessPermission(
+ info->render_process_id, info->render_view_id,
+ base::Bind(&OnAcquireFileAccessPermissionDone,
+ base::Passed(info.Pass())));
+#else
+ CanDownload(info.Pass());
+#endif
+}
+
+} // namespace
+
+DownloadResourceThrottle::DownloadRequestInfo::DownloadRequestInfo(
+ scoped_refptr<DownloadRequestLimiter> limiter,
+ int render_process_id,
+ int render_view_id,
+ const GURL& url,
+ const std::string& request_method,
+ const DownloadRequestLimiter::Callback& continue_callback)
+ : limiter(limiter),
+ render_process_id(render_process_id),
+ render_view_id(render_view_id),
+ url(url),
+ request_method(request_method),
+ continue_callback(continue_callback) {}
+
+DownloadResourceThrottle::DownloadRequestInfo::~DownloadRequestInfo() {}
+
DownloadResourceThrottle::DownloadResourceThrottle(
- DownloadRequestLimiter* limiter,
+ scoped_refptr<DownloadRequestLimiter> limiter,
int render_process_id,
int render_view_id,
const GURL& url,
@@ -17,13 +87,14 @@ 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);
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(
+ &CanDownloadOnUIThread,
+ base::Passed(scoped_ptr<DownloadRequestInfo>(new DownloadRequestInfo(
+ limiter, render_process_id, render_view_id, url, request_method,
+ base::Bind(&OnCanDownloadDecided, AsWeakPtr()))))));
}
DownloadResourceThrottle::~DownloadResourceThrottle() {
@@ -62,6 +133,7 @@ void DownloadResourceThrottle::WillDownload(bool* defer) {
}
void DownloadResourceThrottle::ContinueDownload(bool allow) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
querying_limiter_ = false;
request_allowed_ = allow;
« no previous file with comments | « chrome/browser/download/download_resource_throttle.h ('k') | chrome/browser/download/download_resource_throttle_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698