| 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 // This file contains download browser tests that are known to be runnable | 5 // This file contains download browser tests that are known to be runnable |
| 6 // in a pure content context. Over time tests should be migrated here. | 6 // in a pure content context. Over time tests should be migrated here. |
| 7 | 7 |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 } | 548 } |
| 549 | 549 |
| 550 // Create a DownloadTestObserverInProgress that will wait for the | 550 // Create a DownloadTestObserverInProgress that will wait for the |
| 551 // specified number of downloads to start. | 551 // specified number of downloads to start. |
| 552 DownloadCreateObserver* CreateInProgressWaiter( | 552 DownloadCreateObserver* CreateInProgressWaiter( |
| 553 Shell* shell, int num_downloads) { | 553 Shell* shell, int num_downloads) { |
| 554 DownloadManager* download_manager = DownloadManagerForShell(shell); | 554 DownloadManager* download_manager = DownloadManagerForShell(shell); |
| 555 return new DownloadCreateObserver(download_manager); | 555 return new DownloadCreateObserver(download_manager); |
| 556 } | 556 } |
| 557 | 557 |
| 558 DownloadTestObserver* CreateInterruptedWaiter( |
| 559 Shell* shell, int num_downloads) { |
| 560 DownloadManager* download_manager = DownloadManagerForShell(shell); |
| 561 return new DownloadTestObserverInterrupted(download_manager, num_downloads, |
| 562 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
| 563 } |
| 564 |
| 558 // Note: Cannot be used with other alternative DownloadFileFactorys | 565 // Note: Cannot be used with other alternative DownloadFileFactorys |
| 559 void SetupEnsureNoPendingDownloads() { | 566 void SetupEnsureNoPendingDownloads() { |
| 560 DownloadManagerForShell(shell())->SetDownloadFileFactoryForTesting( | 567 DownloadManagerForShell(shell())->SetDownloadFileFactoryForTesting( |
| 561 scoped_ptr<DownloadFileFactory>( | 568 scoped_ptr<DownloadFileFactory>( |
| 562 new CountingDownloadFileFactory()).Pass()); | 569 new CountingDownloadFileFactory()).Pass()); |
| 563 } | 570 } |
| 564 | 571 |
| 565 bool EnsureNoPendingDownloads() { | 572 bool EnsureNoPendingDownloads() { |
| 566 bool result = true; | 573 bool result = true; |
| 567 BrowserThread::PostTask( | 574 BrowserThread::PostTask( |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 download, base::Bind(&DataReceivedFilter, size)); | 636 download, base::Bind(&DataReceivedFilter, size)); |
| 630 data_observer.WaitForEvent(); | 637 data_observer.WaitForEvent(); |
| 631 ASSERT_EQ(size, download->GetReceivedBytes()); | 638 ASSERT_EQ(size, download->GetReceivedBytes()); |
| 632 ASSERT_EQ(DownloadItem::IN_PROGRESS, download->GetState()); | 639 ASSERT_EQ(DownloadItem::IN_PROGRESS, download->GetState()); |
| 633 } | 640 } |
| 634 | 641 |
| 635 // Tell the test server to release a pending RST and confirm | 642 // Tell the test server to release a pending RST and confirm |
| 636 // that the interrupt is received properly (for download resumption | 643 // that the interrupt is received properly (for download resumption |
| 637 // testing). | 644 // testing). |
| 638 void ReleaseRSTAndConfirmInterruptForResume(DownloadItem* download) { | 645 void ReleaseRSTAndConfirmInterruptForResume(DownloadItem* download) { |
| 639 scoped_ptr<DownloadTestObserver> rst_observer(CreateWaiter(shell(), 1)); | 646 scoped_ptr<DownloadTestObserver> rst_observer( |
| 647 CreateInterruptedWaiter(shell(), 1)); |
| 640 NavigateToURL(shell(), test_server()->GetURL("download-finish")); | 648 NavigateToURL(shell(), test_server()->GetURL("download-finish")); |
| 641 rst_observer->WaitForFinished(); | 649 rst_observer->WaitForFinished(); |
| 642 EXPECT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 650 EXPECT_EQ(DownloadItem::INTERRUPTED, download->GetState()); |
| 643 } | 651 } |
| 644 | 652 |
| 645 // Confirm file status expected for the given location in a stream | 653 // Confirm file status expected for the given location in a stream |
| 646 // provided by the resume test server. | 654 // provided by the resume test server. |
| 647 void ConfirmFileStatusForResume( | 655 void ConfirmFileStatusForResume( |
| 648 DownloadItem* download, bool file_exists, | 656 DownloadItem* download, bool file_exists, |
| 649 int received_bytes, int total_bytes, | 657 int received_bytes, int total_bytes, |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 TestFileErrorInjector::FileErrorInfo err = { | 1250 TestFileErrorInjector::FileErrorInfo err = { |
| 1243 url.spec(), | 1251 url.spec(), |
| 1244 TestFileErrorInjector::FILE_OPERATION_INITIALIZE, | 1252 TestFileErrorInjector::FILE_OPERATION_INITIALIZE, |
| 1245 0, | 1253 0, |
| 1246 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE | 1254 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE |
| 1247 }; | 1255 }; |
| 1248 injector->AddError(err); | 1256 injector->AddError(err); |
| 1249 injector->InjectErrors(); | 1257 injector->InjectErrors(); |
| 1250 | 1258 |
| 1251 // Start and watch for interrupt. | 1259 // Start and watch for interrupt. |
| 1252 scoped_ptr<DownloadTestObserver> int_observer(CreateWaiter(shell(), 1)); | 1260 scoped_ptr<DownloadTestObserver> int_observer( |
| 1261 CreateInterruptedWaiter(shell(), 1)); |
| 1253 DownloadItem* download(StartDownloadAndReturnItem(url)); | 1262 DownloadItem* download(StartDownloadAndReturnItem(url)); |
| 1254 int_observer->WaitForFinished(); | 1263 int_observer->WaitForFinished(); |
| 1255 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 1264 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); |
| 1256 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 1265 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, |
| 1257 download->GetLastReason()); | 1266 download->GetLastReason()); |
| 1258 EXPECT_EQ(0, download->GetReceivedBytes()); | 1267 EXPECT_EQ(0, download->GetReceivedBytes()); |
| 1259 EXPECT_TRUE(download->GetFullPath().empty()); | 1268 EXPECT_TRUE(download->GetFullPath().empty()); |
| 1260 EXPECT_TRUE(download->GetTargetFilePath().empty()); | 1269 EXPECT_TRUE(download->GetTargetFilePath().empty()); |
| 1261 | 1270 |
| 1262 // We need to make sure that any cross-thread downloads communication has | 1271 // We need to make sure that any cross-thread downloads communication has |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1292 TestFileErrorInjector::FileErrorInfo err = { | 1301 TestFileErrorInjector::FileErrorInfo err = { |
| 1293 url.spec(), | 1302 url.spec(), |
| 1294 TestFileErrorInjector::FILE_OPERATION_RENAME_UNIQUIFY, | 1303 TestFileErrorInjector::FILE_OPERATION_RENAME_UNIQUIFY, |
| 1295 0, | 1304 0, |
| 1296 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE | 1305 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE |
| 1297 }; | 1306 }; |
| 1298 injector->AddError(err); | 1307 injector->AddError(err); |
| 1299 injector->InjectErrors(); | 1308 injector->InjectErrors(); |
| 1300 | 1309 |
| 1301 // Start and watch for interrupt. | 1310 // Start and watch for interrupt. |
| 1302 scoped_ptr<DownloadTestObserver> int_observer(CreateWaiter(shell(), 1)); | 1311 scoped_ptr<DownloadTestObserver> int_observer( |
| 1312 CreateInterruptedWaiter(shell(), 1)); |
| 1303 DownloadItem* download(StartDownloadAndReturnItem(url)); | 1313 DownloadItem* download(StartDownloadAndReturnItem(url)); |
| 1304 int_observer->WaitForFinished(); | 1314 int_observer->WaitForFinished(); |
| 1305 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 1315 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); |
| 1306 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 1316 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, |
| 1307 download->GetLastReason()); | 1317 download->GetLastReason()); |
| 1308 EXPECT_TRUE(download->GetFullPath().empty()); | 1318 EXPECT_TRUE(download->GetFullPath().empty()); |
| 1309 // Target path will have been set after file name determination. GetFullPath() | 1319 // Target path will have been set after file name determination. GetFullPath() |
| 1310 // being empty is sufficient to signal that filename determination needs to be | 1320 // being empty is sufficient to signal that filename determination needs to be |
| 1311 // redone. | 1321 // redone. |
| 1312 EXPECT_FALSE(download->GetTargetFilePath().empty()); | 1322 EXPECT_FALSE(download->GetTargetFilePath().empty()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1344 TestFileErrorInjector::FileErrorInfo err = { | 1354 TestFileErrorInjector::FileErrorInfo err = { |
| 1345 url.spec(), | 1355 url.spec(), |
| 1346 TestFileErrorInjector::FILE_OPERATION_RENAME_ANNOTATE, | 1356 TestFileErrorInjector::FILE_OPERATION_RENAME_ANNOTATE, |
| 1347 0, | 1357 0, |
| 1348 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE | 1358 DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE |
| 1349 }; | 1359 }; |
| 1350 injector->AddError(err); | 1360 injector->AddError(err); |
| 1351 injector->InjectErrors(); | 1361 injector->InjectErrors(); |
| 1352 | 1362 |
| 1353 // Start and watch for interrupt. | 1363 // Start and watch for interrupt. |
| 1354 scoped_ptr<DownloadTestObserver> int_observer(CreateWaiter(shell(), 1)); | 1364 scoped_ptr<DownloadTestObserver> int_observer( |
| 1365 CreateInterruptedWaiter(shell(), 1)); |
| 1355 DownloadItem* download(StartDownloadAndReturnItem(url)); | 1366 DownloadItem* download(StartDownloadAndReturnItem(url)); |
| 1356 int_observer->WaitForFinished(); | 1367 int_observer->WaitForFinished(); |
| 1357 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); | 1368 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); |
| 1358 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, | 1369 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, |
| 1359 download->GetLastReason()); | 1370 download->GetLastReason()); |
| 1360 EXPECT_TRUE(download->GetFullPath().empty()); | 1371 EXPECT_TRUE(download->GetFullPath().empty()); |
| 1361 // Target path should still be intact. | 1372 // Target path should still be intact. |
| 1362 EXPECT_FALSE(download->GetTargetFilePath().empty()); | 1373 EXPECT_FALSE(download->GetTargetFilePath().empty()); |
| 1363 | 1374 |
| 1364 // We need to make sure that any cross-thread downloads communication has | 1375 // We need to make sure that any cross-thread downloads communication has |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 // Start the second download and wait until it's done. The test server is | 1566 // Start the second download and wait until it's done. The test server is |
| 1556 // single threaded. The response to this download request should follow the | 1567 // single threaded. The response to this download request should follow the |
| 1557 // response to the previous resumption request. | 1568 // response to the previous resumption request. |
| 1558 GURL url2(test_server()->GetURL("rangereset?size=100&rst_limit=0&token=x")); | 1569 GURL url2(test_server()->GetURL("rangereset?size=100&rst_limit=0&token=x")); |
| 1559 DownloadAndWait(shell(), url2, DownloadItem::COMPLETE); | 1570 DownloadAndWait(shell(), url2, DownloadItem::COMPLETE); |
| 1560 | 1571 |
| 1561 EXPECT_TRUE(EnsureNoPendingDownloads()); | 1572 EXPECT_TRUE(EnsureNoPendingDownloads()); |
| 1562 } | 1573 } |
| 1563 | 1574 |
| 1564 } // namespace content | 1575 } // namespace content |
| OLD | NEW |