Chromium Code Reviews| 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 = |