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

Side by Side Diff: chrome/browser/android/download/download_manager_service.cc

Issue 2243423002: [Downloads] Add Incognito support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formatting Created 4 years, 4 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/android/download/download_manager_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 const JavaParamRef<jstring>& jdownload_guid, 108 const JavaParamRef<jstring>& jdownload_guid,
109 bool is_off_the_record) { 109 bool is_off_the_record) {
110 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); 110 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid);
111 if (is_history_query_complete_ || is_off_the_record) 111 if (is_history_query_complete_ || is_off_the_record)
112 RemoveDownloadInternal(download_guid, is_off_the_record); 112 RemoveDownloadInternal(download_guid, is_off_the_record);
113 else 113 else
114 EnqueueDownloadAction(download_guid, REMOVE); 114 EnqueueDownloadAction(download_guid, REMOVE);
115 } 115 }
116 116
117 void DownloadManagerService::GetAllDownloads(JNIEnv* env, 117 void DownloadManagerService::GetAllDownloads(JNIEnv* env,
118 const JavaParamRef<jobject>& obj) { 118 const JavaParamRef<jobject>& obj,
119 bool is_off_the_record) {
119 if (is_history_query_complete_) 120 if (is_history_query_complete_)
120 GetAllDownloadsInternal(); 121 GetAllDownloadsInternal(is_off_the_record);
122 else if (is_off_the_record)
123 EnqueueDownloadAction(std::string(), INITIALIZE_OFF_THE_RECORD_UI);
121 else 124 else
122 EnqueueDownloadAction(std::string(), INITIALIZE_UI); 125 EnqueueDownloadAction(std::string(), INITIALIZE_UI);
123 } 126 }
124 127
125 void DownloadManagerService::GetDownloadInfoFor( 128 void DownloadManagerService::GetAllDownloadsInternal(bool is_off_the_record) {
126 JNIEnv* env,
127 jobject obj,
128 const JavaParamRef<jstring>& jdownload_guid,
129 bool is_off_the_record) {
130 // The UI shouldn't be able to request any info about a specific item until it
131 // has been initialized with the list of existing downloads.
132 DCHECK(is_history_query_complete_ || is_off_the_record);
133
134 content::DownloadManager* manager = GetDownloadManager(is_off_the_record); 129 content::DownloadManager* manager = GetDownloadManager(is_off_the_record);
135 if (java_ref_.is_null() || !manager) 130 if (java_ref_.is_null() || !manager)
136 return; 131 return;
137 132
138 // Search through the downloads for the entry with the given GUID.
139 content::DownloadManager::DownloadVector all_items;
140 manager->GetAllDownloads(&all_items);
141 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid);
142 for (auto item : all_items) {
143 if (item->GetGuid() != download_guid)
144 continue;
145
146 Java_DownloadManagerService_onDownloadItemUpdated(
147 env, java_ref_, ConvertUTF8ToJavaString(env, item->GetGuid()),
148 ConvertUTF8ToJavaString(env, item->GetFileNameToReportUser().value()),
149 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value()),
150 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()),
151 ConvertUTF8ToJavaString(env, item->GetMimeType()),
152 item->GetStartTime().ToJavaTime(), item->GetTotalBytes());
153 break;
154 }
155 }
156
157 void DownloadManagerService::GetAllDownloadsInternal() {
158 content::DownloadManager* manager = GetDownloadManager(false);
159 if (java_ref_.is_null() || !manager)
160 return;
161
162 content::DownloadManager::DownloadVector all_items; 133 content::DownloadManager::DownloadVector all_items;
163 manager->GetAllDownloads(&all_items); 134 manager->GetAllDownloads(&all_items);
164 135
165 // Create a Java array of all of the visible DownloadItems. 136 // Create a Java array of all of the visible DownloadItems.
166 JNIEnv* env = base::android::AttachCurrentThread(); 137 JNIEnv* env = base::android::AttachCurrentThread();
167 ScopedJavaLocalRef<jobject> j_download_item_list = 138 ScopedJavaLocalRef<jobject> j_download_item_list =
168 Java_DownloadManagerService_createDownloadItemList(env, java_ref_); 139 Java_DownloadManagerService_createDownloadItemList(env, java_ref_);
169 140
170 for (size_t i = 0; i < all_items.size(); i++) { 141 for (size_t i = 0; i < all_items.size(); i++) {
171 content::DownloadItem* item = all_items[i]; 142 content::DownloadItem* item = all_items[i];
172 if (!ShouldShowDownloadItem(item)) 143 if (!ShouldShowDownloadItem(item))
173 continue; 144 continue;
174 145
175 Java_DownloadManagerService_addDownloadItemToList( 146 Java_DownloadManagerService_addDownloadItemToList(
176 env, java_ref_, j_download_item_list, 147 env, java_ref_, j_download_item_list,
177 ConvertUTF8ToJavaString(env, item->GetGuid()), 148 ConvertUTF8ToJavaString(env, item->GetGuid()),
178 ConvertUTF8ToJavaString(env, item->GetFileNameToReportUser().value()), 149 ConvertUTF8ToJavaString(env, item->GetFileNameToReportUser().value()),
179 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value()), 150 ConvertUTF8ToJavaString(env, item->GetTargetFilePath().value()),
180 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()), 151 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()),
181 ConvertUTF8ToJavaString(env, item->GetMimeType()), 152 ConvertUTF8ToJavaString(env, item->GetMimeType()),
182 item->GetStartTime().ToJavaTime(), item->GetTotalBytes()); 153 item->GetStartTime().ToJavaTime(), item->GetTotalBytes());
183 } 154 }
184 155
185 Java_DownloadManagerService_onAllDownloadsRetrieved(env, java_ref_, 156 Java_DownloadManagerService_onAllDownloadsRetrieved(
186 j_download_item_list); 157 env, java_ref_, j_download_item_list, is_off_the_record);
187 } 158 }
188 159
189 160
190 void DownloadManagerService::CancelDownload( 161 void DownloadManagerService::CancelDownload(
191 JNIEnv* env, 162 JNIEnv* env,
192 jobject obj, 163 jobject obj,
193 const JavaParamRef<jstring>& jdownload_guid, 164 const JavaParamRef<jstring>& jdownload_guid,
194 bool is_off_the_record, 165 bool is_off_the_record,
195 bool is_notification_dismissed) { 166 bool is_notification_dismissed) {
196 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid); 167 std::string download_guid = ConvertJavaStringToUTF8(env, jdownload_guid);
(...skipping 17 matching lines...) Expand all
214 case RESUME: 185 case RESUME:
215 ResumeDownloadInternal(download_guid, false); 186 ResumeDownloadInternal(download_guid, false);
216 break; 187 break;
217 case PAUSE: 188 case PAUSE:
218 PauseDownloadInternal(download_guid, false); 189 PauseDownloadInternal(download_guid, false);
219 break; 190 break;
220 case CANCEL: 191 case CANCEL:
221 CancelDownloadInternal(download_guid, false); 192 CancelDownloadInternal(download_guid, false);
222 break; 193 break;
223 case INITIALIZE_UI: 194 case INITIALIZE_UI:
224 GetAllDownloadsInternal(); 195 GetAllDownloadsInternal(false);
196 break;
197 case INITIALIZE_OFF_THE_RECORD_UI:
198 GetAllDownloadsInternal(true);
225 break; 199 break;
226 default: 200 default:
227 NOTREACHED(); 201 NOTREACHED();
228 break; 202 break;
229 } 203 }
230 } 204 }
231 pending_actions_.clear(); 205 pending_actions_.clear();
232 206
233 // Monitor all DownloadItems for changes. 207 // Monitor all DownloadItems for changes.
234 content::DownloadManager* manager = GetDownloadManager(false); 208 content::DownloadManager* manager = GetDownloadManager(false);
235 if (manager) 209 if (manager)
236 original_notifier_.reset(new AllDownloadItemNotifier(manager, this)); 210 original_notifier_.reset(new AllDownloadItemNotifier(manager, this));
211
212 content::DownloadManager* off_the_record_manager = GetDownloadManager(true);
213 if (off_the_record_manager) {
214 off_the_record_notifier_.reset(
215 new AllDownloadItemNotifier(off_the_record_manager, this));
216 }
217 }
218
219 void DownloadManagerService::OnDownloadUpdated(
220 content::DownloadManager* manager, content::DownloadItem* item) {
221 // Ignore anything that isn't a completed download notification.
222 if (!item->IsDone() || java_ref_.is_null())
223 return;
224
225 JNIEnv* env = base::android::AttachCurrentThread();
226 Java_DownloadManagerService_onDownloadItemUpdated(
227 env,
228 java_ref_.obj(),
229 ConvertUTF8ToJavaString(env, item->GetGuid()).obj(),
230 ConvertUTF8ToJavaString(
231 env, item->GetFileNameToReportUser().value()).obj(),
232 ConvertUTF8ToJavaString(
233 env, item->GetTargetFilePath().value()).obj(),
234 ConvertUTF8ToJavaString(env, item->GetTabUrl().spec()).obj(),
235 ConvertUTF8ToJavaString(env, item->GetMimeType()).obj(),
236 item->GetStartTime().ToJavaTime(),
237 item->GetTotalBytes(),
238 item->GetBrowserContext()->IsOffTheRecord());
237 } 239 }
238 240
239 void DownloadManagerService::OnDownloadRemoved( 241 void DownloadManagerService::OnDownloadRemoved(
240 content::DownloadManager* manager, content::DownloadItem* item) { 242 content::DownloadManager* manager, content::DownloadItem* item) {
243 if (java_ref_.is_null())
244 return;
245
241 JNIEnv* env = base::android::AttachCurrentThread(); 246 JNIEnv* env = base::android::AttachCurrentThread();
242 Java_DownloadManagerService_onDownloadItemRemoved( 247 Java_DownloadManagerService_onDownloadItemRemoved(
243 env, java_ref_, ConvertUTF8ToJavaString(env, item->GetGuid())); 248 env,
249 java_ref_.obj(),
250 ConvertUTF8ToJavaString(env, item->GetGuid()),
251 item->GetBrowserContext()->IsOffTheRecord());
244 } 252 }
245 253
246 void DownloadManagerService::ResumeDownloadInternal( 254 void DownloadManagerService::ResumeDownloadInternal(
247 const std::string& download_guid, bool is_off_the_record) { 255 const std::string& download_guid, bool is_off_the_record) {
248 content::DownloadManager* manager = GetDownloadManager(is_off_the_record); 256 content::DownloadManager* manager = GetDownloadManager(is_off_the_record);
249 if (!manager) { 257 if (!manager) {
250 OnResumptionFailed(download_guid); 258 OnResumptionFailed(download_guid);
251 return; 259 return;
252 } 260 }
253 content::DownloadItem* item = manager->GetDownloadByGuid(download_guid); 261 content::DownloadItem* item = manager->GetDownloadByGuid(download_guid);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 if (iter->second == RESUME) 324 if (iter->second == RESUME)
317 iter->second = action; 325 iter->second = action;
318 break; 326 break;
319 case CANCEL: 327 case CANCEL:
320 iter->second = action; 328 iter->second = action;
321 break; 329 break;
322 case REMOVE: 330 case REMOVE:
323 iter->second = action; 331 iter->second = action;
324 break; 332 break;
325 case INITIALIZE_UI: 333 case INITIALIZE_UI:
334 case INITIALIZE_OFF_THE_RECORD_UI:
326 iter->second = action; 335 iter->second = action;
327 break; 336 break;
328 default: 337 default:
329 NOTREACHED(); 338 NOTREACHED();
330 break; 339 break;
331 } 340 }
332 } 341 }
333 342
334 void DownloadManagerService::OnResumptionFailed( 343 void DownloadManagerService::OnResumptionFailed(
335 const std::string& download_guid) { 344 const std::string& download_guid) {
(...skipping 15 matching lines...) Expand all
351 resume_callback_for_testing_.Run(false); 360 resume_callback_for_testing_.Run(false);
352 } 361 }
353 362
354 content::DownloadManager* DownloadManagerService::GetDownloadManager( 363 content::DownloadManager* DownloadManagerService::GetDownloadManager(
355 bool is_off_the_record) { 364 bool is_off_the_record) {
356 Profile* profile = ProfileManager::GetActiveUserProfile(); 365 Profile* profile = ProfileManager::GetActiveUserProfile();
357 if (is_off_the_record) 366 if (is_off_the_record)
358 profile = profile->GetOffTheRecordProfile(); 367 profile = profile->GetOffTheRecordProfile();
359 return content::BrowserContext::GetDownloadManager(profile); 368 return content::BrowserContext::GetDownloadManager(profile);
360 } 369 }
OLDNEW
« 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