Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1482)

Side by Side Diff: chrome/browser/safe_browsing/incident_reporting/last_download_finder_unittest.cc

Issue 663023007: Include high-fidelity metadata about a download in incident reports. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: added DCHECK Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "chrome/browser/safe_browsing/incident_reporting/last_download_finder.h " 5 #include "chrome/browser/safe_browsing/incident_reporting/last_download_finder.h "
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 if (history_service->Init(profile->GetPath())) 54 if (history_service->Init(profile->GetPath()))
55 return history_service; 55 return history_service;
56 56
57 ADD_FAILURE() << "failed to initialize history service"; 57 ADD_FAILURE() << "failed to initialize history service";
58 delete history_service; 58 delete history_service;
59 return NULL; 59 return NULL;
60 } 60 }
61 61
62 } // namespace 62 } // namespace
63 63
64 namespace safe_browsing {
65
64 class LastDownloadFinderTest : public testing::Test { 66 class LastDownloadFinderTest : public testing::Test {
65 public: 67 public:
66 void NeverCalled(scoped_ptr< 68 void NeverCalled(scoped_ptr<ClientIncidentReport_DownloadDetails> download) {
67 safe_browsing::ClientIncidentReport_DownloadDetails> download) {
68 FAIL(); 69 FAIL();
69 } 70 }
70 71
71 // Creates a new profile that participates in safe browsing and adds a 72 // Creates a new profile that participates in safe browsing and adds a
72 // download to its history. 73 // download to its history.
73 void CreateProfileWithDownload() { 74 void CreateProfileWithDownload() {
74 TestingProfile* profile = CreateProfile(SAFE_BROWSING_OPT_IN); 75 TestingProfile* profile = CreateProfile(SAFE_BROWSING_OPT_IN);
75 HistoryService* history_service = 76 HistoryService* history_service =
76 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS); 77 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS);
77 history_service->CreateDownload( 78 history_service->CreateDownload(
78 CreateTestDownloadRow(), 79 CreateTestDownloadRow(),
79 base::Bind(&LastDownloadFinderTest::OnDownloadCreated, 80 base::Bind(&LastDownloadFinderTest::OnDownloadCreated,
80 base::Unretained(this))); 81 base::Unretained(this)));
81 } 82 }
82 83
83 // safe_browsing::LastDownloadFinder::LastDownloadCallback implementation that 84 // LastDownloadFinder::LastDownloadCallback implementation that
84 // passes the found download to |result| and then runs a closure. 85 // passes the found download to |result| and then runs a closure.
85 void OnLastDownload( 86 void OnLastDownload(
86 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails>* result, 87 scoped_ptr<ClientIncidentReport_DownloadDetails>* result,
87 const base::Closure& quit_closure, 88 const base::Closure& quit_closure,
88 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> 89 scoped_ptr<ClientIncidentReport_DownloadDetails> download) {
89 download) {
90 *result = download.Pass(); 90 *result = download.Pass();
91 quit_closure.Run(); 91 quit_closure.Run();
92 } 92 }
93 93
94 protected: 94 protected:
95 // A type for specifying whether or not a profile created by CreateProfile 95 // A type for specifying whether or not a profile created by CreateProfile
96 // participates in safe browsing. 96 // participates in safe browsing.
97 enum SafeBrowsingDisposition { 97 enum SafeBrowsingDisposition {
98 SAFE_BROWSING_OPT_OUT, 98 SAFE_BROWSING_OPT_OUT,
99 SAFE_BROWSING_OPT_IN, 99 SAFE_BROWSING_OPT_IN,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 profile_name, 146 profile_name,
147 prefs.Pass(), 147 prefs.Pass(),
148 base::UTF8ToUTF16(profile_name), // user_name 148 base::UTF8ToUTF16(profile_name), // user_name
149 0, // avatar_id 149 0, // avatar_id
150 std::string(), // supervised_user_id 150 std::string(), // supervised_user_id
151 factories); 151 factories);
152 152
153 return profile; 153 return profile;
154 } 154 }
155 155
156 LastDownloadFinder::DownloadDetailsGetter GetDownloadDetailsGetter() {
157 return base::Bind(&LastDownloadFinderTest::GetDownloadDetails,
158 base::Unretained(this));
159 }
160
156 void AddDownload(Profile* profile, const history::DownloadRow& download) { 161 void AddDownload(Profile* profile, const history::DownloadRow& download) {
157 base::RunLoop run_loop; 162 base::RunLoop run_loop;
158 163
159 HistoryService* history_service = 164 HistoryService* history_service =
160 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS); 165 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS);
161 history_service->CreateDownload( 166 history_service->CreateDownload(
162 download, 167 download,
163 base::Bind(&LastDownloadFinderTest::ContinueOnDownloadCreated, 168 base::Bind(&LastDownloadFinderTest::ContinueOnDownloadCreated,
164 base::Unretained(this), 169 base::Unretained(this),
165 run_loop.QuitClosure())); 170 run_loop.QuitClosure()));
(...skipping 13 matching lines...) Expand all
179 base::RunLoop run_loop; 184 base::RunLoop run_loop;
180 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS) 185 HistoryServiceFactory::GetForProfile(profile, Profile::EXPLICIT_ACCESS)
181 ->FlushForTest(run_loop.QuitClosure()); 186 ->FlushForTest(run_loop.QuitClosure());
182 run_loop.Run(); 187 run_loop.Run();
183 // Then make sure anything bounced back to the main thread has been handled. 188 // Then make sure anything bounced back to the main thread has been handled.
184 base::RunLoop().RunUntilIdle(); 189 base::RunLoop().RunUntilIdle();
185 } 190 }
186 191
187 // Runs the last download finder on all loaded profiles, returning the found 192 // Runs the last download finder on all loaded profiles, returning the found
188 // download or an empty pointer if none was found. 193 // download or an empty pointer if none was found.
189 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> 194 scoped_ptr<ClientIncidentReport_DownloadDetails> RunLastDownloadFinder() {
190 RunLastDownloadFinder() {
191 base::RunLoop run_loop; 195 base::RunLoop run_loop;
192 196
193 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> 197 scoped_ptr<ClientIncidentReport_DownloadDetails> last_download;
194 last_download;
195 198
196 scoped_ptr<safe_browsing::LastDownloadFinder> finder( 199 scoped_ptr<LastDownloadFinder> finder(LastDownloadFinder::Create(
197 safe_browsing::LastDownloadFinder::Create( 200 GetDownloadDetailsGetter(),
198 base::Bind(&LastDownloadFinderTest::OnLastDownload, 201 base::Bind(&LastDownloadFinderTest::OnLastDownload,
199 base::Unretained(this), 202 base::Unretained(this),
200 &last_download, 203 &last_download,
201 run_loop.QuitClosure()))); 204 run_loop.QuitClosure())));
202 205
203 if (finder) 206 if (finder)
204 run_loop.Run(); 207 run_loop.Run();
205 208
206 return last_download.Pass(); 209 return last_download.Pass();
207 } 210 }
208 211
209 history::DownloadRow CreateTestDownloadRow() { 212 history::DownloadRow CreateTestDownloadRow() {
210 base::Time now(base::Time::Now()); 213 base::Time now(base::Time::Now());
211 return history::DownloadRow( 214 return history::DownloadRow(
(...skipping 11 matching lines...) Expand all
223 47LL, // total 226 47LL, // total
224 content::DownloadItem::COMPLETE, // download_state 227 content::DownloadItem::COMPLETE, // download_state
225 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, // danger_type 228 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, // danger_type
226 content::DOWNLOAD_INTERRUPT_REASON_NONE, // interrupt_reason, 229 content::DOWNLOAD_INTERRUPT_REASON_NONE, // interrupt_reason,
227 1, // id 230 1, // id
228 false, // download_opened 231 false, // download_opened
229 std::string(), // ext_id 232 std::string(), // ext_id
230 std::string()); // ext_name 233 std::string()); // ext_name
231 } 234 }
232 235
233 void ExpectNoDownloadFound(scoped_ptr< 236 void ExpectNoDownloadFound(
234 safe_browsing::ClientIncidentReport_DownloadDetails> download) { 237 scoped_ptr<ClientIncidentReport_DownloadDetails> download) {
235 EXPECT_FALSE(download); 238 EXPECT_FALSE(download);
236 } 239 }
237 240
238 void ExpectFoundTestDownload(scoped_ptr< 241 void ExpectFoundTestDownload(
239 safe_browsing::ClientIncidentReport_DownloadDetails> download) { 242 scoped_ptr<ClientIncidentReport_DownloadDetails> download) {
240 ASSERT_TRUE(download); 243 ASSERT_TRUE(download);
241 } 244 }
242 245
243 content::TestBrowserThreadBundle browser_thread_bundle_; 246 content::TestBrowserThreadBundle browser_thread_bundle_;
244 scoped_ptr<TestingProfileManager> profile_manager_; 247 scoped_ptr<TestingProfileManager> profile_manager_;
245 248
246 private: 249 private:
247 // A HistoryService::DownloadCreateCallback that asserts that the download was 250 // A HistoryService::DownloadCreateCallback that asserts that the download was
248 // created and runs |closure|. 251 // created and runs |closure|.
249 void ContinueOnDownloadCreated(const base::Closure& closure, bool created) { 252 void ContinueOnDownloadCreated(const base::Closure& closure, bool created) {
250 ASSERT_TRUE(created); 253 ASSERT_TRUE(created);
251 closure.Run(); 254 closure.Run();
252 } 255 }
253 256
254 // A HistoryService::DownloadCreateCallback that asserts that the download was 257 // A HistoryService::DownloadCreateCallback that asserts that the download was
255 // created. 258 // created.
256 void OnDownloadCreated(bool created) { ASSERT_TRUE(created); } 259 void OnDownloadCreated(bool created) { ASSERT_TRUE(created); }
257 260
261 void GetDownloadDetails(
262 content::BrowserContext* context,
263 const DownloadMetadataManager::GetDownloadDetailsCallback& callback) {
264 callback.Run(scoped_ptr<ClientIncidentReport_DownloadDetails>());
265 }
266
258 int profile_number_; 267 int profile_number_;
259 }; 268 };
260 269
261 // Tests that nothing happens if there are no profiles at all. 270 // Tests that nothing happens if there are no profiles at all.
262 TEST_F(LastDownloadFinderTest, NoProfiles) { 271 TEST_F(LastDownloadFinderTest, NoProfiles) {
263 ExpectNoDownloadFound(RunLastDownloadFinder()); 272 ExpectNoDownloadFound(RunLastDownloadFinder());
264 } 273 }
265 274
266 // Tests that nothing happens other than the callback being invoked if there are 275 // Tests that nothing happens other than the callback being invoked if there are
267 // no profiles participating in safe browsing. 276 // no profiles participating in safe browsing.
(...skipping 20 matching lines...) Expand all
288 297
289 // Tests that there is no crash if the finder is deleted before results arrive. 298 // Tests that there is no crash if the finder is deleted before results arrive.
290 TEST_F(LastDownloadFinderTest, DeleteBeforeResults) { 299 TEST_F(LastDownloadFinderTest, DeleteBeforeResults) {
291 // Create a profile with a history service that is opted-in. 300 // Create a profile with a history service that is opted-in.
292 TestingProfile* profile = CreateProfile(SAFE_BROWSING_OPT_IN); 301 TestingProfile* profile = CreateProfile(SAFE_BROWSING_OPT_IN);
293 302
294 // Add a download. 303 // Add a download.
295 AddDownload(profile, CreateTestDownloadRow()); 304 AddDownload(profile, CreateTestDownloadRow());
296 305
297 // Start a finder and kill it before the search completes. 306 // Start a finder and kill it before the search completes.
298 safe_browsing::LastDownloadFinder::Create( 307 LastDownloadFinder::Create(GetDownloadDetailsGetter(),
299 base::Bind(&LastDownloadFinderTest::NeverCalled, base::Unretained(this))) 308 base::Bind(&LastDownloadFinderTest::NeverCalled,
300 .reset(); 309 base::Unretained(this))).reset();
301 310
302 // Flush tasks on the history backend thread. 311 // Flush tasks on the history backend thread.
303 FlushHistoryBackend(profile); 312 FlushHistoryBackend(profile);
304 } 313 }
305 314
306 // Tests that a download in profile added after the search is begun is found. 315 // Tests that a download in profile added after the search is begun is found.
307 TEST_F(LastDownloadFinderTest, AddProfileAfterStarting) { 316 TEST_F(LastDownloadFinderTest, AddProfileAfterStarting) {
308 // Create a profile with a history service that is opted-in. 317 // Create a profile with a history service that is opted-in.
309 CreateProfile(SAFE_BROWSING_OPT_IN); 318 CreateProfile(SAFE_BROWSING_OPT_IN);
310 319
311 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> last_download; 320 scoped_ptr<ClientIncidentReport_DownloadDetails> last_download;
312 base::RunLoop run_loop; 321 base::RunLoop run_loop;
313 322
314 // Post a task that will create a second profile once the main loop is run. 323 // Post a task that will create a second profile once the main loop is run.
315 base::MessageLoop::current()->PostTask( 324 base::MessageLoop::current()->PostTask(
316 FROM_HERE, 325 FROM_HERE,
317 base::Bind(&LastDownloadFinderTest::CreateProfileWithDownload, 326 base::Bind(&LastDownloadFinderTest::CreateProfileWithDownload,
318 base::Unretained(this))); 327 base::Unretained(this)));
319 328
320 // Create a finder that we expect will find a download in the second profile. 329 // Create a finder that we expect will find a download in the second profile.
321 scoped_ptr<safe_browsing::LastDownloadFinder> finder( 330 scoped_ptr<LastDownloadFinder> finder(LastDownloadFinder::Create(
322 safe_browsing::LastDownloadFinder::Create( 331 GetDownloadDetailsGetter(),
323 base::Bind(&LastDownloadFinderTest::OnLastDownload, 332 base::Bind(&LastDownloadFinderTest::OnLastDownload,
324 base::Unretained(this), 333 base::Unretained(this),
325 &last_download, 334 &last_download,
326 run_loop.QuitClosure()))); 335 run_loop.QuitClosure())));
327 336
328 run_loop.Run(); 337 run_loop.Run();
329 338
330 ExpectFoundTestDownload(last_download.Pass()); 339 ExpectFoundTestDownload(last_download.Pass());
331 } 340 }
341
342 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698