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

Unified Diff: chrome/browser/android/download/download_controller.cc

Issue 2871123006: Missing webcontents shouldn't block download interception (Closed)
Patch Set: Created 3 years, 7 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/android/download/download_controller.cc
diff --git a/chrome/browser/android/download/download_controller.cc b/chrome/browser/android/download/download_controller.cc
index fdeea220a52ad4605ff080dd9c560e6da8ce409b..b4166707239cc65e1479b66be2d987a4fbd449cc 100644
--- a/chrome/browser/android/download/download_controller.cc
+++ b/chrome/browser/android/download/download_controller.cc
@@ -265,22 +265,34 @@ void DownloadController::StartAndroidDownloadInternal(
if (!allowed)
return;
- WebContents* web_contents = wc_getter.Run();
- if (!web_contents) {
- // The view went away. Can't proceed.
- LOG(ERROR) << "Tab closed, download failed on URL:" << info.url.spec();
- return;
- }
-
- base::string16 filename =
+ JNIEnv* env = base::android::AttachCurrentThread();
+ base::string16 file_name =
net::GetSuggestedFilename(info.url, info.content_disposition,
std::string(), // referrer_charset
std::string(), // suggested_name
info.original_mime_type, default_file_name_);
- ChromeDownloadDelegate::FromWebContents(web_contents)
- ->EnqueueDownloadManagerRequest(info.url.spec(), info.user_agent,
- filename, info.original_mime_type,
- info.cookie, info.referer);
+ ScopedJavaLocalRef<jstring> jurl =
+ ConvertUTF8ToJavaString(env, info.url.spec());
+ ScopedJavaLocalRef<jstring> juser_agent =
+ ConvertUTF8ToJavaString(env, info.user_agent);
+ ScopedJavaLocalRef<jstring> jmime_type =
+ ConvertUTF8ToJavaString(env, info.original_mime_type);
+ ScopedJavaLocalRef<jstring> jcookie =
+ ConvertUTF8ToJavaString(env, info.cookie);
+ ScopedJavaLocalRef<jstring> jreferer =
+ ConvertUTF8ToJavaString(env, info.referer);
+ ScopedJavaLocalRef<jstring> jfile_name =
+ base::android::ConvertUTF16ToJavaString(env, file_name);
+ Java_DownloadController_enqueueAndroidDownloadManagerRequest(
+ env, jurl, juser_agent, jfile_name, jmime_type, jcookie, jreferer);
+
+ WebContents* web_contents = wc_getter.Run();
+ if (web_contents) {
+ TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
+ if (tab && !tab->GetJavaObject().is_null()) {
+ Java_DownloadController_closeTabIfBlank(env, tab->GetJavaObject());
+ }
+ }
}
bool DownloadController::HasFileAccessPermission() {

Powered by Google App Engine
This is Rietveld 408576698