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

Unified Diff: content/browser/android/download_controller_android_impl.cc

Issue 2014803002: Move DownloadControllerAndroid from content/ to chrome/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moved download delegate interface to native Created 4 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: 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 874e47a361e1c8d3902820bf84da03321c1a2557..23c594182cff47f07c7fafb723577e1035a16149 100644
--- a/content/browser/android/download_controller_android_impl.cc
+++ b/content/browser/android/download_controller_android_impl.cc
@@ -23,7 +23,9 @@
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/web_contents/web_contents_android.h"
#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/android/download_delegate.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/download_url_parameters.h"
@@ -40,6 +42,7 @@
#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
+#include "ui/android/window_android.h"
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
@@ -59,6 +62,12 @@ content::WebContents* GetWebContents(int render_process_id,
return content::WebContents::FromRenderViewHost(render_view_host);
}
+ScopedJavaLocalRef<jobject>
+GetJavaWebContents(content::WebContents* web_contents) {
+ return (static_cast<content::WebContentsImpl*>(web_contents))
+ ->GetJavaWebContents();
+}
+
void CreateContextMenuDownload(int render_process_id,
int render_view_id,
const content::ContextMenuParams& params,
@@ -203,26 +212,27 @@ void DownloadControllerAndroidImpl::AcquireFileAccessPermission(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
DCHECK(web_contents);
- ScopedJavaLocalRef<jobject> view =
- GetContentViewCoreFromWebContents(web_contents);
- if (view.is_null()) {
+ ContentViewCore* view_core = ContentViewCore::FromWebContents(web_contents);
+ if (!view_core) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, base::Bind(cb, false));
return;
}
- if (HasFileAccessPermission(view)) {
+ ScopedJavaLocalRef<jobject> jweb_contents =
+ GetJavaWebContents(web_contents);
+ if (HasFileAccessPermission(view_core->GetWindowAndroid())) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, base::Bind(cb, true));
return;
}
-
- JNIEnv* env = base::android::AttachCurrentThread();
// Make copy on the heap so we can pass the pointer through JNI.
intptr_t callback_id = reinterpret_cast<intptr_t>(
new DownloadControllerAndroid::AcquireFileAccessPermissionCallback(cb));
- Java_DownloadController_requestFileAccess(
- env, GetJavaObject()->Controller(env).obj(), view.obj(), callback_id);
+ content::WebContentsImpl* web_contents_impl =
+ static_cast<content::WebContentsImpl*>(web_contents);
+ web_contents_impl->GetWebContentsAndroid()->GetDownloadDelegate()->
+ RequestFileAccess(callback_id);
}
void DownloadControllerAndroidImpl::SetDefaultDownloadFileName(
@@ -231,13 +241,15 @@ void DownloadControllerAndroidImpl::SetDefaultDownloadFileName(
}
bool DownloadControllerAndroidImpl::HasFileAccessPermission(
- ScopedJavaLocalRef<jobject> j_content_view_core) {
+ ui::WindowAndroid* window_android) {
+ ScopedJavaLocalRef<jobject> jwindow_android = window_android->GetJavaObject();
+
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK(!j_content_view_core.is_null());
+ DCHECK(!jwindow_android.is_null());
JNIEnv* env = base::android::AttachCurrentThread();
return Java_DownloadController_hasFileAccess(
- env, GetJavaObject()->Controller(env).obj(), j_content_view_core.obj());
+ env, GetJavaObject()->Controller(env).obj(), jwindow_android.obj());
}
void DownloadControllerAndroidImpl::CreateGETDownload(
@@ -356,19 +368,6 @@ void DownloadControllerAndroidImpl::StartAndroidDownload(
LOG(ERROR) << "Download failed on URL:" << info.url.spec();
return;
}
- ScopedJavaLocalRef<jobject> view =
- GetContentViewCoreFromWebContents(web_contents);
- if (view.is_null()) {
- // ContentViewCore might not have been created yet, pass a callback to
- // DeferredDownloadTaskManager so that the download can restart when
- // ContentViewCore is created.
- deferred_downloads_.push_back(new DeferredDownloadObserver(
- web_contents,
- base::Bind(&DownloadControllerAndroidImpl::StartAndroidDownload,
- base::Unretained(this), render_process_id, render_view_id,
- must_download, info)));
- return;
- }
AcquireFileAccessPermission(
web_contents,
@@ -389,39 +388,21 @@ void DownloadControllerAndroidImpl::StartAndroidDownloadInternal(
// The view went away. Can't proceed.
if (!web_contents)
return;
- ScopedJavaLocalRef<jobject> view =
- GetContentViewCoreFromWebContents(web_contents);
- if (view.is_null())
- return;
- JNIEnv* env = base::android::AttachCurrentThread();
- ScopedJavaLocalRef<jstring> jurl =
- ConvertUTF8ToJavaString(env, info.url.spec());
- ScopedJavaLocalRef<jstring> juser_agent =
- ConvertUTF8ToJavaString(env, info.user_agent);
- ScopedJavaLocalRef<jstring> jcontent_disposition =
- ConvertUTF8ToJavaString(env, info.content_disposition);
- ScopedJavaLocalRef<jstring> jmime_type =
- ConvertUTF8ToJavaString(env, info.original_mime_type);
- ScopedJavaLocalRef<jstring> jcookie =
- ConvertUTF8ToJavaString(env, info.cookie);
- ScopedJavaLocalRef<jstring> jreferer =
- ConvertUTF8ToJavaString(env, info.referer);
-
- // net::GetSuggestedFilename will fallback to "download" as filename.
- ScopedJavaLocalRef<jstring> jfilename =
- base::android::ConvertUTF16ToJavaString(
- env, net::GetSuggestedFilename(info.url, info.content_disposition,
- std::string(), // referrer_charset
- std::string(), // suggested_name
- info.original_mime_type,
- default_file_name_));
-
- Java_DownloadController_newHttpGetDownload(
- env, GetJavaObject()->Controller(env).obj(), view.obj(), jurl.obj(),
- juser_agent.obj(), jcontent_disposition.obj(), jmime_type.obj(),
- jcookie.obj(), jreferer.obj(), info.has_user_gesture, jfilename.obj(),
- info.total_bytes, must_download);
+ content::WebContentsImpl* web_contents_impl =
+ (static_cast<content::WebContentsImpl*>(web_contents));
+ base::string16 filename = net::GetSuggestedFilename(
+ info.url, info.content_disposition,
+ std::string(), // referrer_charset
+ std::string(), // suggested_name
+ info.original_mime_type,
+ default_file_name_);
+ web_contents_impl->GetWebContentsAndroid()->GetDownloadDelegate()->
+ NewHTTPGetDownload(info.url.spec(), info.user_agent,
+ info.content_disposition, info.original_mime_type,
+ info.cookie, info.referer, filename,
+ info.total_bytes, info.has_user_gesture,
+ must_download);
}
void DownloadControllerAndroidImpl::OnDownloadStarted(
@@ -430,24 +411,15 @@ void DownloadControllerAndroidImpl::OnDownloadStarted(
if (!download_item->GetWebContents())
return;
- JNIEnv* env = base::android::AttachCurrentThread();
-
// Register for updates to the DownloadItem.
download_item->AddObserver(this);
- ScopedJavaLocalRef<jobject> view =
- GetContentViewCoreFromWebContents(download_item->GetWebContents());
- // The view went away. Can't proceed.
- if (view.is_null())
- return;
+ content::WebContentsImpl* web_contents_impl =
+ (static_cast<content::WebContentsImpl*>(download_item->GetWebContents()));
+ web_contents_impl->GetWebContentsAndroid()->GetDownloadDelegate()->
+ OnDownloadStarted(download_item->GetTargetFilePath().BaseName().value(),
+ download_item->GetMimeType());
- ScopedJavaLocalRef<jstring> jmime_type =
- ConvertUTF8ToJavaString(env, download_item->GetMimeType());
- ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
- env, download_item->GetTargetFilePath().BaseName().value());
- Java_DownloadController_onDownloadStarted(
- env, GetJavaObject()->Controller(env).obj(), view.obj(), jfilename.obj(),
- jmime_type.obj());
}
void DownloadControllerAndroidImpl::OnDownloadUpdated(DownloadItem* item) {
@@ -518,18 +490,11 @@ void DownloadControllerAndroidImpl::OnDownloadUpdated(DownloadItem* item) {
}
void DownloadControllerAndroidImpl::OnDangerousDownload(DownloadItem* item) {
- JNIEnv* env = base::android::AttachCurrentThread();
- ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
- env, item->GetTargetFilePath().BaseName().value());
- ScopedJavaLocalRef<jstring> jguid =
- ConvertUTF8ToJavaString(env, item->GetGuid());
- ScopedJavaLocalRef<jobject> view_core = GetContentViewCoreFromWebContents(
- item->GetWebContents());
- if (!view_core.is_null()) {
- Java_DownloadController_onDangerousDownload(
- env, GetJavaObject()->Controller(env).obj(), view_core.obj(),
- jfilename.obj(), jguid.obj());
- }
+ content::WebContentsImpl* web_contents_impl =
+ (static_cast<content::WebContentsImpl*>(item->GetWebContents()));
+ web_contents_impl->GetWebContentsAndroid()->GetDownloadDelegate()->
+ OnDownloadStarted(item->GetTargetFilePath().BaseName().value(),
+ item->GetGuid());
}
ScopedJavaLocalRef<jobject>

Powered by Google App Engine
This is Rietveld 408576698