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

Side by Side Diff: chrome/browser/safe_browsing/download_feedback_service_unittest.cc

Issue 2696973002: Allow Safe Browsing backend to select downloads to upload. (Closed)
Patch Set: Switch histogram to use enum, per isherman Created 3 years, 10 months 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/download_feedback_service.h" 5 #include "chrome/browser/safe_browsing/download_feedback_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <vector> 10 #include <vector>
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 106
107 size_t num_feedbacks() const { 107 size_t num_feedbacks() const {
108 return feedbacks_.size(); 108 return feedbacks_.size();
109 } 109 }
110 110
111 private: 111 private:
112 std::vector<FakeDownloadFeedback*> feedbacks_; 112 std::vector<FakeDownloadFeedback*> feedbacks_;
113 }; 113 };
114 114
115 bool WillStorePings(DownloadProtectionService::DownloadCheckResult result, 115 bool WillStorePings(DownloadProtectionService::DownloadCheckResult result,
116 bool upload_requested,
116 int64_t size) { 117 int64_t size) {
117 content::MockDownloadItem item; 118 content::MockDownloadItem item;
118 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(size)); 119 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(size));
119 120
120 EXPECT_FALSE(DownloadFeedbackService::IsEnabledForDownload(item)); 121 EXPECT_FALSE(DownloadFeedbackService::IsEnabledForDownload(item));
121 DownloadFeedbackService::MaybeStorePingsForDownload(result, &item, "a", "b"); 122 DownloadFeedbackService::MaybeStorePingsForDownload(result, upload_requested,
123 &item, "a", "b");
122 return DownloadFeedbackService::IsEnabledForDownload(item); 124 return DownloadFeedbackService::IsEnabledForDownload(item);
123 } 125 }
124 126
125 } // namespace 127 } // namespace
126 128
127 class DownloadFeedbackServiceTest : public testing::Test { 129 class DownloadFeedbackServiceTest : public testing::Test {
128 public: 130 public:
129 DownloadFeedbackServiceTest() 131 DownloadFeedbackServiceTest()
130 : file_task_runner_(content::BrowserThread::GetTaskRunnerForThread( 132 : file_task_runner_(content::BrowserThread::GetTaskRunnerForThread(
131 content::BrowserThread::FILE)), 133 content::BrowserThread::FILE)),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; 167 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
166 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 168 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
167 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; 169 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
168 FakeDownloadFeedbackFactory download_feedback_factory_; 170 FakeDownloadFeedbackFactory download_feedback_factory_;
169 }; 171 };
170 172
171 TEST_F(DownloadFeedbackServiceTest, MaybeStorePingsForDownload) { 173 TEST_F(DownloadFeedbackServiceTest, MaybeStorePingsForDownload) {
172 const int64_t ok_size = DownloadFeedback::kMaxUploadSize; 174 const int64_t ok_size = DownloadFeedback::kMaxUploadSize;
173 const int64_t bad_size = DownloadFeedback::kMaxUploadSize + 1; 175 const int64_t bad_size = DownloadFeedback::kMaxUploadSize + 1;
174 176
175 EXPECT_FALSE(WillStorePings(DownloadProtectionService::SAFE, ok_size)); 177 std::vector<bool> upload_requests = {false, true};
176 EXPECT_FALSE(WillStorePings(DownloadProtectionService::DANGEROUS, ok_size)); 178 for (bool upload_requested : upload_requests) {
177 EXPECT_TRUE(WillStorePings(DownloadProtectionService::UNCOMMON, ok_size)); 179 // SAFE will never upload
178 EXPECT_TRUE( 180 EXPECT_FALSE(WillStorePings(DownloadProtectionService::SAFE,
179 WillStorePings(DownloadProtectionService::DANGEROUS_HOST, ok_size)); 181 upload_requested, ok_size));
180 EXPECT_TRUE( 182 // Others will upload if requested.
181 WillStorePings(DownloadProtectionService::POTENTIALLY_UNWANTED, ok_size)); 183 EXPECT_EQ(upload_requested,
184 WillStorePings(DownloadProtectionService::UNKNOWN,
185 upload_requested, ok_size));
186 EXPECT_EQ(upload_requested,
187 WillStorePings(DownloadProtectionService::DANGEROUS,
188 upload_requested, ok_size));
189 EXPECT_EQ(upload_requested,
190 WillStorePings(DownloadProtectionService::UNCOMMON,
191 upload_requested, ok_size));
192 EXPECT_EQ(upload_requested,
193 WillStorePings(DownloadProtectionService::DANGEROUS_HOST,
194 upload_requested, ok_size));
195 EXPECT_EQ(upload_requested,
196 WillStorePings(DownloadProtectionService::POTENTIALLY_UNWANTED,
197 upload_requested, ok_size));
182 198
183 EXPECT_FALSE(WillStorePings(DownloadProtectionService::SAFE, bad_size)); 199 // Bad sizes never upload
184 EXPECT_FALSE(WillStorePings(DownloadProtectionService::DANGEROUS, bad_size)); 200 EXPECT_FALSE(WillStorePings(DownloadProtectionService::SAFE,
185 EXPECT_FALSE(WillStorePings(DownloadProtectionService::UNCOMMON, bad_size)); 201 upload_requested, bad_size));
186 EXPECT_FALSE( 202 EXPECT_FALSE(WillStorePings(DownloadProtectionService::UNKNOWN,
187 WillStorePings(DownloadProtectionService::DANGEROUS_HOST, bad_size)); 203 upload_requested, bad_size));
188 EXPECT_FALSE(WillStorePings(DownloadProtectionService::POTENTIALLY_UNWANTED, 204 EXPECT_FALSE(WillStorePings(DownloadProtectionService::DANGEROUS,
189 bad_size)); 205 upload_requested, bad_size));
206 EXPECT_FALSE(WillStorePings(DownloadProtectionService::UNCOMMON,
207 upload_requested, bad_size));
208 EXPECT_FALSE(WillStorePings(DownloadProtectionService::DANGEROUS_HOST,
209 upload_requested, bad_size));
210 EXPECT_FALSE(WillStorePings(DownloadProtectionService::POTENTIALLY_UNWANTED,
211 upload_requested, bad_size));
212 }
190 } 213 }
191 214
192 TEST_F(DownloadFeedbackServiceTest, SingleFeedbackCompleteAndDiscardDownload) { 215 TEST_F(DownloadFeedbackServiceTest, SingleFeedbackCompleteAndDiscardDownload) {
193 const base::FilePath file_path(CreateTestFile(0)); 216 const base::FilePath file_path(CreateTestFile(0));
194 const std::string ping_request = "ping"; 217 const std::string ping_request = "ping";
195 const std::string ping_response = "resp"; 218 const std::string ping_response = "resp";
196 219
197 content::DownloadItem::AcquireFileCallback download_discarded_callback; 220 content::DownloadItem::AcquireFileCallback download_discarded_callback;
198 221
199 content::MockDownloadItem item; 222 content::MockDownloadItem item;
200 EXPECT_CALL(item, GetDangerType()) 223 EXPECT_CALL(item, GetDangerType())
201 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT)); 224 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT));
202 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(1000)); 225 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(1000));
203 EXPECT_CALL(item, 226 EXPECT_CALL(item,
204 StealDangerousDownload(true /*delete_file_after_feedback*/, _)) 227 StealDangerousDownload(true /*delete_file_after_feedback*/, _))
205 .WillOnce(SaveArg<1>(&download_discarded_callback)); 228 .WillOnce(SaveArg<1>(&download_discarded_callback));
206 229
207 DownloadFeedbackService service(request_context_getter_.get(), 230 DownloadFeedbackService service(request_context_getter_.get(),
208 file_task_runner_.get()); 231 file_task_runner_.get());
209 service.MaybeStorePingsForDownload( 232 service.MaybeStorePingsForDownload(DownloadProtectionService::UNCOMMON,
210 DownloadProtectionService::UNCOMMON, &item, ping_request, ping_response); 233 true /* upload_requested */, &item,
234 ping_request, ping_response);
211 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item)); 235 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item));
212 service.BeginFeedbackForDownload(&item, DownloadCommands::DISCARD); 236 service.BeginFeedbackForDownload(&item, DownloadCommands::DISCARD);
213 ASSERT_FALSE(download_discarded_callback.is_null()); 237 ASSERT_FALSE(download_discarded_callback.is_null());
214 EXPECT_EQ(0U, num_feedbacks()); 238 EXPECT_EQ(0U, num_feedbacks());
215 239
216 download_discarded_callback.Run(file_path); 240 download_discarded_callback.Run(file_path);
217 ASSERT_EQ(1U, num_feedbacks()); 241 ASSERT_EQ(1U, num_feedbacks());
218 ASSERT_TRUE(feedback(0)); 242 ASSERT_TRUE(feedback(0));
219 EXPECT_TRUE(feedback(0)->start_called()); 243 EXPECT_TRUE(feedback(0)->start_called());
220 EXPECT_EQ(ping_request, feedback(0)->GetPingRequestForTesting()); 244 EXPECT_EQ(ping_request, feedback(0)->GetPingRequestForTesting());
(...skipping 19 matching lines...) Expand all
240 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(1000)); 264 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(1000));
241 EXPECT_CALL(item, 265 EXPECT_CALL(item,
242 StealDangerousDownload(false /*delete_file_after_feedback*/, _)) 266 StealDangerousDownload(false /*delete_file_after_feedback*/, _))
243 .WillOnce(SaveArg<1>(&download_discarded_callback)); 267 .WillOnce(SaveArg<1>(&download_discarded_callback));
244 EXPECT_CALL(item, ValidateDangerousDownload()).Times(1); 268 EXPECT_CALL(item, ValidateDangerousDownload()).Times(1);
245 GURL empty_url; 269 GURL empty_url;
246 EXPECT_CALL(item, GetURL()).WillOnce(ReturnRef(empty_url)); 270 EXPECT_CALL(item, GetURL()).WillOnce(ReturnRef(empty_url));
247 271
248 DownloadFeedbackService service(request_context_getter_.get(), 272 DownloadFeedbackService service(request_context_getter_.get(),
249 file_task_runner_.get()); 273 file_task_runner_.get());
250 service.MaybeStorePingsForDownload(DownloadProtectionService::UNCOMMON, &item, 274 service.MaybeStorePingsForDownload(DownloadProtectionService::UNCOMMON,
275 true /* upload_requested */, &item,
251 ping_request, ping_response); 276 ping_request, ping_response);
252 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item)); 277 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item));
253 service.BeginFeedbackForDownload(&item, DownloadCommands::KEEP); 278 service.BeginFeedbackForDownload(&item, DownloadCommands::KEEP);
254 ASSERT_FALSE(download_discarded_callback.is_null()); 279 ASSERT_FALSE(download_discarded_callback.is_null());
255 EXPECT_EQ(0U, num_feedbacks()); 280 EXPECT_EQ(0U, num_feedbacks());
256 281
257 download_discarded_callback.Run(file_path); 282 download_discarded_callback.Run(file_path);
258 ASSERT_EQ(1U, num_feedbacks()); 283 ASSERT_EQ(1U, num_feedbacks());
259 ASSERT_TRUE(feedback(0)); 284 ASSERT_TRUE(feedback(0));
260 EXPECT_TRUE(feedback(0)->start_called()); 285 EXPECT_TRUE(feedback(0)->start_called());
(...skipping 18 matching lines...) Expand all
279 base::FilePath file_path[kNumDownloads]; 304 base::FilePath file_path[kNumDownloads];
280 content::MockDownloadItem item[kNumDownloads]; 305 content::MockDownloadItem item[kNumDownloads];
281 for (size_t i = 0; i < kNumDownloads; ++i) { 306 for (size_t i = 0; i < kNumDownloads; ++i) {
282 file_path[i] = CreateTestFile(i); 307 file_path[i] = CreateTestFile(i);
283 EXPECT_CALL(item[i], GetDangerType()) 308 EXPECT_CALL(item[i], GetDangerType())
284 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT)); 309 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT));
285 EXPECT_CALL(item[i], GetReceivedBytes()).WillRepeatedly(Return(1000)); 310 EXPECT_CALL(item[i], GetReceivedBytes()).WillRepeatedly(Return(1000));
286 EXPECT_CALL(item[i], StealDangerousDownload(true, _)) 311 EXPECT_CALL(item[i], StealDangerousDownload(true, _))
287 .WillOnce(SaveArg<1>(&download_discarded_callback[i])); 312 .WillOnce(SaveArg<1>(&download_discarded_callback[i]));
288 DownloadFeedbackService::MaybeStorePingsForDownload( 313 DownloadFeedbackService::MaybeStorePingsForDownload(
289 DownloadProtectionService::UNCOMMON, &item[i], ping_request, 314 DownloadProtectionService::UNCOMMON, true /* upload_requested */,
290 ping_response); 315 &item[i], ping_request, ping_response);
291 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item[i])); 316 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item[i]));
292 } 317 }
293 318
294 { 319 {
295 DownloadFeedbackService service(request_context_getter_.get(), 320 DownloadFeedbackService service(request_context_getter_.get(),
296 file_task_runner_.get()); 321 file_task_runner_.get());
297 for (size_t i = 0; i < kNumDownloads; ++i) { 322 for (size_t i = 0; i < kNumDownloads; ++i) {
298 SCOPED_TRACE(i); 323 SCOPED_TRACE(i);
299 service.BeginFeedbackForDownload(&item[i], DownloadCommands::DISCARD); 324 service.BeginFeedbackForDownload(&item[i], DownloadCommands::DISCARD);
300 ASSERT_FALSE(download_discarded_callback[i].is_null()); 325 ASSERT_FALSE(download_discarded_callback[i].is_null());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 base::FilePath file_path[kNumDownloads]; 373 base::FilePath file_path[kNumDownloads];
349 content::MockDownloadItem item[kNumDownloads]; 374 content::MockDownloadItem item[kNumDownloads];
350 for (size_t i = 0; i < kNumDownloads; ++i) { 375 for (size_t i = 0; i < kNumDownloads; ++i) {
351 file_path[i] = CreateTestFile(i); 376 file_path[i] = CreateTestFile(i);
352 EXPECT_CALL(item[i], GetDangerType()) 377 EXPECT_CALL(item[i], GetDangerType())
353 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT)); 378 .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT));
354 EXPECT_CALL(item[i], GetReceivedBytes()).WillRepeatedly(Return(1000)); 379 EXPECT_CALL(item[i], GetReceivedBytes()).WillRepeatedly(Return(1000));
355 EXPECT_CALL(item[i], StealDangerousDownload(true, _)) 380 EXPECT_CALL(item[i], StealDangerousDownload(true, _))
356 .WillOnce(SaveArg<1>(&download_discarded_callback[i])); 381 .WillOnce(SaveArg<1>(&download_discarded_callback[i]));
357 DownloadFeedbackService::MaybeStorePingsForDownload( 382 DownloadFeedbackService::MaybeStorePingsForDownload(
358 DownloadProtectionService::UNCOMMON, &item[i], ping_request, 383 DownloadProtectionService::UNCOMMON, true /* upload_requested */,
359 ping_response); 384 &item[i], ping_request, ping_response);
360 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item[i])); 385 ASSERT_TRUE(DownloadFeedbackService::IsEnabledForDownload(item[i]));
361 } 386 }
362 387
363 { 388 {
364 DownloadFeedbackService service(request_context_getter_.get(), 389 DownloadFeedbackService service(request_context_getter_.get(),
365 file_task_runner_.get()); 390 file_task_runner_.get());
366 for (size_t i = 0; i < kNumDownloads; ++i) { 391 for (size_t i = 0; i < kNumDownloads; ++i) {
367 SCOPED_TRACE(i); 392 SCOPED_TRACE(i);
368 service.BeginFeedbackForDownload(&item[i], DownloadCommands::DISCARD); 393 service.BeginFeedbackForDownload(&item[i], DownloadCommands::DISCARD);
369 ASSERT_FALSE(download_discarded_callback[i].is_null()); 394 ASSERT_FALSE(download_discarded_callback[i].is_null());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 // was deleted. 429 // was deleted.
405 EXPECT_FALSE(base::PathExists(file_path[2])); 430 EXPECT_FALSE(base::PathExists(file_path[2]));
406 431
407 // These files should still exist since the FakeDownloadFeedback does not 432 // These files should still exist since the FakeDownloadFeedback does not
408 // delete them. 433 // delete them.
409 EXPECT_TRUE(base::PathExists(file_path[0])); 434 EXPECT_TRUE(base::PathExists(file_path[0]));
410 EXPECT_TRUE(base::PathExists(file_path[1])); 435 EXPECT_TRUE(base::PathExists(file_path[1]));
411 } 436 }
412 437
413 } // namespace safe_browsing 438 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/download_feedback_service.cc ('k') | chrome/browser/safe_browsing/download_protection_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698