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

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: Lint 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
« no previous file with comments | « chrome/browser/android/download/download_manager_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « chrome/browser/android/download/download_manager_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698