| Index: chrome/browser/download/save_package.cc
|
| ===================================================================
|
| --- chrome/browser/download/save_package.cc (revision 91326)
|
| +++ chrome/browser/download/save_package.cc (working copy)
|
| @@ -21,6 +21,7 @@
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/download/download_item.h"
|
| #include "chrome/browser/download/download_item_model.h"
|
| +#include "chrome/browser/download/download_history.h"
|
| #include "chrome/browser/download/download_manager.h"
|
| #include "chrome/browser/download/download_prefs.h"
|
| #include "chrome/browser/download/download_util.h"
|
| @@ -173,6 +174,7 @@
|
| wait_state_(INITIALIZE),
|
| tab_id_(tab_contents()->GetRenderProcessHost()->id()),
|
| unique_id_(g_save_package_id++),
|
| + download_manager_(tab_contents()->profile()->GetDownloadManager()),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
|
| DCHECK(page_url_.is_valid());
|
| DCHECK(save_type_ == SAVE_AS_ONLY_HTML ||
|
| @@ -199,6 +201,7 @@
|
| wait_state_(INITIALIZE),
|
| tab_id_(tab_contents()->GetRenderProcessHost()->id()),
|
| unique_id_(g_save_package_id++),
|
| + download_manager_(tab_contents()->profile()->GetDownloadManager()),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
|
| DCHECK(page_url_.is_valid());
|
| InternalInit();
|
| @@ -224,6 +227,7 @@
|
| wait_state_(INITIALIZE),
|
| tab_id_(0),
|
| unique_id_(g_save_package_id++),
|
| + download_manager_(tab_contents()->profile()->GetDownloadManager()),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
|
| }
|
|
|
| @@ -315,18 +319,22 @@
|
| }
|
|
|
| // Create the fake DownloadItem and display the view.
|
| - DownloadManager* download_manager =
|
| - tab_contents()->profile()->GetDownloadManager();
|
| - download_ = new DownloadItem(download_manager,
|
| + if (!download_manager_) {
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| + download_ = new DownloadItem(download_manager_,
|
| saved_main_file_path_,
|
| page_url_,
|
| profile->IsOffTheRecord());
|
|
|
| // Transfer the ownership to the download manager. We need the DownloadItem
|
| // to be alive as long as the Profile is alive.
|
| - download_manager->SavePageAsDownloadStarted(download_);
|
| + download_manager_->SavePageAsDownloadStarted(download_);
|
|
|
| - wrapper_->download_tab_helper()->OnStartDownload(download_);
|
| + // Add this entry to the history service, which also notifies the UI.
|
| + download_manager_->download_history()->AddEntry(download_,
|
| + NewCallback(this, &SavePackage::OnDownloadEntryAdded));
|
|
|
| // Check save type and process the save page job.
|
| if (save_type_ == SAVE_AS_COMPLETE_HTML) {
|
| @@ -691,6 +699,8 @@
|
|
|
| // Inform the DownloadItem we have canceled whole save page job.
|
| download_->Cancel(false);
|
| + if (download_manager_)
|
| + download_manager_->download_history()->UpdateEntry(download_);
|
| }
|
|
|
| void SavePackage::CheckFinish() {
|
| @@ -745,6 +755,8 @@
|
|
|
| download_->OnAllDataSaved(all_save_items_count_);
|
| download_->MarkAsComplete();
|
| + if (download_manager_)
|
| + download_manager_->download_history()->UpdateEntry(download_);
|
|
|
| NotificationService::current()->Notify(
|
| NotificationType::SAVE_PACKAGE_SUCCESSFULLY_FINISHED,
|
| @@ -1474,3 +1486,14 @@
|
|
|
| void SavePackage::FileSelectionCanceled(void* params) {
|
| }
|
| +
|
| +void SavePackage::ManagerGoingDown() {
|
| + download_manager_ = NULL;
|
| +}
|
| +
|
| +void SavePackage::OnDownloadEntryAdded(int32 download_id, int64 db_handle) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + if (download_manager_)
|
| + download_manager_->AddDownloadItemToHistory(download_, db_handle);
|
| +}
|
| +
|
|
|