| Index: chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc
|
| diff --git a/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc b/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc
|
| index fbfbcc3614075b56b1d536a50e78cae822615a49..b3e4f3ff7634f9080b1a1eb6a4ea3c21b6cdd62b 100644
|
| --- a/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc
|
| +++ b/chrome/browser/safe_browsing/incident_reporting/last_download_finder.cc
|
| @@ -159,7 +159,8 @@ scoped_ptr<LastDownloadFinder> LastDownloadFinder::Create(
|
| return finder.Pass();
|
| }
|
|
|
| -LastDownloadFinder::LastDownloadFinder() : weak_ptr_factory_(this) {
|
| +LastDownloadFinder::LastDownloadFinder()
|
| + : history_service_observer_(this), weak_ptr_factory_(this) {
|
| }
|
|
|
| LastDownloadFinder::LastDownloadFinder(
|
| @@ -168,6 +169,7 @@ LastDownloadFinder::LastDownloadFinder(
|
| const LastDownloadCallback& callback)
|
| : download_details_getter_(download_details_getter),
|
| callback_(callback),
|
| + history_service_observer_(this),
|
| weak_ptr_factory_(this) {
|
| // Observe profile lifecycle events so that the finder can begin or abandon
|
| // the search in profiles while it is running.
|
| @@ -175,9 +177,6 @@ LastDownloadFinder::LastDownloadFinder(
|
| chrome::NOTIFICATION_PROFILE_ADDED,
|
| content::NotificationService::AllSources());
|
| notification_registrar_.Add(this,
|
| - chrome::NOTIFICATION_HISTORY_LOADED,
|
| - content::NotificationService::AllSources());
|
| - notification_registrar_.Add(this,
|
| chrome::NOTIFICATION_PROFILE_DESTROYED,
|
| content::NotificationService::AllSources());
|
|
|
| @@ -198,7 +197,7 @@ void LastDownloadFinder::SearchInProfile(Profile* profile) {
|
|
|
| // Exit early if already processing this profile. This could happen if, for
|
| // example, NOTIFICATION_PROFILE_ADDED arrives after construction while
|
| - // waiting for NOTIFICATION_HISTORY_LOADED.
|
| + // waiting for OnHistoryServiceLoaded.
|
| if (profile_states_.count(profile))
|
| return;
|
|
|
| @@ -240,7 +239,10 @@ void LastDownloadFinder::OnMetadataQuery(
|
| base::Bind(&LastDownloadFinder::OnDownloadQuery,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| profile));
|
| - } // else wait until history is loaded.
|
| + } else {
|
| + // else wait until history is loaded.
|
| + history_service_observer_.Add(history_service);
|
| + }
|
| }
|
| }
|
|
|
| @@ -327,10 +329,6 @@ void LastDownloadFinder::Observe(int type,
|
| case chrome::NOTIFICATION_PROFILE_ADDED:
|
| SearchInProfile(content::Source<Profile>(source).ptr());
|
| break;
|
| - case chrome::NOTIFICATION_HISTORY_LOADED:
|
| - OnProfileHistoryLoaded(content::Source<Profile>(source).ptr(),
|
| - content::Details<HistoryService>(details).ptr());
|
| - break;
|
| case chrome::NOTIFICATION_PROFILE_DESTROYED:
|
| AbandonSearchInProfile(content::Source<Profile>(source).ptr());
|
| break;
|
| @@ -339,4 +337,14 @@ void LastDownloadFinder::Observe(int type,
|
| }
|
| }
|
|
|
| +void LastDownloadFinder::OnHistoryServiceLoaded(
|
| + HistoryService* history_service) {
|
| + OnProfileHistoryLoaded(history_service->profile(), history_service);
|
| +}
|
| +
|
| +void LastDownloadFinder::HistoryServiceBeingDeleted(
|
| + HistoryService* history_service) {
|
| + history_service_observer_.Remove(history_service);
|
| +}
|
| +
|
| } // namespace safe_browsing
|
|
|