| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/download/download_manager_service.h" | 5 #include "chrome/browser/android/download/download_manager_service.h" |
| 6 | 6 |
| 7 #include "base/android/jni_string.h" | 7 #include "base/android/jni_string.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 | 42 |
| 43 // static | 43 // static |
| 44 void DownloadManagerService::OnDownloadCanceled( | 44 void DownloadManagerService::OnDownloadCanceled( |
| 45 content::DownloadItem* download, | 45 content::DownloadItem* download, |
| 46 DownloadController::DownloadCancelReason reason) { | 46 DownloadController::DownloadCancelReason reason) { |
| 47 bool has_no_external_storage = | 47 bool has_no_external_storage = |
| 48 (reason == DownloadController::CANCEL_REASON_NO_EXTERNAL_STORAGE); | 48 (reason == DownloadController::CANCEL_REASON_NO_EXTERNAL_STORAGE); |
| 49 JNIEnv* env = base::android::AttachCurrentThread(); | 49 JNIEnv* env = base::android::AttachCurrentThread(); |
| 50 ScopedJavaLocalRef<jstring> jname = | 50 ScopedJavaLocalRef<jstring> jname = |
| 51 ConvertUTF8ToJavaString(env, download->GetURL().ExtractFileName()); | 51 ConvertUTF8ToJavaString(env, download->GetURL().ExtractFileName()); |
| 52 Java_DownloadManagerService_onDownloadItemCanceled( | 52 Java_DownloadManagerService_onDownloadItemCanceled(env, jname, |
| 53 env, jname.obj(), has_no_external_storage); | 53 has_no_external_storage); |
| 54 DownloadController::RecordDownloadCancelReason(reason); | 54 DownloadController::RecordDownloadCancelReason(reason); |
| 55 } | 55 } |
| 56 | 56 |
| 57 | 57 |
| 58 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { | 58 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { |
| 59 Profile* profile = ProfileManager::GetActiveUserProfile(); | 59 Profile* profile = ProfileManager::GetActiveUserProfile(); |
| 60 DownloadManagerService* service = | 60 DownloadManagerService* service = |
| 61 new DownloadManagerService(env, jobj); | 61 new DownloadManagerService(env, jobj); |
| 62 DownloadService* download_service = | 62 DownloadService* download_service = |
| 63 DownloadServiceFactory::GetForBrowserContext(profile); | 63 DownloadServiceFactory::GetForBrowserContext(profile); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 137 |
| 138 // Search through the downloads for the entry with the given GUID. | 138 // Search through the downloads for the entry with the given GUID. |
| 139 content::DownloadManager::DownloadVector all_items; | 139 content::DownloadManager::DownloadVector all_items; |
| 140 manager->GetAllDownloads(&all_items); | 140 manager->GetAllDownloads(&all_items); |
| 141 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); | 141 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); |
| 142 for (auto item : all_items) { | 142 for (auto item : all_items) { |
| 143 if (item->GetGuid() != download_guid) | 143 if (item->GetGuid() != download_guid) |
| 144 continue; | 144 continue; |
| 145 | 145 |
| 146 Java_DownloadManagerService_onDownloadItemUpdated( | 146 Java_DownloadManagerService_onDownloadItemUpdated( |
| 147 env, | 147 env, java_ref_, ConvertUTF8ToJavaString(env, item->GetGuid()), |
| 148 java_ref_.obj(), | 148 ConvertUTF8ToJavaString(env, item->GetFileNameToReportUser().value()), |
| 149 ConvertUTF8ToJavaString(env, item->GetGuid()).obj(), | 149 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value()), |
| 150 ConvertUTF8ToJavaString( | 150 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()), |
| 151 env, item->GetFileNameToReportUser().value()).obj(), | 151 ConvertUTF8ToJavaString(env, item->GetMimeType()), |
| 152 ConvertUTF8ToJavaString( | 152 item->GetStartTime().ToJavaTime(), item->GetTotalBytes()); |
| 153 env, item->GetTargetFilePath().value()).obj(), | |
| 154 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()).obj(), | |
| 155 ConvertUTF8ToJavaString(env, item->GetMimeType()).obj(), | |
| 156 item->GetStartTime().ToJavaTime(), | |
| 157 item->GetTotalBytes()); | |
| 158 break; | 153 break; |
| 159 } | 154 } |
| 160 } | 155 } |
| 161 | 156 |
| 162 void DownloadManagerService::GetAllDownloadsInternal() { | 157 void DownloadManagerService::GetAllDownloadsInternal() { |
| 163 content::DownloadManager* manager = GetDownloadManager(false); | 158 content::DownloadManager* manager = GetDownloadManager(false); |
| 164 if (java_ref_.is_null() || !manager) | 159 if (java_ref_.is_null() || !manager) |
| 165 return; | 160 return; |
| 166 | 161 |
| 167 content::DownloadManager::DownloadVector all_items; | 162 content::DownloadManager::DownloadVector all_items; |
| 168 manager->GetAllDownloads(&all_items); | 163 manager->GetAllDownloads(&all_items); |
| 169 | 164 |
| 170 // Create a Java array of all of the visible DownloadItems. | 165 // Create a Java array of all of the visible DownloadItems. |
| 171 JNIEnv* env = base::android::AttachCurrentThread(); | 166 JNIEnv* env = base::android::AttachCurrentThread(); |
| 172 ScopedJavaLocalRef<jobject> j_download_item_list = | 167 ScopedJavaLocalRef<jobject> j_download_item_list = |
| 173 Java_DownloadManagerService_createDownloadItemList(env, java_ref_.obj()); | 168 Java_DownloadManagerService_createDownloadItemList(env, java_ref_); |
| 174 | 169 |
| 175 for (size_t i = 0; i < all_items.size(); i++) { | 170 for (size_t i = 0; i < all_items.size(); i++) { |
| 176 content::DownloadItem* item = all_items[i]; | 171 content::DownloadItem* item = all_items[i]; |
| 177 if (!ShouldShowDownloadItem(item)) | 172 if (!ShouldShowDownloadItem(item)) |
| 178 continue; | 173 continue; |
| 179 | 174 |
| 180 Java_DownloadManagerService_addDownloadItemToList( | 175 Java_DownloadManagerService_addDownloadItemToList( |
| 181 env, | 176 env, java_ref_, j_download_item_list, |
| 182 java_ref_.obj(), | 177 ConvertUTF8ToJavaString(env, item->GetGuid()), |
| 183 j_download_item_list.obj(), | 178 ConvertUTF8ToJavaString(env, item->GetFileNameToReportUser().value()), |
| 184 ConvertUTF8ToJavaString(env, item->GetGuid()).obj(), | 179 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value()), |
| 185 ConvertUTF8ToJavaString( | 180 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()), |
| 186 env, item->GetFileNameToReportUser().value()).obj(), | 181 ConvertUTF8ToJavaString(env, item->GetMimeType()), |
| 187 ConvertUTF8ToJavaString( | 182 item->GetStartTime().ToJavaTime(), item->GetTotalBytes()); |
| 188 env, item->GetTargetFilePath().value()).obj(), | |
| 189 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()).obj(), | |
| 190 ConvertUTF8ToJavaString(env, item->GetMimeType()).obj(), | |
| 191 item->GetStartTime().ToJavaTime(), | |
| 192 item->GetTotalBytes()); | |
| 193 } | 183 } |
| 194 | 184 |
| 195 Java_DownloadManagerService_onAllDownloadsRetrieved( | 185 Java_DownloadManagerService_onAllDownloadsRetrieved(env, java_ref_, |
| 196 env, java_ref_.obj(), j_download_item_list.obj()); | 186 j_download_item_list); |
| 197 } | 187 } |
| 198 | 188 |
| 199 | 189 |
| 200 void DownloadManagerService::CancelDownload( | 190 void DownloadManagerService::CancelDownload( |
| 201 JNIEnv* env, | 191 JNIEnv* env, |
| 202 jobject obj, | 192 jobject obj, |
| 203 const JavaParamRef<jstring>& jdownload_guid, | 193 const JavaParamRef<jstring>& jdownload_guid, |
| 204 bool is_off_the_record, | 194 bool is_off_the_record, |
| 205 bool is_notification_dismissed) { | 195 bool is_notification_dismissed) { |
| 206 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); | 196 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 // Monitor all DownloadItems for changes. | 233 // Monitor all DownloadItems for changes. |
| 244 content::DownloadManager* manager = GetDownloadManager(false); | 234 content::DownloadManager* manager = GetDownloadManager(false); |
| 245 if (manager) | 235 if (manager) |
| 246 original_notifier_.reset(new AllDownloadItemNotifier(manager, this)); | 236 original_notifier_.reset(new AllDownloadItemNotifier(manager, this)); |
| 247 } | 237 } |
| 248 | 238 |
| 249 void DownloadManagerService::OnDownloadRemoved( | 239 void DownloadManagerService::OnDownloadRemoved( |
| 250 content::DownloadManager* manager, content::DownloadItem* item) { | 240 content::DownloadManager* manager, content::DownloadItem* item) { |
| 251 JNIEnv* env = base::android::AttachCurrentThread(); | 241 JNIEnv* env = base::android::AttachCurrentThread(); |
| 252 Java_DownloadManagerService_onDownloadItemRemoved( | 242 Java_DownloadManagerService_onDownloadItemRemoved( |
| 253 env, | 243 env, java_ref_, ConvertUTF8ToJavaString(env, item->GetGuid())); |
| 254 java_ref_.obj(), | |
| 255 ConvertUTF8ToJavaString(env, item->GetGuid()).obj()); | |
| 256 } | 244 } |
| 257 | 245 |
| 258 void DownloadManagerService::ResumeDownloadInternal( | 246 void DownloadManagerService::ResumeDownloadInternal( |
| 259 const std::string& download_guid, bool is_off_the_record) { | 247 const std::string& download_guid, bool is_off_the_record) { |
| 260 content::DownloadManager* manager = GetDownloadManager(is_off_the_record); | 248 content::DownloadManager* manager = GetDownloadManager(is_off_the_record); |
| 261 if (!manager) { | 249 if (!manager) { |
| 262 OnResumptionFailed(download_guid); | 250 OnResumptionFailed(download_guid); |
| 263 return; | 251 return; |
| 264 } | 252 } |
| 265 content::DownloadItem* item = manager->GetDownloadByGuid(download_guid); | 253 content::DownloadItem* item = manager->GetDownloadByGuid(download_guid); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 base::Unretained(this), download_guid)); | 338 base::Unretained(this), download_guid)); |
| 351 DownloadController::RecordDownloadCancelReason( | 339 DownloadController::RecordDownloadCancelReason( |
| 352 DownloadController::CANCEL_REASON_NOT_CANCELED); | 340 DownloadController::CANCEL_REASON_NOT_CANCELED); |
| 353 } | 341 } |
| 354 | 342 |
| 355 void DownloadManagerService::OnResumptionFailedInternal( | 343 void DownloadManagerService::OnResumptionFailedInternal( |
| 356 const std::string& download_guid) { | 344 const std::string& download_guid) { |
| 357 if (!java_ref_.is_null()) { | 345 if (!java_ref_.is_null()) { |
| 358 JNIEnv* env = base::android::AttachCurrentThread(); | 346 JNIEnv* env = base::android::AttachCurrentThread(); |
| 359 Java_DownloadManagerService_onResumptionFailed( | 347 Java_DownloadManagerService_onResumptionFailed( |
| 360 env, java_ref_.obj(), | 348 env, java_ref_, ConvertUTF8ToJavaString(env, download_guid)); |
| 361 ConvertUTF8ToJavaString(env, download_guid).obj()); | |
| 362 } | 349 } |
| 363 if (!resume_callback_for_testing_.is_null()) | 350 if (!resume_callback_for_testing_.is_null()) |
| 364 resume_callback_for_testing_.Run(false); | 351 resume_callback_for_testing_.Run(false); |
| 365 } | 352 } |
| 366 | 353 |
| 367 content::DownloadManager* DownloadManagerService::GetDownloadManager( | 354 content::DownloadManager* DownloadManagerService::GetDownloadManager( |
| 368 bool is_off_the_record) { | 355 bool is_off_the_record) { |
| 369 Profile* profile = ProfileManager::GetActiveUserProfile(); | 356 Profile* profile = ProfileManager::GetActiveUserProfile(); |
| 370 if (is_off_the_record) | 357 if (is_off_the_record) |
| 371 profile = profile->GetOffTheRecordProfile(); | 358 profile = profile->GetOffTheRecordProfile(); |
| 372 return content::BrowserContext::GetDownloadManager(profile); | 359 return content::BrowserContext::GetDownloadManager(profile); |
| 373 } | 360 } |
| OLD | NEW |