Chromium Code Reviews| Index: chrome/browser/download/chrome_download_manager_delegate.cc |
| diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc |
| index 3a909c791d032ecabac91c12caa0a67401e7d833..7fd09f1419ed8b2987e4c0b1cf65a19fd32562d9 100644 |
| --- a/chrome/browser/download/chrome_download_manager_delegate.cc |
| +++ b/chrome/browser/download/chrome_download_manager_delegate.cc |
| @@ -132,9 +132,17 @@ ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { |
| void ChromeDownloadManagerDelegate::SetDownloadManager(DownloadManager* dm) { |
| download_manager_ = dm; |
| download_history_.reset(new DownloadHistory(profile_)); |
| - download_history_->Load( |
| - base::Bind(&DownloadManager::OnPersistentStoreQueryComplete, |
| - base::Unretained(dm))); |
| + if (profile_->GetOriginalProfile() == profile_) { |
|
asanka
2012/08/13 23:03:58
Nit: Why not !profile_->IsOffTheRecord() ? It seem
benjhayden
2012/08/14 14:30:51
Done.
|
| + // DownloadManager should not be RefCountedThreadSafe. |
| + // ChromeDownloadManagerDelegate outlives DownloadManager, and |
| + // DownloadHistory uses a scoped canceller to cancel tasks when it is |
| + // deleted. Almost all callbacks to DownloadManager should use weak pointers |
| + // or bounce off a container object that uses ManagerGoingDown() to simulate |
| + // a weak pointer. |
| + download_history_->Load( |
| + base::Bind(&DownloadManager::OnPersistentStoreQueryComplete, |
| + download_manager_)); |
| + } |
| #if !defined(OS_ANDROID) |
| extension_event_router_.reset(new ExtensionDownloadsEventRouter( |
| profile_, download_manager_)); |
| @@ -424,9 +432,14 @@ bool ChromeDownloadManagerDelegate::GenerateFileHash() { |
| void ChromeDownloadManagerDelegate::AddItemToPersistentStore( |
| DownloadItem* item) { |
| + if (profile_->IsOffTheRecord()) { |
| + OnItemAddedToPersistentStore( |
| + item->GetId(), download_history_->GetNextFakeDbHandle()); |
| + return; |
| + } |
| download_history_->AddEntry(item, |
| base::Bind(&ChromeDownloadManagerDelegate::OnItemAddedToPersistentStore, |
| - base::Unretained(this))); |
| + this)); |
| } |
| void ChromeDownloadManagerDelegate::UpdateItemInPersistentStore( |
| @@ -448,6 +461,8 @@ void ChromeDownloadManagerDelegate::RemoveItemFromPersistentStore( |
| void ChromeDownloadManagerDelegate::RemoveItemsFromPersistentStoreBetween( |
| base::Time remove_begin, |
| base::Time remove_end) { |
| + if (profile_->IsOffTheRecord()) |
| + return; |
| download_history_->RemoveEntriesBetween(remove_begin, remove_end); |
| } |
| @@ -578,7 +593,7 @@ void ChromeDownloadManagerDelegate::CheckDownloadUrlDone( |
| download_history_->CheckVisitedReferrerBefore( |
| download_id, download->GetReferrerUrl(), |
| base::Bind(&ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone, |
| - base::Unretained(this), download_id, callback, danger_type)); |
| + this, download_id, callback, danger_type)); |
| } |
| void ChromeDownloadManagerDelegate::CheckClientDownloadDone( |