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

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

Issue 2117343007: Show download error message if sdcard is not available (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clean up document dir if no sdcard is found 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..ba743d2b8f34d6c9db032716487cbe84fbe7711f 100644
--- a/chrome/browser/android/download/download_manager_service.cc
+++ b/chrome/browser/android/download/download_manager_service.cc
@@ -5,7 +5,9 @@
#include "chrome/browser/android/download/download_manager_service.h"
#include "base/android/jni_string.h"
+#include "base/files/file_util.h"
#include "base/location.h"
+#include "base/path_service.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
@@ -13,8 +15,10 @@
#include "chrome/browser/download/download_service.h"
#include "chrome/browser/download/download_service_factory.h"
#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/common/chrome_paths.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/download_item.h"
#include "jni/DownloadManagerService_jni.h"
#include "ui/base/l10n/l10n_util.h"
@@ -23,11 +27,44 @@ using base::android::JavaParamRef;
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
+namespace {
+// When sdcard is not available, check whether previously downloaded files under
+// document dir has been cleaned.
+bool are_downloads_under_document_dir_cleaned = false;
+}
+
+void ClearUnusedDownloads() {
asanka 2016/07/12 17:07:10 This one is a bit tricky. Are there other componen
qinmin 2016/07/12 18:13:04 Seems only download is using Documents dir, I adde
+ base::FilePath document_dir;
+ base::PathService::Get(chrome::DIR_USER_DOCUMENTS, &document_dir);
+ base::DeleteFile(document_dir, true);
+}
+
// static
bool DownloadManagerService::RegisterDownloadManagerService(JNIEnv* env) {
return RegisterNativesImpl(env);
}
+// static
+void DownloadManagerService::OnDownloadCanceled(
+ content::DownloadItem* download,
+ DownloadController::DownloadCancelReason reason) {
+ bool has_no_external_storage =
+ (reason == DownloadController::CANCEL_REASON_NO_EXTERNAL_STORAGE);
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> jname =
+ ConvertUTF8ToJavaString(env, download->GetURL().ExtractFileName());
+ Java_DownloadManagerService_onDownloadItemCanceled(
+ env, jname.obj(), has_no_external_storage);
+ DownloadController::RecordDownloadCancelReason(reason);
+ if (has_no_external_storage && !are_downloads_under_document_dir_cleaned) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::FILE, FROM_HERE,
+ base::Bind(&ClearUnusedDownloads));
+ are_downloads_under_document_dir_cleaned = true;
+ }
+}
+
+
static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) {
Profile* profile = ProfileManager::GetActiveUserProfile();
DownloadManagerService* service =

Powered by Google App Engine
This is Rietveld 408576698