| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/callback.h" | 5 #include "base/callback.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
| 10 #include "content/browser/byte_stream.h" | 10 #include "content/browser/byte_stream.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 class MockRequestHandle : public DownloadRequestHandleInterface { | 86 class MockRequestHandle : public DownloadRequestHandleInterface { |
| 87 public: | 87 public: |
| 88 MOCK_CONST_METHOD0(GetWebContents, WebContents*()); | 88 MOCK_CONST_METHOD0(GetWebContents, WebContents*()); |
| 89 MOCK_CONST_METHOD0(GetDownloadManager, DownloadManager*()); | 89 MOCK_CONST_METHOD0(GetDownloadManager, DownloadManager*()); |
| 90 MOCK_CONST_METHOD0(PauseRequest, void()); | 90 MOCK_CONST_METHOD0(PauseRequest, void()); |
| 91 MOCK_CONST_METHOD0(ResumeRequest, void()); | 91 MOCK_CONST_METHOD0(ResumeRequest, void()); |
| 92 MOCK_CONST_METHOD0(CancelRequest, void()); | 92 MOCK_CONST_METHOD0(CancelRequest, void()); |
| 93 MOCK_CONST_METHOD0(DebugString, std::string()); | 93 MOCK_CONST_METHOD0(DebugString, std::string()); |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 // Schedules a task to invoke the RenameCompletionCallback with |new_path| on | 96 class TestDownloadItemObserver : public DownloadItem::Observer { |
| 97 // the UI thread. Should only be used as the action for | |
| 98 // MockDownloadFile::Rename as follows: | |
| 99 // EXPECT_CALL(download_file, Rename*(_,_)) | |
| 100 // .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | |
| 101 // new_path)); | |
| 102 ACTION_P2(ScheduleRenameCallback, interrupt_reason, new_path) { | |
| 103 BrowserThread::PostTask( | |
| 104 BrowserThread::UI, FROM_HERE, | |
| 105 base::Bind(arg1, interrupt_reason, new_path)); | |
| 106 } | |
| 107 | |
| 108 } // namespace | |
| 109 | |
| 110 class DownloadItemTest : public testing::Test { | |
| 111 public: | 97 public: |
| 112 class MockObserver : public DownloadItem::Observer { | 98 explicit TestDownloadItemObserver(DownloadItem* item) |
| 113 public: | |
| 114 explicit MockObserver(DownloadItem* item) | |
| 115 : item_(item), | 99 : item_(item), |
| 116 last_state_(item->GetState()), | 100 last_state_(item->GetState()), |
| 117 removed_(false), | 101 removed_(false), |
| 118 destroyed_(false), | 102 destroyed_(false), |
| 119 updated_(false), | 103 updated_(false), |
| 120 interrupt_count_(0), | 104 interrupt_count_(0), |
| 121 resume_count_(0) { | 105 resume_count_(0) { |
| 122 item_->AddObserver(this); | 106 item_->AddObserver(this); |
| 107 } |
| 108 |
| 109 ~TestDownloadItemObserver() override { |
| 110 if (item_) |
| 111 item_->RemoveObserver(this); |
| 112 } |
| 113 |
| 114 bool download_removed() const { return removed_; } |
| 115 bool download_destroyed() const { return destroyed_; } |
| 116 int interrupt_count() const { return interrupt_count_; } |
| 117 int resume_count() const { return resume_count_; } |
| 118 |
| 119 bool CheckAndResetDownloadUpdated() { |
| 120 bool was_updated = updated_; |
| 121 updated_ = false; |
| 122 return was_updated; |
| 123 } |
| 124 |
| 125 private: |
| 126 void OnDownloadRemoved(DownloadItem* download) override { |
| 127 DVLOG(20) << " " << __FUNCTION__ |
| 128 << " download = " << download->DebugString(false); |
| 129 removed_ = true; |
| 130 } |
| 131 |
| 132 void OnDownloadUpdated(DownloadItem* download) override { |
| 133 DVLOG(20) << " " << __FUNCTION__ |
| 134 << " download = " << download->DebugString(false); |
| 135 updated_ = true; |
| 136 DownloadItem::DownloadState new_state = download->GetState(); |
| 137 if (last_state_ == DownloadItem::IN_PROGRESS && |
| 138 new_state == DownloadItem::INTERRUPTED) { |
| 139 interrupt_count_++; |
| 123 } | 140 } |
| 141 if (last_state_ == DownloadItem::INTERRUPTED && |
| 142 new_state == DownloadItem::IN_PROGRESS) { |
| 143 resume_count_++; |
| 144 } |
| 145 last_state_ = new_state; |
| 146 } |
| 124 | 147 |
| 125 ~MockObserver() override { | 148 void OnDownloadOpened(DownloadItem* download) override { |
| 126 if (item_) item_->RemoveObserver(this); | 149 DVLOG(20) << " " << __FUNCTION__ |
| 127 } | 150 << " download = " << download->DebugString(false); |
| 151 } |
| 128 | 152 |
| 129 void OnDownloadRemoved(DownloadItem* download) override { | 153 void OnDownloadDestroyed(DownloadItem* download) override { |
| 130 DVLOG(20) << " " << __FUNCTION__ | 154 DVLOG(20) << " " << __FUNCTION__ |
| 131 << " download = " << download->DebugString(false); | 155 << " download = " << download->DebugString(false); |
| 132 removed_ = true; | 156 destroyed_ = true; |
| 133 } | 157 item_->RemoveObserver(this); |
| 158 item_ = NULL; |
| 159 } |
| 134 | 160 |
| 135 void OnDownloadUpdated(DownloadItem* download) override { | 161 DownloadItem* item_; |
| 136 DVLOG(20) << " " << __FUNCTION__ | 162 DownloadItem::DownloadState last_state_; |
| 137 << " download = " << download->DebugString(false); | 163 bool removed_; |
| 138 updated_ = true; | 164 bool destroyed_; |
| 139 DownloadItem::DownloadState new_state = download->GetState(); | 165 bool updated_; |
| 140 if (last_state_ == DownloadItem::IN_PROGRESS && | 166 int interrupt_count_; |
| 141 new_state == DownloadItem::INTERRUPTED) { | 167 int resume_count_; |
| 142 interrupt_count_++; | 168 }; |
| 143 } | |
| 144 if (last_state_ == DownloadItem::INTERRUPTED && | |
| 145 new_state == DownloadItem::IN_PROGRESS) { | |
| 146 resume_count_++; | |
| 147 } | |
| 148 last_state_ = new_state; | |
| 149 } | |
| 150 | 169 |
| 151 void OnDownloadOpened(DownloadItem* download) override { | 170 // Schedules a task to invoke the RenameCompletionCallback with |new_path| on |
| 152 DVLOG(20) << " " << __FUNCTION__ | 171 // the UI thread. Should only be used as the action for |
| 153 << " download = " << download->DebugString(false); | 172 // MockDownloadFile::Rename as follows: |
| 154 } | 173 // EXPECT_CALL(download_file, Rename*(_,_)) |
| 174 // .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 175 // new_path)); |
| 176 ACTION_P2(ScheduleRenameCallback, interrupt_reason, new_path) { |
| 177 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 178 base::Bind(arg1, interrupt_reason, new_path)); |
| 179 } |
| 155 | 180 |
| 156 void OnDownloadDestroyed(DownloadItem* download) override { | 181 } // namespace |
| 157 DVLOG(20) << " " << __FUNCTION__ | |
| 158 << " download = " << download->DebugString(false); | |
| 159 destroyed_ = true; | |
| 160 item_->RemoveObserver(this); | |
| 161 item_ = NULL; | |
| 162 } | |
| 163 | 182 |
| 164 bool CheckRemoved() { | 183 class DownloadItemTest : public testing::Test { |
| 165 return removed_; | 184 public: |
| 166 } | |
| 167 | |
| 168 bool CheckDestroyed() { | |
| 169 return destroyed_; | |
| 170 } | |
| 171 | |
| 172 bool CheckUpdated() { | |
| 173 bool was_updated = updated_; | |
| 174 updated_ = false; | |
| 175 return was_updated; | |
| 176 } | |
| 177 | |
| 178 int GetInterruptCount() { | |
| 179 return interrupt_count_; | |
| 180 } | |
| 181 | |
| 182 int GetResumeCount() { | |
| 183 return resume_count_; | |
| 184 } | |
| 185 | |
| 186 private: | |
| 187 DownloadItem* item_; | |
| 188 DownloadItem::DownloadState last_state_; | |
| 189 bool removed_; | |
| 190 bool destroyed_; | |
| 191 bool updated_; | |
| 192 int interrupt_count_; | |
| 193 int resume_count_; | |
| 194 }; | |
| 195 | |
| 196 DownloadItemTest() | 185 DownloadItemTest() |
| 197 : ui_thread_(BrowserThread::UI, &loop_), | 186 : ui_thread_(BrowserThread::UI, &loop_), |
| 198 file_thread_(BrowserThread::FILE, &loop_), | 187 file_thread_(BrowserThread::FILE, &loop_), |
| 199 delegate_() { | 188 delegate_() { |
| 200 } | 189 } |
| 201 | 190 |
| 202 ~DownloadItemTest() { | 191 ~DownloadItemTest() { |
| 203 } | 192 } |
| 204 | 193 |
| 205 virtual void SetUp() { | 194 virtual void SetUp() { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 // Tests to ensure calls that change a DownloadItem generate an update to | 322 // Tests to ensure calls that change a DownloadItem generate an update to |
| 334 // observers. | 323 // observers. |
| 335 // State changing functions not tested: | 324 // State changing functions not tested: |
| 336 // void OpenDownload(); | 325 // void OpenDownload(); |
| 337 // void ShowDownloadInShell(); | 326 // void ShowDownloadInShell(); |
| 338 // void CompleteDelayedDownload(); | 327 // void CompleteDelayedDownload(); |
| 339 // set_* mutators | 328 // set_* mutators |
| 340 | 329 |
| 341 TEST_F(DownloadItemTest, NotificationAfterUpdate) { | 330 TEST_F(DownloadItemTest, NotificationAfterUpdate) { |
| 342 DownloadItemImpl* item = CreateDownloadItem(); | 331 DownloadItemImpl* item = CreateDownloadItem(); |
| 343 MockObserver observer(item); | 332 TestDownloadItemObserver observer(item); |
| 344 | 333 |
| 345 item->DestinationUpdate(kDownloadChunkSize, kDownloadSpeed, std::string()); | 334 item->DestinationUpdate(kDownloadChunkSize, kDownloadSpeed, std::string()); |
| 346 ASSERT_TRUE(observer.CheckUpdated()); | 335 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 347 EXPECT_EQ(kDownloadSpeed, item->CurrentSpeed()); | 336 EXPECT_EQ(kDownloadSpeed, item->CurrentSpeed()); |
| 348 } | 337 } |
| 349 | 338 |
| 350 TEST_F(DownloadItemTest, NotificationAfterCancel) { | 339 TEST_F(DownloadItemTest, NotificationAfterCancel) { |
| 351 DownloadItemImpl* user_cancel = CreateDownloadItem(); | 340 DownloadItemImpl* user_cancel = CreateDownloadItem(); |
| 352 MockDownloadFile* download_file = | 341 MockDownloadFile* download_file = |
| 353 AddDownloadFileToDownloadItem(user_cancel, NULL); | 342 AddDownloadFileToDownloadItem(user_cancel, NULL); |
| 354 EXPECT_CALL(*download_file, Cancel()); | 343 EXPECT_CALL(*download_file, Cancel()); |
| 355 MockObserver observer1(user_cancel); | 344 TestDownloadItemObserver observer1(user_cancel); |
| 356 | 345 |
| 357 user_cancel->Cancel(true); | 346 user_cancel->Cancel(true); |
| 358 ASSERT_TRUE(observer1.CheckUpdated()); | 347 ASSERT_TRUE(observer1.CheckAndResetDownloadUpdated()); |
| 359 | 348 |
| 360 DownloadItemImpl* system_cancel = CreateDownloadItem(); | 349 DownloadItemImpl* system_cancel = CreateDownloadItem(); |
| 361 download_file = AddDownloadFileToDownloadItem(system_cancel, NULL); | 350 download_file = AddDownloadFileToDownloadItem(system_cancel, NULL); |
| 362 EXPECT_CALL(*download_file, Cancel()); | 351 EXPECT_CALL(*download_file, Cancel()); |
| 363 MockObserver observer2(system_cancel); | 352 TestDownloadItemObserver observer2(system_cancel); |
| 364 | 353 |
| 365 system_cancel->Cancel(false); | 354 system_cancel->Cancel(false); |
| 366 ASSERT_TRUE(observer2.CheckUpdated()); | 355 ASSERT_TRUE(observer2.CheckAndResetDownloadUpdated()); |
| 367 } | 356 } |
| 368 | 357 |
| 369 TEST_F(DownloadItemTest, NotificationAfterComplete) { | 358 TEST_F(DownloadItemTest, NotificationAfterComplete) { |
| 370 DownloadItemImpl* item = CreateDownloadItem(); | 359 DownloadItemImpl* item = CreateDownloadItem(); |
| 371 MockObserver observer(item); | 360 TestDownloadItemObserver observer(item); |
| 372 | 361 |
| 373 item->OnAllDataSaved(DownloadItem::kEmptyFileHash); | 362 item->OnAllDataSaved(DownloadItem::kEmptyFileHash); |
| 374 ASSERT_TRUE(observer.CheckUpdated()); | 363 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 375 | 364 |
| 376 item->MarkAsComplete(); | 365 item->MarkAsComplete(); |
| 377 ASSERT_TRUE(observer.CheckUpdated()); | 366 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 378 } | 367 } |
| 379 | 368 |
| 380 TEST_F(DownloadItemTest, NotificationAfterDownloadedFileRemoved) { | 369 TEST_F(DownloadItemTest, NotificationAfterDownloadedFileRemoved) { |
| 381 DownloadItemImpl* item = CreateDownloadItem(); | 370 DownloadItemImpl* item = CreateDownloadItem(); |
| 382 MockObserver observer(item); | 371 TestDownloadItemObserver observer(item); |
| 383 | 372 |
| 384 item->OnDownloadedFileRemoved(); | 373 item->OnDownloadedFileRemoved(); |
| 385 ASSERT_TRUE(observer.CheckUpdated()); | 374 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 386 } | 375 } |
| 387 | 376 |
| 388 TEST_F(DownloadItemTest, NotificationAfterInterrupted) { | 377 TEST_F(DownloadItemTest, NotificationAfterInterrupted) { |
| 389 DownloadItemImpl* item = CreateDownloadItem(); | 378 DownloadItemImpl* item = CreateDownloadItem(); |
| 390 MockDownloadFile* download_file = | 379 MockDownloadFile* download_file = |
| 391 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 380 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 392 EXPECT_CALL(*download_file, Cancel()); | 381 EXPECT_CALL(*download_file, Cancel()); |
| 393 MockObserver observer(item); | 382 TestDownloadItemObserver observer(item); |
| 394 | 383 |
| 395 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_,_)) | 384 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_,_)) |
| 396 .Times(0); | 385 .Times(0); |
| 397 | 386 |
| 398 item->DestinationObserverAsWeakPtr()->DestinationError( | 387 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 399 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 388 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
| 400 ASSERT_TRUE(observer.CheckUpdated()); | 389 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 401 } | 390 } |
| 402 | 391 |
| 403 TEST_F(DownloadItemTest, NotificationAfterDestroyed) { | 392 TEST_F(DownloadItemTest, NotificationAfterDestroyed) { |
| 404 DownloadItemImpl* item = CreateDownloadItem(); | 393 DownloadItemImpl* item = CreateDownloadItem(); |
| 405 MockObserver observer(item); | 394 TestDownloadItemObserver observer(item); |
| 406 | 395 |
| 407 DestroyDownloadItem(item); | 396 DestroyDownloadItem(item); |
| 408 ASSERT_TRUE(observer.CheckDestroyed()); | 397 ASSERT_TRUE(observer.download_destroyed()); |
| 409 } | 398 } |
| 410 | 399 |
| 411 TEST_F(DownloadItemTest, ContinueAfterInterrupted) { | 400 TEST_F(DownloadItemTest, ContinueAfterInterrupted) { |
| 412 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 401 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 413 switches::kEnableDownloadResumption); | 402 switches::kEnableDownloadResumption); |
| 414 | 403 |
| 415 TestBrowserContext test_browser_context; | 404 TestBrowserContext test_browser_context; |
| 416 DownloadItemImpl* item = CreateDownloadItem(); | 405 DownloadItemImpl* item = CreateDownloadItem(); |
| 417 MockObserver observer(item); | 406 TestDownloadItemObserver observer(item); |
| 418 DownloadItemImplDelegate::DownloadTargetCallback callback; | 407 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 419 MockDownloadFile* download_file = | 408 MockDownloadFile* download_file = |
| 420 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 409 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 421 | 410 |
| 422 // Interrupt the download, using a continuable interrupt. | 411 // Interrupt the download, using a continuable interrupt. |
| 423 EXPECT_CALL(*download_file, FullPath()) | 412 EXPECT_CALL(*download_file, FullPath()) |
| 424 .WillOnce(Return(base::FilePath())); | 413 .WillOnce(Return(base::FilePath())); |
| 425 EXPECT_CALL(*download_file, Detach()); | 414 EXPECT_CALL(*download_file, Detach()); |
| 426 EXPECT_CALL(*mock_delegate(), GetBrowserContext()) | 415 EXPECT_CALL(*mock_delegate(), GetBrowserContext()) |
| 427 .WillRepeatedly(Return(&test_browser_context)); | 416 .WillRepeatedly(Return(&test_browser_context)); |
| 428 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_, _)).Times(1); | 417 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_, _)).Times(1); |
| 429 item->DestinationObserverAsWeakPtr()->DestinationError( | 418 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 430 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); | 419 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); |
| 431 ASSERT_TRUE(observer.CheckUpdated()); | 420 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 432 ASSERT_EQ(1, observer.GetInterruptCount()); | 421 ASSERT_EQ(1, observer.interrupt_count()); |
| 433 | 422 |
| 434 // Test expectations verify that ResumeInterruptedDownload() is called (by way | 423 // Test expectations verify that ResumeInterruptedDownload() is called (by way |
| 435 // of MockResumeInterruptedDownload) after the download is interrupted. But | 424 // of MockResumeInterruptedDownload) after the download is interrupted. But |
| 436 // the mock doesn't follow through with the resumption. | 425 // the mock doesn't follow through with the resumption. |
| 437 // ResumeInterruptedDownload() being called is sufficient for verifying that | 426 // ResumeInterruptedDownload() being called is sufficient for verifying that |
| 438 // the automatic resumption was triggered. | 427 // the automatic resumption was triggered. |
| 439 RunAllPendingInMessageLoops(); | 428 RunAllPendingInMessageLoops(); |
| 440 | 429 |
| 441 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); | 430 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); |
| 442 } | 431 } |
| 443 | 432 |
| 444 // Same as above, but with a non-continuable interrupt. | 433 // Same as above, but with a non-continuable interrupt. |
| 445 TEST_F(DownloadItemTest, RestartAfterInterrupted) { | 434 TEST_F(DownloadItemTest, RestartAfterInterrupted) { |
| 446 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 435 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 447 switches::kEnableDownloadResumption); | 436 switches::kEnableDownloadResumption); |
| 448 | 437 |
| 449 DownloadItemImpl* item = CreateDownloadItem(); | 438 DownloadItemImpl* item = CreateDownloadItem(); |
| 450 MockObserver observer(item); | 439 TestDownloadItemObserver observer(item); |
| 451 DownloadItemImplDelegate::DownloadTargetCallback callback; | 440 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 452 MockDownloadFile* download_file = | 441 MockDownloadFile* download_file = |
| 453 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 442 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 454 | 443 |
| 455 // Interrupt the download, using a restartable interrupt. | 444 // Interrupt the download, using a restartable interrupt. |
| 456 EXPECT_CALL(*download_file, Cancel()); | 445 EXPECT_CALL(*download_file, Cancel()); |
| 457 item->DestinationObserverAsWeakPtr()->DestinationError( | 446 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 458 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 447 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
| 459 ASSERT_TRUE(observer.CheckUpdated()); | 448 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 460 // Should not try to auto-resume. | 449 // Should not try to auto-resume. |
| 461 ASSERT_EQ(1, observer.GetInterruptCount()); | 450 ASSERT_EQ(1, observer.interrupt_count()); |
| 462 ASSERT_EQ(0, observer.GetResumeCount()); | 451 ASSERT_EQ(0, observer.resume_count()); |
| 463 RunAllPendingInMessageLoops(); | 452 RunAllPendingInMessageLoops(); |
| 464 | 453 |
| 465 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); | 454 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); |
| 466 } | 455 } |
| 467 | 456 |
| 468 // Check we do correct cleanup for RESUME_MODE_INVALID interrupts. | 457 // Check we do correct cleanup for RESUME_MODE_INVALID interrupts. |
| 469 TEST_F(DownloadItemTest, UnresumableInterrupt) { | 458 TEST_F(DownloadItemTest, UnresumableInterrupt) { |
| 470 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 459 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 471 switches::kEnableDownloadResumption); | 460 switches::kEnableDownloadResumption); |
| 472 | 461 |
| 473 DownloadItemImpl* item = CreateDownloadItem(); | 462 DownloadItemImpl* item = CreateDownloadItem(); |
| 474 MockObserver observer(item); | 463 TestDownloadItemObserver observer(item); |
| 475 DownloadItemImplDelegate::DownloadTargetCallback callback; | 464 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 476 MockDownloadFile* download_file = | 465 MockDownloadFile* download_file = |
| 477 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 466 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 478 | 467 |
| 479 // Fail final rename with unresumable reason. | 468 // Fail final rename with unresumable reason. |
| 480 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) | 469 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) |
| 481 .WillOnce(Return(true)); | 470 .WillOnce(Return(true)); |
| 482 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) | 471 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) |
| 483 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED, | 472 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED, |
| 484 base::FilePath(kDummyPath))); | 473 base::FilePath(kDummyPath))); |
| 485 EXPECT_CALL(*download_file, Cancel()); | 474 EXPECT_CALL(*download_file, Cancel()); |
| 486 | 475 |
| 487 // Complete download to trigger final rename. | 476 // Complete download to trigger final rename. |
| 488 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); | 477 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); |
| 489 RunAllPendingInMessageLoops(); | 478 RunAllPendingInMessageLoops(); |
| 490 | 479 |
| 491 ASSERT_TRUE(observer.CheckUpdated()); | 480 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 492 // Should not try to auto-resume. | 481 // Should not try to auto-resume. |
| 493 ASSERT_EQ(1, observer.GetInterruptCount()); | 482 ASSERT_EQ(1, observer.interrupt_count()); |
| 494 ASSERT_EQ(0, observer.GetResumeCount()); | 483 ASSERT_EQ(0, observer.resume_count()); |
| 495 | 484 |
| 496 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); | 485 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); |
| 497 } | 486 } |
| 498 | 487 |
| 499 TEST_F(DownloadItemTest, LimitRestartsAfterInterrupted) { | 488 TEST_F(DownloadItemTest, LimitRestartsAfterInterrupted) { |
| 500 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 489 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 501 switches::kEnableDownloadResumption); | 490 switches::kEnableDownloadResumption); |
| 502 | 491 |
| 503 TestBrowserContext test_browser_context; | 492 TestBrowserContext test_browser_context; |
| 504 DownloadItemImpl* item = CreateDownloadItem(); | 493 DownloadItemImpl* item = CreateDownloadItem(); |
| 505 base::WeakPtr<DownloadDestinationObserver> as_observer( | 494 base::WeakPtr<DownloadDestinationObserver> as_observer( |
| 506 item->DestinationObserverAsWeakPtr()); | 495 item->DestinationObserverAsWeakPtr()); |
| 507 MockObserver observer(item); | 496 TestDownloadItemObserver observer(item); |
| 508 MockDownloadFile* mock_download_file(NULL); | 497 MockDownloadFile* mock_download_file(NULL); |
| 509 scoped_ptr<DownloadFile> download_file; | 498 scoped_ptr<DownloadFile> download_file; |
| 510 MockRequestHandle* mock_request_handle(NULL); | 499 MockRequestHandle* mock_request_handle(NULL); |
| 511 scoped_ptr<DownloadRequestHandleInterface> request_handle; | 500 scoped_ptr<DownloadRequestHandleInterface> request_handle; |
| 512 DownloadItemImplDelegate::DownloadTargetCallback callback; | 501 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 513 | 502 |
| 514 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _)) | 503 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _)) |
| 515 .WillRepeatedly(SaveArg<1>(&callback)); | 504 .WillRepeatedly(SaveArg<1>(&callback)); |
| 516 EXPECT_CALL(*mock_delegate(), GetBrowserContext()) | 505 EXPECT_CALL(*mock_delegate(), GetBrowserContext()) |
| 517 .WillRepeatedly(Return(&test_browser_context)); | 506 .WillRepeatedly(Return(&test_browser_context)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 537 base::FilePath target_path(kDummyPath); | 526 base::FilePath target_path(kDummyPath); |
| 538 base::FilePath intermediate_path( | 527 base::FilePath intermediate_path( |
| 539 target_path.InsertBeforeExtensionASCII("x")); | 528 target_path.InsertBeforeExtensionASCII("x")); |
| 540 EXPECT_CALL(*mock_download_file, RenameAndUniquify(intermediate_path, _)) | 529 EXPECT_CALL(*mock_download_file, RenameAndUniquify(intermediate_path, _)) |
| 541 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | 530 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 542 intermediate_path)); | 531 intermediate_path)); |
| 543 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, | 532 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| 544 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); | 533 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); |
| 545 RunAllPendingInMessageLoops(); | 534 RunAllPendingInMessageLoops(); |
| 546 } | 535 } |
| 547 ASSERT_EQ(i, observer.GetResumeCount()); | 536 ASSERT_EQ(i, observer.resume_count()); |
| 548 | 537 |
| 549 // Use a continuable interrupt. | 538 // Use a continuable interrupt. |
| 550 item->DestinationObserverAsWeakPtr()->DestinationError( | 539 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 551 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); | 540 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); |
| 552 | 541 |
| 553 ASSERT_EQ(i + 1, observer.GetInterruptCount()); | 542 ASSERT_EQ(i + 1, observer.interrupt_count()); |
| 554 ::testing::Mock::VerifyAndClearExpectations(mock_download_file); | 543 ::testing::Mock::VerifyAndClearExpectations(mock_download_file); |
| 555 } | 544 } |
| 556 | 545 |
| 557 CleanupItem(item, mock_download_file, DownloadItem::INTERRUPTED); | 546 CleanupItem(item, mock_download_file, DownloadItem::INTERRUPTED); |
| 558 } | 547 } |
| 559 | 548 |
| 560 TEST_F(DownloadItemTest, NotificationAfterRemove) { | 549 TEST_F(DownloadItemTest, NotificationAfterRemove) { |
| 561 DownloadItemImpl* item = CreateDownloadItem(); | 550 DownloadItemImpl* item = CreateDownloadItem(); |
| 562 MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL); | 551 MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL); |
| 563 EXPECT_CALL(*download_file, Cancel()); | 552 EXPECT_CALL(*download_file, Cancel()); |
| 564 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); | 553 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); |
| 565 MockObserver observer(item); | 554 TestDownloadItemObserver observer(item); |
| 566 | 555 |
| 567 item->Remove(); | 556 item->Remove(); |
| 568 ASSERT_TRUE(observer.CheckUpdated()); | 557 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 569 ASSERT_TRUE(observer.CheckRemoved()); | 558 ASSERT_TRUE(observer.download_removed()); |
| 570 } | 559 } |
| 571 | 560 |
| 572 TEST_F(DownloadItemTest, NotificationAfterOnContentCheckCompleted) { | 561 TEST_F(DownloadItemTest, NotificationAfterOnContentCheckCompleted) { |
| 573 // Setting to NOT_DANGEROUS does not trigger a notification. | 562 // Setting to NOT_DANGEROUS does not trigger a notification. |
| 574 DownloadItemImpl* safe_item = CreateDownloadItem(); | 563 DownloadItemImpl* safe_item = CreateDownloadItem(); |
| 575 MockObserver safe_observer(safe_item); | 564 TestDownloadItemObserver safe_observer(safe_item); |
| 576 | 565 |
| 577 safe_item->OnAllDataSaved(std::string()); | 566 safe_item->OnAllDataSaved(std::string()); |
| 578 EXPECT_TRUE(safe_observer.CheckUpdated()); | 567 EXPECT_TRUE(safe_observer.CheckAndResetDownloadUpdated()); |
| 579 safe_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 568 safe_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 580 EXPECT_TRUE(safe_observer.CheckUpdated()); | 569 EXPECT_TRUE(safe_observer.CheckAndResetDownloadUpdated()); |
| 581 | 570 |
| 582 // Setting to unsafe url or unsafe file should trigger a notification. | 571 // Setting to unsafe url or unsafe file should trigger a notification. |
| 583 DownloadItemImpl* unsafeurl_item = | 572 DownloadItemImpl* unsafeurl_item = |
| 584 CreateDownloadItem(); | 573 CreateDownloadItem(); |
| 585 MockObserver unsafeurl_observer(unsafeurl_item); | 574 TestDownloadItemObserver unsafeurl_observer(unsafeurl_item); |
| 586 | 575 |
| 587 unsafeurl_item->OnAllDataSaved(std::string()); | 576 unsafeurl_item->OnAllDataSaved(std::string()); |
| 588 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); | 577 EXPECT_TRUE(unsafeurl_observer.CheckAndResetDownloadUpdated()); |
| 589 unsafeurl_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_URL); | 578 unsafeurl_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_URL); |
| 590 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); | 579 EXPECT_TRUE(unsafeurl_observer.CheckAndResetDownloadUpdated()); |
| 591 | 580 |
| 592 unsafeurl_item->ValidateDangerousDownload(); | 581 unsafeurl_item->ValidateDangerousDownload(); |
| 593 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); | 582 EXPECT_TRUE(unsafeurl_observer.CheckAndResetDownloadUpdated()); |
| 594 | 583 |
| 595 DownloadItemImpl* unsafefile_item = | 584 DownloadItemImpl* unsafefile_item = |
| 596 CreateDownloadItem(); | 585 CreateDownloadItem(); |
| 597 MockObserver unsafefile_observer(unsafefile_item); | 586 TestDownloadItemObserver unsafefile_observer(unsafefile_item); |
| 598 | 587 |
| 599 unsafefile_item->OnAllDataSaved(std::string()); | 588 unsafefile_item->OnAllDataSaved(std::string()); |
| 600 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); | 589 EXPECT_TRUE(unsafefile_observer.CheckAndResetDownloadUpdated()); |
| 601 unsafefile_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); | 590 unsafefile_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); |
| 602 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); | 591 EXPECT_TRUE(unsafefile_observer.CheckAndResetDownloadUpdated()); |
| 603 | 592 |
| 604 unsafefile_item->ValidateDangerousDownload(); | 593 unsafefile_item->ValidateDangerousDownload(); |
| 605 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); | 594 EXPECT_TRUE(unsafefile_observer.CheckAndResetDownloadUpdated()); |
| 606 } | 595 } |
| 607 | 596 |
| 608 // DownloadItemImpl::OnDownloadTargetDetermined will schedule a task to run | 597 // DownloadItemImpl::OnDownloadTargetDetermined will schedule a task to run |
| 609 // DownloadFile::Rename(). Once the rename | 598 // DownloadFile::Rename(). Once the rename |
| 610 // completes, DownloadItemImpl receives a notification with the new file | 599 // completes, DownloadItemImpl receives a notification with the new file |
| 611 // name. Check that observers are updated when the new filename is available and | 600 // name. Check that observers are updated when the new filename is available and |
| 612 // not before. | 601 // not before. |
| 613 TEST_F(DownloadItemTest, NotificationAfterOnDownloadTargetDetermined) { | 602 TEST_F(DownloadItemTest, NotificationAfterOnDownloadTargetDetermined) { |
| 614 DownloadItemImpl* item = CreateDownloadItem(); | 603 DownloadItemImpl* item = CreateDownloadItem(); |
| 615 DownloadItemImplDelegate::DownloadTargetCallback callback; | 604 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 616 MockDownloadFile* download_file = | 605 MockDownloadFile* download_file = |
| 617 AddDownloadFileToDownloadItem(item, &callback); | 606 AddDownloadFileToDownloadItem(item, &callback); |
| 618 MockObserver observer(item); | 607 TestDownloadItemObserver observer(item); |
| 619 base::FilePath target_path(kDummyPath); | 608 base::FilePath target_path(kDummyPath); |
| 620 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x")); | 609 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x")); |
| 621 base::FilePath new_intermediate_path( | 610 base::FilePath new_intermediate_path( |
| 622 target_path.InsertBeforeExtensionASCII("y")); | 611 target_path.InsertBeforeExtensionASCII("y")); |
| 623 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) | 612 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) |
| 624 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | 613 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 625 new_intermediate_path)); | 614 new_intermediate_path)); |
| 626 | 615 |
| 627 // Currently, a notification would be generated if the danger type is anything | 616 // Currently, a notification would be generated if the danger type is anything |
| 628 // other than NOT_DANGEROUS. | 617 // other than NOT_DANGEROUS. |
| 629 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, | 618 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| 630 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); | 619 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); |
| 631 EXPECT_FALSE(observer.CheckUpdated()); | 620 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); |
| 632 RunAllPendingInMessageLoops(); | 621 RunAllPendingInMessageLoops(); |
| 633 EXPECT_TRUE(observer.CheckUpdated()); | 622 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 634 EXPECT_EQ(new_intermediate_path, item->GetFullPath()); | 623 EXPECT_EQ(new_intermediate_path, item->GetFullPath()); |
| 635 | 624 |
| 636 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS); | 625 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS); |
| 637 } | 626 } |
| 638 | 627 |
| 639 TEST_F(DownloadItemTest, NotificationAfterTogglePause) { | 628 TEST_F(DownloadItemTest, NotificationAfterTogglePause) { |
| 640 DownloadItemImpl* item = CreateDownloadItem(); | 629 DownloadItemImpl* item = CreateDownloadItem(); |
| 641 MockObserver observer(item); | 630 TestDownloadItemObserver observer(item); |
| 642 MockDownloadFile* mock_download_file(new MockDownloadFile); | 631 MockDownloadFile* mock_download_file(new MockDownloadFile); |
| 643 scoped_ptr<DownloadFile> download_file(mock_download_file); | 632 scoped_ptr<DownloadFile> download_file(mock_download_file); |
| 644 scoped_ptr<DownloadRequestHandleInterface> request_handle( | 633 scoped_ptr<DownloadRequestHandleInterface> request_handle( |
| 645 new NiceMock<MockRequestHandle>); | 634 new NiceMock<MockRequestHandle>); |
| 646 | 635 |
| 647 EXPECT_CALL(*mock_download_file, Initialize(_)); | 636 EXPECT_CALL(*mock_download_file, Initialize(_)); |
| 648 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(_, _)); | 637 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(_, _)); |
| 649 item->Start(download_file.Pass(), request_handle.Pass()); | 638 item->Start(download_file.Pass(), request_handle.Pass()); |
| 650 | 639 |
| 651 item->Pause(); | 640 item->Pause(); |
| 652 ASSERT_TRUE(observer.CheckUpdated()); | 641 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 653 | 642 |
| 654 ASSERT_TRUE(item->IsPaused()); | 643 ASSERT_TRUE(item->IsPaused()); |
| 655 | 644 |
| 656 item->Resume(); | 645 item->Resume(); |
| 657 ASSERT_TRUE(observer.CheckUpdated()); | 646 ASSERT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 658 | 647 |
| 659 RunAllPendingInMessageLoops(); | 648 RunAllPendingInMessageLoops(); |
| 660 | 649 |
| 661 CleanupItem(item, mock_download_file, DownloadItem::IN_PROGRESS); | 650 CleanupItem(item, mock_download_file, DownloadItem::IN_PROGRESS); |
| 662 } | 651 } |
| 663 | 652 |
| 664 TEST_F(DownloadItemTest, DisplayName) { | 653 TEST_F(DownloadItemTest, DisplayName) { |
| 665 DownloadItemImpl* item = CreateDownloadItem(); | 654 DownloadItemImpl* item = CreateDownloadItem(); |
| 666 DownloadItemImplDelegate::DownloadTargetCallback callback; | 655 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 667 MockDownloadFile* download_file = | 656 MockDownloadFile* download_file = |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 | 887 |
| 899 EXPECT_FALSE(item->GetFileExternallyRemoved()); | 888 EXPECT_FALSE(item->GetFileExternallyRemoved()); |
| 900 item->OnDownloadedFileRemoved(); | 889 item->OnDownloadedFileRemoved(); |
| 901 EXPECT_TRUE(item->GetFileExternallyRemoved()); | 890 EXPECT_TRUE(item->GetFileExternallyRemoved()); |
| 902 } | 891 } |
| 903 | 892 |
| 904 TEST_F(DownloadItemTest, DestinationUpdate) { | 893 TEST_F(DownloadItemTest, DestinationUpdate) { |
| 905 DownloadItemImpl* item = CreateDownloadItem(); | 894 DownloadItemImpl* item = CreateDownloadItem(); |
| 906 base::WeakPtr<DownloadDestinationObserver> as_observer( | 895 base::WeakPtr<DownloadDestinationObserver> as_observer( |
| 907 item->DestinationObserverAsWeakPtr()); | 896 item->DestinationObserverAsWeakPtr()); |
| 908 MockObserver observer(item); | 897 TestDownloadItemObserver observer(item); |
| 909 | 898 |
| 910 EXPECT_EQ(0l, item->CurrentSpeed()); | 899 EXPECT_EQ(0l, item->CurrentSpeed()); |
| 911 EXPECT_EQ("", item->GetHashState()); | 900 EXPECT_EQ("", item->GetHashState()); |
| 912 EXPECT_EQ(0l, item->GetReceivedBytes()); | 901 EXPECT_EQ(0l, item->GetReceivedBytes()); |
| 913 EXPECT_EQ(0l, item->GetTotalBytes()); | 902 EXPECT_EQ(0l, item->GetTotalBytes()); |
| 914 EXPECT_FALSE(observer.CheckUpdated()); | 903 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); |
| 915 item->SetTotalBytes(100l); | 904 item->SetTotalBytes(100l); |
| 916 EXPECT_EQ(100l, item->GetTotalBytes()); | 905 EXPECT_EQ(100l, item->GetTotalBytes()); |
| 917 | 906 |
| 918 as_observer->DestinationUpdate(10, 20, "deadbeef"); | 907 as_observer->DestinationUpdate(10, 20, "deadbeef"); |
| 919 EXPECT_EQ(20l, item->CurrentSpeed()); | 908 EXPECT_EQ(20l, item->CurrentSpeed()); |
| 920 EXPECT_EQ("deadbeef", item->GetHashState()); | 909 EXPECT_EQ("deadbeef", item->GetHashState()); |
| 921 EXPECT_EQ(10l, item->GetReceivedBytes()); | 910 EXPECT_EQ(10l, item->GetReceivedBytes()); |
| 922 EXPECT_EQ(100l, item->GetTotalBytes()); | 911 EXPECT_EQ(100l, item->GetTotalBytes()); |
| 923 EXPECT_TRUE(observer.CheckUpdated()); | 912 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 924 | 913 |
| 925 as_observer->DestinationUpdate(200, 20, "livebeef"); | 914 as_observer->DestinationUpdate(200, 20, "livebeef"); |
| 926 EXPECT_EQ(20l, item->CurrentSpeed()); | 915 EXPECT_EQ(20l, item->CurrentSpeed()); |
| 927 EXPECT_EQ("livebeef", item->GetHashState()); | 916 EXPECT_EQ("livebeef", item->GetHashState()); |
| 928 EXPECT_EQ(200l, item->GetReceivedBytes()); | 917 EXPECT_EQ(200l, item->GetReceivedBytes()); |
| 929 EXPECT_EQ(0l, item->GetTotalBytes()); | 918 EXPECT_EQ(0l, item->GetTotalBytes()); |
| 930 EXPECT_TRUE(observer.CheckUpdated()); | 919 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 931 } | 920 } |
| 932 | 921 |
| 933 TEST_F(DownloadItemTest, DestinationError) { | 922 TEST_F(DownloadItemTest, DestinationError) { |
| 934 DownloadItemImpl* item = CreateDownloadItem(); | 923 DownloadItemImpl* item = CreateDownloadItem(); |
| 935 MockDownloadFile* download_file = | 924 MockDownloadFile* download_file = |
| 936 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 925 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 937 base::WeakPtr<DownloadDestinationObserver> as_observer( | 926 base::WeakPtr<DownloadDestinationObserver> as_observer( |
| 938 item->DestinationObserverAsWeakPtr()); | 927 item->DestinationObserverAsWeakPtr()); |
| 939 MockObserver observer(item); | 928 TestDownloadItemObserver observer(item); |
| 940 | 929 |
| 941 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); | 930 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 942 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, item->GetLastReason()); | 931 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, item->GetLastReason()); |
| 943 EXPECT_FALSE(observer.CheckUpdated()); | 932 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); |
| 944 | 933 |
| 945 EXPECT_CALL(*download_file, Cancel()); | 934 EXPECT_CALL(*download_file, Cancel()); |
| 946 as_observer->DestinationError( | 935 as_observer->DestinationError( |
| 947 DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED); | 936 DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED); |
| 948 mock_delegate()->VerifyAndClearExpectations(); | 937 mock_delegate()->VerifyAndClearExpectations(); |
| 949 EXPECT_TRUE(observer.CheckUpdated()); | 938 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 950 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); | 939 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); |
| 951 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, | 940 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, |
| 952 item->GetLastReason()); | 941 item->GetLastReason()); |
| 953 } | 942 } |
| 954 | 943 |
| 955 TEST_F(DownloadItemTest, DestinationCompleted) { | 944 TEST_F(DownloadItemTest, DestinationCompleted) { |
| 956 DownloadItemImpl* item = CreateDownloadItem(); | 945 DownloadItemImpl* item = CreateDownloadItem(); |
| 957 base::WeakPtr<DownloadDestinationObserver> as_observer( | 946 base::WeakPtr<DownloadDestinationObserver> as_observer( |
| 958 item->DestinationObserverAsWeakPtr()); | 947 item->DestinationObserverAsWeakPtr()); |
| 959 MockObserver observer(item); | 948 TestDownloadItemObserver observer(item); |
| 960 | 949 |
| 961 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); | 950 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 962 EXPECT_EQ("", item->GetHash()); | 951 EXPECT_EQ("", item->GetHash()); |
| 963 EXPECT_EQ("", item->GetHashState()); | 952 EXPECT_EQ("", item->GetHashState()); |
| 964 EXPECT_FALSE(item->AllDataSaved()); | 953 EXPECT_FALSE(item->AllDataSaved()); |
| 965 EXPECT_FALSE(observer.CheckUpdated()); | 954 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); |
| 966 | 955 |
| 967 as_observer->DestinationUpdate(10, 20, "deadbeef"); | 956 as_observer->DestinationUpdate(10, 20, "deadbeef"); |
| 968 EXPECT_TRUE(observer.CheckUpdated()); | 957 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 969 EXPECT_FALSE(observer.CheckUpdated()); // Confirm reset. | 958 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); // Confirm reset. |
| 970 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); | 959 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 971 EXPECT_EQ("", item->GetHash()); | 960 EXPECT_EQ("", item->GetHash()); |
| 972 EXPECT_EQ("deadbeef", item->GetHashState()); | 961 EXPECT_EQ("deadbeef", item->GetHashState()); |
| 973 EXPECT_FALSE(item->AllDataSaved()); | 962 EXPECT_FALSE(item->AllDataSaved()); |
| 974 | 963 |
| 975 as_observer->DestinationCompleted("livebeef"); | 964 as_observer->DestinationCompleted("livebeef"); |
| 976 mock_delegate()->VerifyAndClearExpectations(); | 965 mock_delegate()->VerifyAndClearExpectations(); |
| 977 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); | 966 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 978 EXPECT_TRUE(observer.CheckUpdated()); | 967 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); |
| 979 EXPECT_EQ("livebeef", item->GetHash()); | 968 EXPECT_EQ("livebeef", item->GetHash()); |
| 980 EXPECT_EQ("", item->GetHashState()); | 969 EXPECT_EQ("", item->GetHashState()); |
| 981 EXPECT_TRUE(item->AllDataSaved()); | 970 EXPECT_TRUE(item->AllDataSaved()); |
| 982 } | 971 } |
| 983 | 972 |
| 984 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) { | 973 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) { |
| 985 DownloadItemImpl* item = CreateDownloadItem(); | 974 DownloadItemImpl* item = CreateDownloadItem(); |
| 986 MockDownloadFile* download_file = | 975 MockDownloadFile* download_file = |
| 987 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 976 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 988 | 977 |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1296 base::Unretained(&returned_path))); | 1285 base::Unretained(&returned_path))); |
| 1297 RunAllPendingInMessageLoops(); | 1286 RunAllPendingInMessageLoops(); |
| 1298 EXPECT_TRUE(returned_path.empty()); | 1287 EXPECT_TRUE(returned_path.empty()); |
| 1299 } | 1288 } |
| 1300 | 1289 |
| 1301 TEST(MockDownloadItem, Compiles) { | 1290 TEST(MockDownloadItem, Compiles) { |
| 1302 MockDownloadItem mock_item; | 1291 MockDownloadItem mock_item; |
| 1303 } | 1292 } |
| 1304 | 1293 |
| 1305 } // namespace content | 1294 } // namespace content |
| OLD | NEW |