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

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

Issue 2143303002: [Downloads] Expose basic download history to UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleaning up the interface Created 4 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/android/download/download_manager_service.cc
diff --git a/chrome/browser/android/download/download_manager_service.cc b/chrome/browser/android/download/download_manager_service.cc
index 3c410a414ef7fe62c03ad89b921406593510e8ad..177047ec791e5d49ed239941daff291394b66fb9 100644
--- a/chrome/browser/android/download/download_manager_service.cc
+++ b/chrome/browser/android/download/download_manager_service.cc
@@ -23,6 +23,8 @@ using base::android::JavaParamRef;
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
+using DownloadVector = content::DownloadManager::DownloadVector;
+
// static
bool DownloadManagerService::RegisterDownloadManagerService(JNIEnv* env) {
return RegisterNativesImpl(env);
@@ -73,6 +75,56 @@ void DownloadManagerService::PauseDownload(
EnqueueDownloadAction(download_guid, PAUSE);
}
+void DownloadManagerService::GetAllDownloads(JNIEnv* env,
+ const JavaParamRef<jobject>& obj) {
+ if (is_history_query_complete_)
+ GetAllDownloadsInternal();
+ else
+ EnqueueDownloadAction(std::string(), INITIALIZE_UI);
+}
+
+void DownloadManagerService::GetAllDownloadsInternal() {
+ content::DownloadManager* manager = GetDownloadManager(false);
+ if (java_ref_.is_null() || !manager)
+ return;
+
+ DownloadVector all_items;
+ manager->GetAllDownloads(&all_items);
+
+ // Create a list in Java-land and then add information about all the
+ // downloads to it.
+ JNIEnv* env = base::android::AttachCurrentThread();
qinmin 2016/07/14 17:08:05 Since we always call onAllDownloadsRetrieved, can
gone 2016/07/14 17:11:08 This is actually what the DownloadsBridge does, so
qinmin 2016/07/14 18:06:54 You can call a jni call to pack the fields into a
Ian Wen 2016/07/14 18:16:26 Aha! I found a trick that BookmarkBridge did to si
gone 2016/07/14 19:11:56 Changed it around to create the jobjectarray like
+ ScopedJavaLocalRef<jobject> jdownload_item_list =
+ Java_DownloadManagerService_createDownloadItemList(
+ env, java_ref_.obj());
+
+ for (size_t i = 0; i < all_items.size(); i++) {
+ content::DownloadItem* item = all_items[i];
+ if (item->IsTemporary() ||
+ item->GetFileNameToReportUser().empty() ||
+ item->GetTargetFilePath().empty()) {
+ continue;
+ }
+
+ Java_DownloadManagerService_addItemToDownloadItemList(
+ env,
+ java_ref_.obj(),
+ jdownload_item_list.obj(),
+ ConvertUTF8ToJavaString(env, item->GetGuid()).obj(),
+ ConvertUTF8ToJavaString(
+ env,
+ item->GetFileNameToReportUser().BaseName().value()).obj(),
+ ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()).obj(),
+ ConvertUTF8ToJavaString(env, item->GetMimeType()).obj(),
+ item->GetStartTime().ToJavaTime(),
+ item->GetTotalBytes());
+ }
+
+ Java_DownloadManagerService_onAllDownloadsRetrieved(
+ env, java_ref_.obj(), jdownload_item_list.obj());
+}
+
+
void DownloadManagerService::CancelDownload(
JNIEnv* env,
jobject obj,
@@ -114,6 +166,9 @@ void DownloadManagerService::OnHistoryQueryComplete() {
case CANCEL:
CancelDownloadInternal(download_guid, false);
break;
+ case INITIALIZE_UI:
+ GetAllDownloadsInternal();
+ break;
default:
NOTREACHED();
break;
@@ -188,6 +243,9 @@ void DownloadManagerService::EnqueueDownloadAction(
case CANCEL:
iter->second = action;
break;
+ case INITIALIZE_UI:
+ iter->second = action;
+ break;
default:
NOTREACHED();
break;

Powered by Google App Engine
This is Rietveld 408576698