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..ab264f6442858926fdeeba8b07b0fa4983c12813 100644 |
--- a/chrome/browser/android/download/download_manager_service.cc |
+++ b/chrome/browser/android/download/download_manager_service.cc |
@@ -23,6 +23,16 @@ using base::android::JavaParamRef; |
using base::android::ConvertJavaStringToUTF8; |
using base::android::ConvertUTF8ToJavaString; |
+namespace { |
+ |
+bool ShouldShowDownloadItem(content::DownloadItem* item) { |
+ return !item->IsTemporary() && |
+ !item->GetFileNameToReportUser().empty() && |
+ !item->GetTargetFilePath().empty(); |
+} |
+ |
+} // namespace |
+ |
// static |
bool DownloadManagerService::RegisterDownloadManagerService(JNIEnv* env) { |
return RegisterNativesImpl(env); |
@@ -73,6 +83,50 @@ 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; |
+ |
+ content::DownloadManager::DownloadVector all_items; |
+ manager->GetAllDownloads(&all_items); |
+ |
+ // Create a Java array of all of the visible DownloadItems. |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> j_download_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 (!ShouldShowDownloadItem(item)) |
+ continue; |
+ |
+ Java_DownloadManagerService_addDownloadItemToList( |
+ env, |
+ java_ref_.obj(), |
+ j_download_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(), j_download_item_list.obj()); |
+} |
+ |
+ |
void DownloadManagerService::CancelDownload( |
JNIEnv* env, |
jobject obj, |
@@ -114,6 +168,9 @@ void DownloadManagerService::OnHistoryQueryComplete() { |
case CANCEL: |
CancelDownloadInternal(download_guid, false); |
break; |
+ case INITIALIZE_UI: |
+ GetAllDownloadsInternal(); |
+ break; |
default: |
NOTREACHED(); |
break; |
@@ -188,6 +245,9 @@ void DownloadManagerService::EnqueueDownloadAction( |
case CANCEL: |
iter->second = action; |
break; |
+ case INITIALIZE_UI: |
+ iter->second = action; |
+ break; |
default: |
NOTREACHED(); |
break; |