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

Side by Side Diff: chrome/browser/download/download_manager_unittest.cc

Issue 8468020: Propagate the SafeBrowsing download protection verdict to the DownloadItem. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Merge Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <set> 5 #include <set>
6 #include <string> 6 #include <string>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/i18n/number_formatting.h" 10 #include "base/i18n/number_formatting.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 scoped_refptr<content::DownloadBuffer> download_buffer_; 136 scoped_refptr<content::DownloadBuffer> download_buffer_;
137 137
138 DownloadFileManager* file_manager() { 138 DownloadFileManager* file_manager() {
139 if (!file_manager_) { 139 if (!file_manager_) {
140 file_manager_ = new DownloadFileManager(NULL); 140 file_manager_ = new DownloadFileManager(NULL);
141 download_manager_->SetFileManager(file_manager_); 141 download_manager_->SetFileManager(file_manager_);
142 } 142 }
143 return file_manager_; 143 return file_manager_;
144 } 144 }
145 145
146 // Make sure download item |id| was set with correct safety state for
147 // given |is_dangerous_file| and |is_dangerous_url|.
148 bool VerifySafetyState(bool is_dangerous_file,
149 bool is_dangerous_url,
150 int id) {
151 DownloadItem::SafetyState safety_state =
152 download_manager_->GetDownloadItem(id)->safety_state();
153 return (is_dangerous_file || is_dangerous_url) ?
154 safety_state != DownloadItem::SAFE : safety_state == DownloadItem::SAFE;
155 }
156
157 DISALLOW_COPY_AND_ASSIGN(DownloadManagerTest); 146 DISALLOW_COPY_AND_ASSIGN(DownloadManagerTest);
158 }; 147 };
159 148
160 const char* DownloadManagerTest::kTestData = "a;sdlfalsdfjalsdkfjad"; 149 const char* DownloadManagerTest::kTestData = "a;sdlfalsdfjalsdkfjad";
161 const size_t DownloadManagerTest::kTestDataLen = 150 const size_t DownloadManagerTest::kTestDataLen =
162 strlen(DownloadManagerTest::kTestData); 151 strlen(DownloadManagerTest::kTestData);
163 152
164 // A DownloadFile that we can inject errors into. 153 // A DownloadFile that we can inject errors into.
165 class DownloadFileWithErrors : public DownloadFileImpl { 154 class DownloadFileWithErrors : public DownloadFileImpl {
166 public: 155 public:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 false, }, 244 false, },
256 { "http://www.foo.com/always_prompt.jar", 245 { "http://www.foo.com/always_prompt.jar",
257 "application/jar", 246 "application/jar",
258 false, 247 false,
259 true, 248 true,
260 true, }, 249 true, },
261 }; 250 };
262 251
263 const struct { 252 const struct {
264 FilePath::StringType suggested_path; 253 FilePath::StringType suggested_path;
265 bool is_dangerous_file; 254 DownloadStateInfo::DangerType danger;
266 bool is_dangerous_url;
267 bool finish_before_rename; 255 bool finish_before_rename;
268 int expected_rename_count; 256 int expected_rename_count;
269 } kDownloadRenameCases[] = { 257 } kDownloadRenameCases[] = {
270 // Safe download, download finishes BEFORE file name determined. 258 // Safe download, download finishes BEFORE file name determined.
271 // Renamed twice (linear path through UI). Crdownload file does not need 259 // Renamed twice (linear path through UI). Crdownload file does not need
272 // to be deleted. 260 // to be deleted.
273 { FILE_PATH_LITERAL("foo.zip"), false, false, true, 2, }, 261 { FILE_PATH_LITERAL("foo.zip"), DownloadStateInfo::NOT_DANGEROUS, true, 2, },
274 // Dangerous download (file is dangerous or download URL is not safe or both), 262 // Potentially dangerous download (e.g., file is dangerous), download finishes
275 // download finishes BEFORE file name determined. Needs to be renamed only 263 // BEFORE file name determined. Needs to be renamed only once.
276 // once. 264 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"),
277 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), true, false, true, 1, }, 265 DownloadStateInfo::MAYBE_DANGEROUS_CONTENT, true, 1, },
278 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), false, true, true, 1, }, 266 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"),
279 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), true, true, true, 1, }, 267 DownloadStateInfo::DANGEROUS_FILE, true, 1, },
280 // Safe download, download finishes AFTER file name determined. 268 // Safe download, download finishes AFTER file name determined.
281 // Needs to be renamed twice. 269 // Needs to be renamed twice.
282 { FILE_PATH_LITERAL("foo.zip"), false, false, false, 2, }, 270 { FILE_PATH_LITERAL("foo.zip"), DownloadStateInfo::NOT_DANGEROUS, false, 2, },
283 // Dangerous download, download finishes AFTER file name determined. 271 // Potentially dangerous download, download finishes AFTER file name
284 // Needs to be renamed only once. 272 // determined. Needs to be renamed only once.
285 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), true, false, false, 1, }, 273 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"),
286 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), false, true, false, 1, }, 274 DownloadStateInfo::MAYBE_DANGEROUS_CONTENT, false, 1, },
287 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"), true, true, false, 1, }, 275 { FILE_PATH_LITERAL("Unconfirmed xxx.crdownload"),
276 DownloadStateInfo::DANGEROUS_FILE, false, 1, },
288 }; 277 };
289 278
290 // This is an observer that records what download IDs have opened a select 279 // This is an observer that records what download IDs have opened a select
291 // file dialog. 280 // file dialog.
292 class SelectFileObserver : public DownloadManager::Observer { 281 class SelectFileObserver : public DownloadManager::Observer {
293 public: 282 public:
294 explicit SelectFileObserver(DownloadManager* download_manager) 283 explicit SelectFileObserver(DownloadManager* download_manager)
295 : download_manager_(download_manager) { 284 : download_manager_(download_manager) {
296 DCHECK(download_manager_.get()); 285 DCHECK(download_manager_.get());
297 download_manager_->AddObserver(this); 286 download_manager_->AddObserver(this);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 download_file->SetExpectedPath(0, new_path); 417 download_file->SetExpectedPath(0, new_path);
429 } else { 418 } else {
430 ASSERT_EQ(2, kDownloadRenameCases[i].expected_rename_count); 419 ASSERT_EQ(2, kDownloadRenameCases[i].expected_rename_count);
431 FilePath crdownload(download_util::GetCrDownloadPath(new_path)); 420 FilePath crdownload(download_util::GetCrDownloadPath(new_path));
432 download_file->SetExpectedPath(0, crdownload); 421 download_file->SetExpectedPath(0, crdownload);
433 download_file->SetExpectedPath(1, new_path); 422 download_file->SetExpectedPath(1, new_path);
434 } 423 }
435 download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle()); 424 download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
436 DownloadItem* download = GetActiveDownloadItem(i); 425 DownloadItem* download = GetActiveDownloadItem(i);
437 ASSERT_TRUE(download != NULL); 426 ASSERT_TRUE(download != NULL);
438 if (kDownloadRenameCases[i].is_dangerous_file) 427 DownloadStateInfo state = download->state_info();
439 download->MarkFileDangerous(); 428 state.danger = kDownloadRenameCases[i].danger;
440 if (kDownloadRenameCases[i].is_dangerous_url) 429 download->SetFileCheckResults(state);
441 download->MarkUrlDangerous();
442 430
443 int32* id_ptr = new int32; 431 int32* id_ptr = new int32;
444 *id_ptr = i; // Deleted in FileSelected(). 432 *id_ptr = i; // Deleted in FileSelected().
445 if (kDownloadRenameCases[i].finish_before_rename) { 433 if (kDownloadRenameCases[i].finish_before_rename) {
446 OnResponseCompleted(i, 1024, std::string("fake_hash")); 434 OnResponseCompleted(i, 1024, std::string("fake_hash"));
447 message_loop_.RunAllPending(); 435 message_loop_.RunAllPending();
448 FileSelected(new_path, id_ptr); 436 FileSelected(new_path, id_ptr);
449 } else { 437 } else {
450 FileSelected(new_path, id_ptr); 438 FileSelected(new_path, id_ptr);
451 message_loop_.RunAllPending(); 439 message_loop_.RunAllPending();
452 OnResponseCompleted(i, 1024, std::string("fake_hash")); 440 OnResponseCompleted(i, 1024, std::string("fake_hash"));
453 } 441 }
454
455 message_loop_.RunAllPending(); 442 message_loop_.RunAllPending();
456 EXPECT_EQ( 443 EXPECT_EQ(
457 kDownloadRenameCases[i].expected_rename_count, 444 kDownloadRenameCases[i].expected_rename_count,
458 recorder.Count(MockDownloadFile::StatisticsRecorder::STAT_RENAME)); 445 recorder.Count(MockDownloadFile::StatisticsRecorder::STAT_RENAME));
459 EXPECT_TRUE(VerifySafetyState(kDownloadRenameCases[i].is_dangerous_file,
460 kDownloadRenameCases[i].is_dangerous_url,
461 i));
462 } 446 }
463 } 447 }
464 448
465 TEST_F(DownloadManagerTest, DownloadInterruptTest) { 449 TEST_F(DownloadManagerTest, DownloadInterruptTest) {
466 using ::testing::_; 450 using ::testing::_;
467 using ::testing::CreateFunctor; 451 using ::testing::CreateFunctor;
468 using ::testing::Invoke; 452 using ::testing::Invoke;
469 using ::testing::Return; 453 using ::testing::Return;
470 454
471 // Normally, the download system takes ownership of info, and is 455 // Normally, the download system takes ownership of info, and is
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 EXPECT_FALSE(observer->hit_state(DownloadItem::REMOVING)); 856 EXPECT_FALSE(observer->hit_state(DownloadItem::REMOVING));
873 EXPECT_TRUE(observer->was_updated()); 857 EXPECT_TRUE(observer->was_updated());
874 EXPECT_FALSE(observer->was_opened()); 858 EXPECT_FALSE(observer->was_opened());
875 EXPECT_TRUE(download->file_externally_removed()); 859 EXPECT_TRUE(download->file_externally_removed());
876 EXPECT_EQ(DownloadItem::COMPLETE, download->state()); 860 EXPECT_EQ(DownloadItem::COMPLETE, download->state());
877 EXPECT_EQ(download_item_model->GetStatusText(), 861 EXPECT_EQ(download_item_model->GetStatusText(),
878 l10n_util::GetStringUTF16(IDS_DOWNLOAD_STATUS_REMOVED)); 862 l10n_util::GetStringUTF16(IDS_DOWNLOAD_STATUS_REMOVED));
879 863
880 EXPECT_FALSE(file_util::PathExists(new_path)); 864 EXPECT_FALSE(file_util::PathExists(new_path));
881 } 865 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698