OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/browser/download/download_manager.h" | 5 #include "content/browser/download/download_manager.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 if (!download) | 287 if (!download) |
288 return; | 288 return; |
289 | 289 |
290 VLOG(20) << __FUNCTION__ << "()" | 290 VLOG(20) << __FUNCTION__ << "()" |
291 << " download = " << download->DebugString(true); | 291 << " download = " << download->DebugString(true); |
292 | 292 |
293 FilePath suggested_path = download->suggested_path(); | 293 FilePath suggested_path = download->suggested_path(); |
294 | 294 |
295 if (download->prompt_user_for_save_location()) { | 295 if (download->prompt_user_for_save_location()) { |
296 // We must ask the user for the place to put the download. | 296 // We must ask the user for the place to put the download. |
297 DownloadRequestHandle request_handle = download->request_handle(); | 297 TabContents* contents = download->GetTabContents(); |
298 TabContents* contents = request_handle.GetTabContents(); | |
299 | 298 |
300 // |id_ptr| will be deleted in either FileSelected() or | 299 // |id_ptr| will be deleted in either FileSelected() or |
301 // FileSelectionCancelled(). | 300 // FileSelectionCancelled(). |
302 int32* id_ptr = new int32; | 301 int32* id_ptr = new int32; |
303 *id_ptr = download_id; | 302 *id_ptr = download_id; |
304 | 303 |
305 delegate_->ChooseDownloadPath( | 304 delegate_->ChooseDownloadPath( |
306 contents, suggested_path, reinterpret_cast<void*>(id_ptr)); | 305 contents, suggested_path, reinterpret_cast<void*>(id_ptr)); |
307 | 306 |
308 FOR_EACH_OBSERVER(Observer, observers_, | 307 FOR_EACH_OBSERVER(Observer, observers_, |
309 SelectFileDialogDisplayed(download_id)); | 308 SelectFileDialogDisplayed(download_id)); |
310 } else { | 309 } else { |
311 // No prompting for download, just continue with the suggested name. | 310 // No prompting for download, just continue with the suggested name. |
312 ContinueDownloadWithPath(download, suggested_path); | 311 ContinueDownloadWithPath(download, suggested_path); |
313 } | 312 } |
314 } | 313 } |
315 | 314 |
316 void DownloadManager::CreateDownloadItem( | 315 void DownloadManager::CreateDownloadItem( |
317 DownloadCreateInfo* info, const DownloadRequestHandle& request_handle) { | 316 DownloadCreateInfo* info, const DownloadRequestHandle& request_handle) { |
318 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 317 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
319 | 318 |
320 DownloadItem* download = new DownloadItem(this, *info, | 319 DownloadItem* download = new DownloadItem( |
321 request_handle, | 320 this, *info, new DownloadRequestHandle(request_handle), |
322 browser_context_->IsOffTheRecord()); | 321 browser_context_->IsOffTheRecord()); |
323 int32 download_id = info->download_id.local(); | 322 int32 download_id = info->download_id.local(); |
324 DCHECK(!ContainsKey(in_progress_, download_id)); | 323 DCHECK(!ContainsKey(in_progress_, download_id)); |
325 | 324 |
326 // TODO(rdsmith): Remove after http://crbug.com/85408 resolved. | 325 // TODO(rdsmith): Remove after http://crbug.com/85408 resolved. |
327 CHECK(!ContainsKey(active_downloads_, download_id)); | 326 CHECK(!ContainsKey(active_downloads_, download_id)); |
328 downloads_.insert(download); | 327 downloads_.insert(download); |
329 active_downloads_[download_id] = download; | 328 active_downloads_[download_id] = download; |
330 } | 329 } |
331 | 330 |
332 void DownloadManager::ContinueDownloadWithPath(DownloadItem* download, | 331 void DownloadManager::ContinueDownloadWithPath(DownloadItem* download, |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 in_progress_.erase(download_id); | 908 in_progress_.erase(download_id); |
910 active_downloads_.erase(download_id); | 909 active_downloads_.erase(download_id); |
911 delegate_->UpdateItemInPersistentStore(download); | 910 delegate_->UpdateItemInPersistentStore(download); |
912 download->UpdateObservers(); | 911 download->UpdateObservers(); |
913 } | 912 } |
914 } | 913 } |
915 | 914 |
916 void DownloadManager::ShowDownloadInBrowser(DownloadItem* download) { | 915 void DownloadManager::ShowDownloadInBrowser(DownloadItem* download) { |
917 // The 'contents' may no longer exist if the user closed the tab before we | 916 // The 'contents' may no longer exist if the user closed the tab before we |
918 // get this start completion event. | 917 // get this start completion event. |
919 DownloadRequestHandle request_handle = download->request_handle(); | 918 TabContents* content = download->GetTabContents(); |
920 TabContents* content = request_handle.GetTabContents(); | |
921 | 919 |
922 // If the contents no longer exists, we ask the embedder to suggest another | 920 // If the contents no longer exists, we ask the embedder to suggest another |
923 // tab. | 921 // tab. |
924 if (!content) | 922 if (!content) |
925 content = delegate_->GetAlternativeTabContentsToNotifyForDownload(); | 923 content = delegate_->GetAlternativeTabContentsToNotifyForDownload(); |
926 | 924 |
927 if (content) | 925 if (content) |
928 content->OnStartDownload(download); | 926 content->OnStartDownload(download); |
929 } | 927 } |
930 | 928 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1070 void DownloadManager::MarkDownloadOpened(DownloadItem* download) { | 1068 void DownloadManager::MarkDownloadOpened(DownloadItem* download) { |
1071 delegate_->UpdateItemInPersistentStore(download); | 1069 delegate_->UpdateItemInPersistentStore(download); |
1072 int num_unopened = 0; | 1070 int num_unopened = 0; |
1073 for (DownloadMap::iterator it = history_downloads_.begin(); | 1071 for (DownloadMap::iterator it = history_downloads_.begin(); |
1074 it != history_downloads_.end(); ++it) { | 1072 it != history_downloads_.end(); ++it) { |
1075 if (it->second->IsComplete() && !it->second->opened()) | 1073 if (it->second->IsComplete() && !it->second->opened()) |
1076 ++num_unopened; | 1074 ++num_unopened; |
1077 } | 1075 } |
1078 download_stats::RecordOpensOutstanding(num_unopened); | 1076 download_stats::RecordOpensOutstanding(num_unopened); |
1079 } | 1077 } |
OLD | NEW |