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

Unified Diff: content/browser/android/download_controller_android_impl.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: content/browser/android/download_controller_android_impl.cc
diff --git a/content/browser/android/download_controller_android_impl.cc b/content/browser/android/download_controller_android_impl.cc
index 7cca4a8563256ef091e3e48e134bd5fcea4dcf13..e571780efcc5c29e8e7282137f09341a8fcc9d24 100644
--- a/content/browser/android/download_controller_android_impl.cc
+++ b/content/browser/android/download_controller_android_impl.cc
@@ -43,8 +43,59 @@ using base::android::ScopedJavaLocalRef;
namespace {
// Guards download_controller_
base::LazyInstance<base::Lock> g_download_controller_lock_;
+
+content::WebContents* GetWebContents(int render_process_id,
+ int render_view_id) {
+ content::RenderViewHost* render_view_host =
+ content::RenderViewHost::FromID(render_process_id, render_view_id);
+
+ if (!render_view_host)
+ return nullptr;
+
+ return content::WebContents::FromRenderViewHost(render_view_host);
+}
+
+void CreateContextMenuDownload(int render_process_id,
+ int render_view_id,
+ const content::ContextMenuParams& params,
+ bool is_link,
+ const std::string& extra_headers,
+ bool granted) {
+ if (!granted)
+ return;
+
+ content::WebContents* web_contents =
+ GetWebContents(render_process_id, render_view_id);
+ if (!web_contents)
+ return;
+
+ const GURL& url = is_link ? params.link_url : params.src_url;
+ const GURL& referring_url =
+ params.frame_url.is_empty() ? params.page_url : params.frame_url;
+ content::DownloadManagerImpl* dlm =
+ static_cast<content::DownloadManagerImpl*>(
+ content::BrowserContext::GetDownloadManager(
+ web_contents->GetBrowserContext()));
+ scoped_ptr<content::DownloadUrlParameters> dl_params(
+ content::DownloadUrlParameters::FromWebContents(web_contents, url));
+ content::Referrer referrer = content::Referrer::SanitizeForRequest(
+ url,
+ content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy));
+ dl_params->set_referrer(referrer);
+ if (is_link)
+ dl_params->set_referrer_encoding(params.frame_charset);
+ net::HttpRequestHeaders headers;
+ headers.AddHeadersFromString(extra_headers);
+ for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext();)
+ dl_params->add_request_header(it.name(), it.value());
+ if (!is_link && extra_headers.empty())
+ dl_params->set_prefer_cache(true);
+ dl_params->set_prompt(false);
+ dlm->DownloadUrl(dl_params.Pass());
}
+} // namespace
+
namespace content {
// JNI methods
@@ -128,9 +179,11 @@ void DownloadControllerAndroidImpl::CancelDeferredDownload(
}
void DownloadControllerAndroidImpl::AcquireFileAccessPermission(
- WebContents* web_contents,
+ int render_process_id,
+ int render_view_id,
const DownloadControllerAndroid::AcquireFileAccessPermissionCallback& cb) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ WebContents* web_contents = GetWebContents(render_process_id, render_view_id);
if (!web_contents) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, base::Bind(cb, false));
@@ -305,7 +358,7 @@ void DownloadControllerAndroidImpl::StartAndroidDownload(
}
AcquireFileAccessPermission(
- web_contents,
+ render_process_id, render_view_id,
base::Bind(&DownloadControllerAndroidImpl::StartAndroidDownloadInternal,
base::Unretained(this), render_process_id, render_view_id,
info));
@@ -449,17 +502,6 @@ void DownloadControllerAndroidImpl::OnDangerousDownload(DownloadItem* item) {
}
}
-WebContents* DownloadControllerAndroidImpl::GetWebContents(
- int render_process_id, int render_view_id) {
- RenderViewHost* render_view_host =
- RenderViewHost::FromID(render_process_id, render_view_id);
-
- if (!render_view_host)
- return NULL;
-
- return render_view_host->GetDelegate()->GetAsWebContents();
-}
-
ScopedJavaLocalRef<jobject>
DownloadControllerAndroidImpl::GetContentViewCoreFromWebContents(
WebContents* web_contents) {
@@ -488,28 +530,12 @@ DownloadControllerAndroidImpl::JavaObject*
void DownloadControllerAndroidImpl::StartContextMenuDownload(
const ContextMenuParams& params, WebContents* web_contents, bool is_link,
const std::string& extra_headers) {
- const GURL& url = is_link ? params.link_url : params.src_url;
- const GURL& referring_url = params.frame_url.is_empty() ?
- params.page_url : params.frame_url;
- DownloadManagerImpl* dlm = static_cast<DownloadManagerImpl*>(
- BrowserContext::GetDownloadManager(web_contents->GetBrowserContext()));
- scoped_ptr<DownloadUrlParameters> dl_params(
- DownloadUrlParameters::FromWebContents(web_contents, url));
- content::Referrer referrer = content::Referrer::SanitizeForRequest(
- url,
- content::Referrer(referring_url.GetAsReferrer(),
- params.referrer_policy));
- dl_params->set_referrer(referrer);
- if (is_link)
- dl_params->set_referrer_encoding(params.frame_charset);
- net::HttpRequestHeaders headers;
- headers.AddHeadersFromString(extra_headers);
- for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext();)
- dl_params->add_request_header(it.name(), it.value());
- if (!is_link && extra_headers.empty())
- dl_params->set_prefer_cache(true);
- dl_params->set_prompt(false);
- dlm->DownloadUrl(dl_params.Pass());
+ int process_id = web_contents->GetRenderProcessHost()->GetID();
+ int routing_id = web_contents->GetRoutingID();
+ AcquireFileAccessPermission(
+ process_id, routing_id,
+ base::Bind(&CreateContextMenuDownload, process_id, routing_id, params,
+ is_link, extra_headers));
}
void DownloadControllerAndroidImpl::DangerousDownloadValidated(
@@ -547,8 +573,7 @@ DownloadControllerAndroidImpl::DownloadInfoAndroid::DownloadInfoAndroid(
url = request->url_chain().back();
}
- const content::ResourceRequestInfo* info =
- content::ResourceRequestInfo::ForRequest(request);
+ const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
if (info)
has_user_gesture = info->HasUserGesture();
}

Powered by Google App Engine
This is Rietveld 408576698