OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_H_ | 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_H_ |
6 #define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_H_ | 6 #define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
| 16 #include "base/scoped_observer.h" |
16 #include "chrome/browser/history/download_row.h" | 17 #include "chrome/browser/history/download_row.h" |
17 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana
ger.h" | 18 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana
ger.h" |
| 19 #include "components/history/core/browser/history_service_observer.h" |
18 #include "content/public/browser/notification_observer.h" | 20 #include "content/public/browser/notification_observer.h" |
19 #include "content/public/browser/notification_registrar.h" | 21 #include "content/public/browser/notification_registrar.h" |
20 | 22 |
21 class HistoryService; | 23 class HistoryService; |
22 class Profile; | 24 class Profile; |
23 | 25 |
24 namespace content { | 26 namespace content { |
25 class NotificationDetails; | 27 class NotificationDetails; |
26 class NotificationSource; | 28 class NotificationSource; |
27 } | 29 } |
28 | 30 |
29 namespace history { | 31 namespace history { |
30 struct DownloadRow; | 32 struct DownloadRow; |
31 } | 33 } |
32 | 34 |
33 namespace safe_browsing { | 35 namespace safe_browsing { |
34 | 36 |
35 class ClientIncidentReport_DownloadDetails; | 37 class ClientIncidentReport_DownloadDetails; |
36 | 38 |
37 // Finds the most recent executable downloaded by any on-the-record profile with | 39 // Finds the most recent executable downloaded by any on-the-record profile with |
38 // history that participates in safe browsing. | 40 // history that participates in safe browsing. |
39 class LastDownloadFinder : public content::NotificationObserver { | 41 class LastDownloadFinder : public content::NotificationObserver, |
| 42 public history::HistoryServiceObserver { |
40 public: | 43 public: |
41 typedef base::Callback<void( | 44 typedef base::Callback<void( |
42 content::BrowserContext* context, | 45 content::BrowserContext* context, |
43 const DownloadMetadataManager::GetDownloadDetailsCallback&)> | 46 const DownloadMetadataManager::GetDownloadDetailsCallback&)> |
44 DownloadDetailsGetter; | 47 DownloadDetailsGetter; |
45 | 48 |
46 // The type of a callback run by the finder upon completion. The argument is a | 49 // The type of a callback run by the finder upon completion. The argument is a |
47 // protobuf containing details of the download that was found, or an empty | 50 // protobuf containing details of the download that was found, or an empty |
48 // pointer if none was found. | 51 // pointer if none was found. |
49 typedef base::Callback<void(scoped_ptr<ClientIncidentReport_DownloadDetails>)> | 52 typedef base::Callback<void(scoped_ptr<ClientIncidentReport_DownloadDetails>)> |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 std::map<Profile*, ProfileWaitState>::iterator iter); | 112 std::map<Profile*, ProfileWaitState>::iterator iter); |
110 | 113 |
111 // Invokes the caller-supplied callback with the download found. | 114 // Invokes the caller-supplied callback with the download found. |
112 void ReportResults(); | 115 void ReportResults(); |
113 | 116 |
114 // content::NotificationObserver methods. | 117 // content::NotificationObserver methods. |
115 void Observe(int type, | 118 void Observe(int type, |
116 const content::NotificationSource& source, | 119 const content::NotificationSource& source, |
117 const content::NotificationDetails& details) override; | 120 const content::NotificationDetails& details) override; |
118 | 121 |
| 122 // history::HistoryServiceObserver: |
| 123 void OnHistoryServiceLoaded(HistoryService* service) override; |
| 124 void HistoryServiceBeingDeleted(HistoryService* history_service) override; |
| 125 |
119 // Caller-supplied callback to make an asynchronous request for a profile's | 126 // Caller-supplied callback to make an asynchronous request for a profile's |
120 // persistent download details. | 127 // persistent download details. |
121 DownloadDetailsGetter download_details_getter_; | 128 DownloadDetailsGetter download_details_getter_; |
122 | 129 |
123 // Caller-supplied callback to be invoked when the most recent download is | 130 // Caller-supplied callback to be invoked when the most recent download is |
124 // found. | 131 // found. |
125 LastDownloadCallback callback_; | 132 LastDownloadCallback callback_; |
126 | 133 |
127 // A mapping of profiles for which a download query is pending to their | 134 // A mapping of profiles for which a download query is pending to their |
128 // respective states. | 135 // respective states. |
129 std::map<Profile*, ProfileWaitState> profile_states_; | 136 std::map<Profile*, ProfileWaitState> profile_states_; |
130 | 137 |
131 // Registrar for observing profile lifecycle notifications. | 138 // Registrar for observing profile lifecycle notifications. |
132 content::NotificationRegistrar notification_registrar_; | 139 content::NotificationRegistrar notification_registrar_; |
133 | 140 |
134 // The most interesting download details retrieved from download metadata. | 141 // The most interesting download details retrieved from download metadata. |
135 scoped_ptr<ClientIncidentReport_DownloadDetails> details_; | 142 scoped_ptr<ClientIncidentReport_DownloadDetails> details_; |
136 | 143 |
137 // The most recent download, updated progressively as query results arrive. | 144 // The most recent download, updated progressively as query results arrive. |
138 history::DownloadRow most_recent_row_; | 145 history::DownloadRow most_recent_row_; |
139 | 146 |
| 147 // HistoryServiceObserver |
| 148 ScopedObserver<HistoryService, HistoryServiceObserver> |
| 149 history_service_observer_; |
| 150 |
140 // A factory for asynchronous operations on profiles' HistoryService. | 151 // A factory for asynchronous operations on profiles' HistoryService. |
141 base::WeakPtrFactory<LastDownloadFinder> weak_ptr_factory_; | 152 base::WeakPtrFactory<LastDownloadFinder> weak_ptr_factory_; |
142 | 153 |
143 DISALLOW_COPY_AND_ASSIGN(LastDownloadFinder); | 154 DISALLOW_COPY_AND_ASSIGN(LastDownloadFinder); |
144 }; | 155 }; |
145 | 156 |
146 } // namespace safe_browsing | 157 } // namespace safe_browsing |
147 | 158 |
148 #endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_
H_ | 159 #endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_LAST_DOWNLOAD_FINDER_
H_ |
OLD | NEW |