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

Side by Side Diff: content/browser/download/download_browsertest.cc

Issue 2890853002: Downloads: replace BrowserThread::FILE with task scheduler. (Closed)
Patch Set: Address Avi's comments. Created 3 years, 5 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
« no previous file with comments | « content/browser/download/docs/save-page-as.md ('k') | content/browser/download/download_file.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <utility> 10 #include <utility>
(...skipping 19 matching lines...) Expand all
30 #include "base/threading/sequenced_worker_pool.h" 30 #include "base/threading/sequenced_worker_pool.h"
31 #include "base/threading/thread_restrictions.h" 31 #include "base/threading/thread_restrictions.h"
32 #include "base/time/time.h" 32 #include "base/time/time.h"
33 #include "build/build_config.h" 33 #include "build/build_config.h"
34 #include "content/browser/byte_stream.h" 34 #include "content/browser/byte_stream.h"
35 #include "content/browser/download/download_file_factory.h" 35 #include "content/browser/download/download_file_factory.h"
36 #include "content/browser/download/download_file_impl.h" 36 #include "content/browser/download/download_file_impl.h"
37 #include "content/browser/download/download_item_impl.h" 37 #include "content/browser/download/download_item_impl.h"
38 #include "content/browser/download/download_manager_impl.h" 38 #include "content/browser/download/download_manager_impl.h"
39 #include "content/browser/download/download_resource_handler.h" 39 #include "content/browser/download/download_resource_handler.h"
40 #include "content/browser/download/download_task_runner.h"
40 #include "content/browser/download/parallel_download_utils.h" 41 #include "content/browser/download/parallel_download_utils.h"
41 #include "content/browser/loader/resource_dispatcher_host_impl.h" 42 #include "content/browser/loader/resource_dispatcher_host_impl.h"
42 #include "content/browser/web_contents/web_contents_impl.h" 43 #include "content/browser/web_contents/web_contents_impl.h"
43 #include "content/public/browser/download_danger_type.h" 44 #include "content/public/browser/download_danger_type.h"
44 #include "content/public/browser/resource_dispatcher_host_delegate.h" 45 #include "content/public/browser/resource_dispatcher_host_delegate.h"
45 #include "content/public/browser/resource_throttle.h" 46 #include "content/public/browser/resource_throttle.h"
46 #include "content/public/common/content_features.h" 47 #include "content/public/common/content_features.h"
47 #include "content/public/common/webplugininfo.h" 48 #include "content/public/common/webplugininfo.h"
48 #include "content/public/test/browser_test_utils.h" 49 #include "content/public/test/browser_test_utils.h"
49 #include "content/public/test/content_browser_test.h" 50 #include "content/public/test/content_browser_test.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 const GURL& referrer_url, 166 const GURL& referrer_url,
166 const RenameCompletionCallback& callback) override; 167 const RenameCompletionCallback& callback) override;
167 168
168 private: 169 private:
169 static void RenameCallbackWrapper( 170 static void RenameCallbackWrapper(
170 const base::WeakPtr<DownloadFileWithDelayFactory>& factory, 171 const base::WeakPtr<DownloadFileWithDelayFactory>& factory,
171 const RenameCompletionCallback& original_callback, 172 const RenameCompletionCallback& original_callback,
172 DownloadInterruptReason reason, 173 DownloadInterruptReason reason,
173 const base::FilePath& path); 174 const base::FilePath& path);
174 175
175 // This variable may only be read on the FILE thread, and may only be 176 // This variable may only be read on the download sequence, and may only be
176 // indirected through (e.g. methods on DownloadFileWithDelayFactory called) 177 // indirected through (e.g. methods on DownloadFileWithDelayFactory called)
177 // on the UI thread. This is because after construction, 178 // on the UI thread. This is because after construction,
178 // DownloadFileWithDelay lives on the file thread, but 179 // DownloadFileWithDelay lives on the file thread, but
179 // DownloadFileWithDelayFactory is purely a UI thread object. 180 // DownloadFileWithDelayFactory is purely a UI thread object.
180 base::WeakPtr<DownloadFileWithDelayFactory> owner_; 181 base::WeakPtr<DownloadFileWithDelayFactory> owner_;
181 182
182 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay); 183 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay);
183 }; 184 };
184 185
185 // All routines on this class must be called on the UI thread. 186 // All routines on this class must be called on the UI thread.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 std::move(stream), 223 std::move(stream),
223 net_log, 224 net_log,
224 observer), 225 observer),
225 owner_(owner) {} 226 owner_(owner) {}
226 227
227 DownloadFileWithDelay::~DownloadFileWithDelay() {} 228 DownloadFileWithDelay::~DownloadFileWithDelay() {}
228 229
229 void DownloadFileWithDelay::RenameAndUniquify( 230 void DownloadFileWithDelay::RenameAndUniquify(
230 const base::FilePath& full_path, 231 const base::FilePath& full_path,
231 const RenameCompletionCallback& callback) { 232 const RenameCompletionCallback& callback) {
232 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 233 DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
233 DownloadFileImpl::RenameAndUniquify( 234 DownloadFileImpl::RenameAndUniquify(
234 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper, 235 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper,
235 owner_, callback)); 236 owner_, callback));
236 } 237 }
237 238
238 void DownloadFileWithDelay::RenameAndAnnotate( 239 void DownloadFileWithDelay::RenameAndAnnotate(
239 const base::FilePath& full_path, 240 const base::FilePath& full_path,
240 const std::string& client_guid, 241 const std::string& client_guid,
241 const GURL& source_url, 242 const GURL& source_url,
242 const GURL& referrer_url, 243 const GURL& referrer_url,
243 const RenameCompletionCallback& callback) { 244 const RenameCompletionCallback& callback) {
244 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 245 DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
245 DownloadFileImpl::RenameAndAnnotate( 246 DownloadFileImpl::RenameAndAnnotate(
246 full_path, 247 full_path,
247 client_guid, 248 client_guid,
248 source_url, 249 source_url,
249 referrer_url, 250 referrer_url,
250 base::Bind( 251 base::Bind(
251 DownloadFileWithDelay::RenameCallbackWrapper, owner_, callback)); 252 DownloadFileWithDelay::RenameCallbackWrapper, owner_, callback));
252 } 253 }
253 254
254 // static 255 // static
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 std::unique_ptr<ByteStreamReader> stream, 315 std::unique_ptr<ByteStreamReader> stream,
315 const net::NetLogWithSource& net_log, 316 const net::NetLogWithSource& net_log,
316 base::WeakPtr<DownloadDestinationObserver> observer) 317 base::WeakPtr<DownloadDestinationObserver> observer)
317 : DownloadFileImpl(std::move(save_info), 318 : DownloadFileImpl(std::move(save_info),
318 default_downloads_directory, 319 default_downloads_directory,
319 std::move(stream), 320 std::move(stream),
320 net_log, 321 net_log,
321 observer) {} 322 observer) {}
322 323
323 ~CountingDownloadFile() override { 324 ~CountingDownloadFile() override {
324 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 325 DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
325 active_files_--; 326 active_files_--;
326 } 327 }
327 328
328 void Initialize( 329 void Initialize(
329 const InitializeCallback& callback, 330 const InitializeCallback& callback,
330 const CancelRequestCallback& cancel_request_callback, 331 const CancelRequestCallback& cancel_request_callback,
331 const DownloadItem::ReceivedSlices& received_slices, 332 const DownloadItem::ReceivedSlices& received_slices,
332 bool is_parallelizable) override { 333 bool is_parallelizable) override {
333 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 334 DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
334 active_files_++; 335 active_files_++;
335 DownloadFileImpl::Initialize(callback, cancel_request_callback, 336 DownloadFileImpl::Initialize(callback, cancel_request_callback,
336 received_slices, is_parallelizable); 337 received_slices, is_parallelizable);
337 } 338 }
338 339
339 static void GetNumberActiveFiles(int* result) { 340 static void GetNumberActiveFiles(int* result) {
340 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 341 DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
341 *result = active_files_; 342 *result = active_files_;
342 } 343 }
343 344
344 // Can be called on any thread, and will block (running message loop) 345 // Can be called on any thread, and will block (running message loop)
345 // until data is returned. 346 // until data is returned.
346 static int GetNumberActiveFilesFromFileThread() { 347 static int GetNumberActiveFilesFromFileThread() {
347 int result = -1; 348 int result = -1;
348 BrowserThread::PostTaskAndReply( 349 GetDownloadTaskRunner()->PostTaskAndReply(
349 BrowserThread::FILE, FROM_HERE, 350 FROM_HERE,
350 base::Bind(&CountingDownloadFile::GetNumberActiveFiles, &result), 351 base::Bind(&CountingDownloadFile::GetNumberActiveFiles, &result),
351 base::MessageLoop::current()->QuitWhenIdleClosure()); 352 base::MessageLoop::current()->QuitWhenIdleClosure());
352 base::RunLoop().Run(); 353 base::RunLoop().Run();
353 DCHECK_NE(-1, result); 354 DCHECK_NE(-1, result);
354 return result; 355 return result;
355 } 356 }
356 357
357 private: 358 private:
358 static int active_files_; 359 static int active_files_;
359 }; 360 };
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 // Wait until the second (final) rename callback is posted. 900 // Wait until the second (final) rename callback is posted.
900 file_factory->WaitForSomeCallback(); 901 file_factory->WaitForSomeCallback();
901 file_factory->GetAllRenameCallbacks(&callbacks); 902 file_factory->GetAllRenameCallbacks(&callbacks);
902 ASSERT_EQ(1u, callbacks.size()); 903 ASSERT_EQ(1u, callbacks.size());
903 904
904 // Cancel it. 905 // Cancel it.
905 std::vector<DownloadItem*> items; 906 std::vector<DownloadItem*> items;
906 download_manager->GetAllDownloads(&items); 907 download_manager->GetAllDownloads(&items);
907 ASSERT_EQ(1u, items.size()); 908 ASSERT_EQ(1u, items.size());
908 items[0]->Cancel(true); 909 items[0]->Cancel(true);
909 RunAllPendingInMessageLoop(); 910 RunAllBlockingPoolTasksUntilIdle();
910 911
911 // Check state. 912 // Check state.
912 EXPECT_EQ(DownloadItem::CANCELLED, items[0]->GetState()); 913 EXPECT_EQ(DownloadItem::CANCELLED, items[0]->GetState());
913 914
914 // Run final rename callback. 915 // Run final rename callback.
915 callbacks[0].Run(); 916 callbacks[0].Run();
916 callbacks.clear(); 917 callbacks.clear();
917 918
918 // Check state. 919 // Check state.
919 EXPECT_EQ(DownloadItem::CANCELLED, items[0]->GetState()); 920 EXPECT_EQ(DownloadItem::CANCELLED, items[0]->GetState());
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 1068
1068 // Confirm download isn't complete yet. 1069 // Confirm download isn't complete yet.
1069 std::vector<DownloadItem*> items; 1070 std::vector<DownloadItem*> items;
1070 DownloadManagerForShell(shell())->GetAllDownloads(&items); 1071 DownloadManagerForShell(shell())->GetAllDownloads(&items);
1071 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState()); 1072 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState());
1072 1073
1073 // Cancel the download; confirm cancel fails anyway. 1074 // Cancel the download; confirm cancel fails anyway.
1074 ASSERT_EQ(1u, items.size()); 1075 ASSERT_EQ(1u, items.size());
1075 items[0]->Cancel(true); 1076 items[0]->Cancel(true);
1076 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState()); 1077 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState());
1077 RunAllPendingInMessageLoop(); 1078 RunAllBlockingPoolTasksUntilIdle();
1078 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState()); 1079 EXPECT_EQ(DownloadItem::IN_PROGRESS, items[0]->GetState());
1079 1080
1080 MockDownloadItemObserver observer; 1081 MockDownloadItemObserver observer;
1081 items[0]->AddObserver(&observer); 1082 items[0]->AddObserver(&observer);
1082 EXPECT_CALL(observer, OnDownloadDestroyed(items[0])); 1083 EXPECT_CALL(observer, OnDownloadDestroyed(items[0]));
1083 1084
1084 // Shutdown the download manager. Mostly this is confirming a lack of 1085 // Shutdown the download manager. Mostly this is confirming a lack of
1085 // crashes. 1086 // crashes.
1086 DownloadManagerForShell(shell())->Shutdown(); 1087 DownloadManagerForShell(shell())->Shutdown();
1087 } 1088 }
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); 1488 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState());
1488 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, 1489 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
1489 download->GetLastReason()); 1490 download->GetLastReason());
1490 EXPECT_EQ(0, download->GetReceivedBytes()); 1491 EXPECT_EQ(0, download->GetReceivedBytes());
1491 EXPECT_TRUE(download->GetFullPath().empty()); 1492 EXPECT_TRUE(download->GetFullPath().empty());
1492 EXPECT_FALSE(download->GetTargetFilePath().empty()); 1493 EXPECT_FALSE(download->GetTargetFilePath().empty());
1493 1494
1494 // We need to make sure that any cross-thread downloads communication has 1495 // We need to make sure that any cross-thread downloads communication has
1495 // quiesced before clearing and injecting the new errors, as the 1496 // quiesced before clearing and injecting the new errors, as the
1496 // InjectErrors() routine alters the currently in use download file 1497 // InjectErrors() routine alters the currently in use download file
1497 // factory, which is a file thread object. 1498 // factory.
1498 RunAllPendingInMessageLoop(BrowserThread::FILE); 1499 RunAllBlockingPoolTasksUntilIdle();
1499 RunAllPendingInMessageLoop();
1500 1500
1501 // Clear the old errors list. 1501 // Clear the old errors list.
1502 injector->ClearError(); 1502 injector->ClearError();
1503 1503
1504 // Resume and watch completion. 1504 // Resume and watch completion.
1505 download->Resume(); 1505 download->Resume();
1506 WaitForCompletion(download); 1506 WaitForCompletion(download);
1507 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); 1507 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE);
1508 } 1508 }
1509 1509
(...skipping 20 matching lines...) Expand all
1530 download->GetLastReason()); 1530 download->GetLastReason());
1531 EXPECT_TRUE(download->GetFullPath().empty()); 1531 EXPECT_TRUE(download->GetFullPath().empty());
1532 // Target path will have been set after file name determination. GetFullPath() 1532 // Target path will have been set after file name determination. GetFullPath()
1533 // being empty is sufficient to signal that filename determination needs to be 1533 // being empty is sufficient to signal that filename determination needs to be
1534 // redone. 1534 // redone.
1535 EXPECT_FALSE(download->GetTargetFilePath().empty()); 1535 EXPECT_FALSE(download->GetTargetFilePath().empty());
1536 1536
1537 // We need to make sure that any cross-thread downloads communication has 1537 // We need to make sure that any cross-thread downloads communication has
1538 // quiesced before clearing and injecting the new errors, as the 1538 // quiesced before clearing and injecting the new errors, as the
1539 // InjectErrors() routine alters the currently in use download file 1539 // InjectErrors() routine alters the currently in use download file
1540 // factory, which is a file thread object. 1540 // factory.
1541 RunAllPendingInMessageLoop(BrowserThread::FILE); 1541 RunAllBlockingPoolTasksUntilIdle();
1542 RunAllPendingInMessageLoop();
1543 1542
1544 // Clear the old errors list. 1543 // Clear the old errors list.
1545 injector->ClearError(); 1544 injector->ClearError();
1546 1545
1547 download->Resume(); 1546 download->Resume();
1548 WaitForCompletion(download); 1547 WaitForCompletion(download);
1549 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); 1548 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE);
1550 } 1549 }
1551 1550
1552 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RecoverFromFinalRenameError) { 1551 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RecoverFromFinalRenameError) {
(...skipping 15 matching lines...) Expand all
1568 WaitForInterrupt(download); 1567 WaitForInterrupt(download);
1569 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState()); 1568 ASSERT_EQ(DownloadItem::INTERRUPTED, download->GetState());
1570 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, download->GetLastReason()); 1569 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, download->GetLastReason());
1571 EXPECT_TRUE(download->GetFullPath().empty()); 1570 EXPECT_TRUE(download->GetFullPath().empty());
1572 // Target path should still be intact. 1571 // Target path should still be intact.
1573 EXPECT_FALSE(download->GetTargetFilePath().empty()); 1572 EXPECT_FALSE(download->GetTargetFilePath().empty());
1574 1573
1575 // We need to make sure that any cross-thread downloads communication has 1574 // We need to make sure that any cross-thread downloads communication has
1576 // quiesced before clearing and injecting the new errors, as the 1575 // quiesced before clearing and injecting the new errors, as the
1577 // InjectErrors() routine alters the currently in use download file 1576 // InjectErrors() routine alters the currently in use download file
1578 // factory, which is a file thread object. 1577 // factory, which is a download sequence object.
1579 RunAllPendingInMessageLoop(BrowserThread::FILE); 1578 RunAllBlockingPoolTasksUntilIdle();
1580 RunAllPendingInMessageLoop();
1581 1579
1582 // Clear the old errors list. 1580 // Clear the old errors list.
1583 injector->ClearError(); 1581 injector->ClearError();
1584 1582
1585 download->Resume(); 1583 download->Resume();
1586 WaitForCompletion(download); 1584 WaitForCompletion(download);
1587 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE); 1585 EXPECT_EQ(download->GetState(), DownloadItem::COMPLETE);
1588 } 1586 }
1589 1587
1590 IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_Hash) { 1588 IN_PROC_BROWSER_TEST_F(DownloadContentTest, Resume_Hash) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1648 1646
1649 DownloadItem* download = 1647 DownloadItem* download =
1650 StartDownloadAndReturnItem(shell(), request_handler.url()); 1648 StartDownloadAndReturnItem(shell(), request_handler.url());
1651 WaitForInterrupt(download); 1649 WaitForInterrupt(download);
1652 1650
1653 base::FilePath intermediate_path = download->GetFullPath(); 1651 base::FilePath intermediate_path = download->GetFullPath();
1654 ASSERT_FALSE(intermediate_path.empty()); 1652 ASSERT_FALSE(intermediate_path.empty());
1655 ASSERT_TRUE(PathExists(intermediate_path)); 1653 ASSERT_TRUE(PathExists(intermediate_path));
1656 1654
1657 download->Cancel(true /* user_cancel */); 1655 download->Cancel(true /* user_cancel */);
1658 RunAllPendingInMessageLoop(BrowserThread::FILE); 1656 RunAllBlockingPoolTasksUntilIdle();
1659 RunAllPendingInMessageLoop();
1660 1657
1661 // The intermediate file should now be gone. 1658 // The intermediate file should now be gone.
1662 EXPECT_FALSE(PathExists(intermediate_path)); 1659 EXPECT_FALSE(PathExists(intermediate_path));
1663 EXPECT_TRUE(download->GetFullPath().empty()); 1660 EXPECT_TRUE(download->GetFullPath().empty());
1664 } 1661 }
1665 1662
1666 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveInterruptedDownload) { 1663 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveInterruptedDownload) {
1667 TestDownloadRequestHandler request_handler; 1664 TestDownloadRequestHandler request_handler;
1668 request_handler.StartServing( 1665 request_handler.StartServing(
1669 TestDownloadRequestHandler::Parameters::WithSingleInterruption()); 1666 TestDownloadRequestHandler::Parameters::WithSingleInterruption());
1670 1667
1671 DownloadItem* download = 1668 DownloadItem* download =
1672 StartDownloadAndReturnItem(shell(), request_handler.url()); 1669 StartDownloadAndReturnItem(shell(), request_handler.url());
1673 WaitForInterrupt(download); 1670 WaitForInterrupt(download);
1674 1671
1675 base::FilePath intermediate_path = download->GetFullPath(); 1672 base::FilePath intermediate_path = download->GetFullPath();
1676 ASSERT_FALSE(intermediate_path.empty()); 1673 ASSERT_FALSE(intermediate_path.empty());
1677 ASSERT_TRUE(PathExists(intermediate_path)); 1674 ASSERT_TRUE(PathExists(intermediate_path));
1678 1675
1679 download->Remove(); 1676 download->Remove();
1680 RunAllPendingInMessageLoop(BrowserThread::FILE); 1677 RunAllBlockingPoolTasksUntilIdle();
1681 RunAllPendingInMessageLoop();
1682 1678
1683 // The intermediate file should now be gone. 1679 // The intermediate file should now be gone.
1684 EXPECT_FALSE(PathExists(intermediate_path)); 1680 EXPECT_FALSE(PathExists(intermediate_path));
1685 } 1681 }
1686 1682
1687 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveCompletedDownload) { 1683 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveCompletedDownload) {
1688 // A completed download shouldn't delete the downloaded file when it is 1684 // A completed download shouldn't delete the downloaded file when it is
1689 // removed. 1685 // removed.
1690 TestDownloadRequestHandler request_handler; 1686 TestDownloadRequestHandler request_handler;
1691 request_handler.StartServing(TestDownloadRequestHandler::Parameters()); 1687 request_handler.StartServing(TestDownloadRequestHandler::Parameters());
1692 std::unique_ptr<DownloadTestObserver> completion_observer( 1688 std::unique_ptr<DownloadTestObserver> completion_observer(
1693 CreateWaiter(shell(), 1)); 1689 CreateWaiter(shell(), 1));
1694 DownloadItem* download( 1690 DownloadItem* download(
1695 StartDownloadAndReturnItem(shell(), request_handler.url())); 1691 StartDownloadAndReturnItem(shell(), request_handler.url()));
1696 completion_observer->WaitForFinished(); 1692 completion_observer->WaitForFinished();
1697 1693
1698 // The target path should exist. 1694 // The target path should exist.
1699 base::FilePath target_path(download->GetTargetFilePath()); 1695 base::FilePath target_path(download->GetTargetFilePath());
1700 EXPECT_TRUE(PathExists(target_path)); 1696 EXPECT_TRUE(PathExists(target_path));
1701 download->Remove(); 1697 download->Remove();
1702 RunAllPendingInMessageLoop(BrowserThread::FILE); 1698 RunAllBlockingPoolTasksUntilIdle();
1703 RunAllPendingInMessageLoop();
1704 1699
1705 // The file should still exist. 1700 // The file should still exist.
1706 EXPECT_TRUE(PathExists(target_path)); 1701 EXPECT_TRUE(PathExists(target_path));
1707 } 1702 }
1708 1703
1709 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveResumingDownload) { 1704 IN_PROC_BROWSER_TEST_F(DownloadContentTest, RemoveResumingDownload) {
1710 TestDownloadRequestHandler::Parameters parameters = 1705 TestDownloadRequestHandler::Parameters parameters =
1711 TestDownloadRequestHandler::Parameters::WithSingleInterruption(); 1706 TestDownloadRequestHandler::Parameters::WithSingleInterruption();
1712 TestDownloadRequestHandler request_handler; 1707 TestDownloadRequestHandler request_handler;
1713 request_handler.StartServing(parameters); 1708 request_handler.StartServing(parameters);
(...skipping 18 matching lines...) Expand all
1732 download->Resume(); 1727 download->Resume();
1733 request_start_handler.WaitForCallback(); 1728 request_start_handler.WaitForCallback();
1734 1729
1735 // At this point, the download resumption request has been sent out, but the 1730 // At this point, the download resumption request has been sent out, but the
1736 // reponse hasn't been received yet. 1731 // reponse hasn't been received yet.
1737 download->Remove(); 1732 download->Remove();
1738 1733
1739 request_start_handler.RespondWith(std::string(), net::OK); 1734 request_start_handler.RespondWith(std::string(), net::OK);
1740 1735
1741 // The intermediate file should now be gone. 1736 // The intermediate file should now be gone.
1742 RunAllPendingInMessageLoop(BrowserThread::FILE); 1737 RunAllBlockingPoolTasksUntilIdle();
1743 RunAllPendingInMessageLoop();
1744 EXPECT_FALSE(PathExists(intermediate_path)); 1738 EXPECT_FALSE(PathExists(intermediate_path));
1745 1739
1746 parameters.ClearInjectedErrors(); 1740 parameters.ClearInjectedErrors();
1747 parameters.on_start_handler.Reset(); 1741 parameters.on_start_handler.Reset();
1748 request_handler.StartServing(parameters); 1742 request_handler.StartServing(parameters);
1749 1743
1750 // Start the second download and wait until it's done. This exercises the 1744 // Start the second download and wait until it's done. This exercises the
1751 // entire downloads stack and effectively flushes all of our worker threads. 1745 // entire downloads stack and effectively flushes all of our worker threads.
1752 // We are testing whether the URL request created in the previous 1746 // We are testing whether the URL request created in the previous
1753 // DownloadItem::Resume() call reulted in a new download or not. 1747 // DownloadItem::Resume() call reulted in a new download or not.
(...skipping 29 matching lines...) Expand all
1783 request_start_handler.WaitForCallback(); 1777 request_start_handler.WaitForCallback();
1784 1778
1785 // At this point, the download item has initiated a network request for the 1779 // At this point, the download item has initiated a network request for the
1786 // resumption attempt, but hasn't received a response yet. 1780 // resumption attempt, but hasn't received a response yet.
1787 download->Cancel(true /* user_cancel */); 1781 download->Cancel(true /* user_cancel */);
1788 1782
1789 request_start_handler.RespondWith(std::string(), net::OK); 1783 request_start_handler.RespondWith(std::string(), net::OK);
1790 1784
1791 // The intermediate file should now be gone. 1785 // The intermediate file should now be gone.
1792 RunAllPendingInMessageLoop(BrowserThread::IO); 1786 RunAllPendingInMessageLoop(BrowserThread::IO);
1793 RunAllPendingInMessageLoop(BrowserThread::FILE); 1787 RunAllBlockingPoolTasksUntilIdle();
1794 RunAllPendingInMessageLoop();
1795 EXPECT_FALSE(PathExists(intermediate_path)); 1788 EXPECT_FALSE(PathExists(intermediate_path));
1796 1789
1797 parameters.ClearInjectedErrors(); 1790 parameters.ClearInjectedErrors();
1798 parameters.on_start_handler.Reset(); 1791 parameters.on_start_handler.Reset();
1799 request_handler.StartServing(parameters); 1792 request_handler.StartServing(parameters);
1800 1793
1801 // Start the second download and wait until it's done. This exercises the 1794 // Start the second download and wait until it's done. This exercises the
1802 // entire downloads stack and effectively flushes all of our worker threads. 1795 // entire downloads stack and effectively flushes all of our worker threads.
1803 // We are testing whether the URL request created in the previous 1796 // We are testing whether the URL request created in the previous
1804 // DownloadItem::Resume() call reulted in a new download or not. 1797 // DownloadItem::Resume() call reulted in a new download or not.
(...skipping 21 matching lines...) Expand all
1826 // Resume and remove download. We don't expect OnDownloadCreated() calls. 1819 // Resume and remove download. We don't expect OnDownloadCreated() calls.
1827 MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell())); 1820 MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell()));
1828 EXPECT_CALL(dm_observer, OnDownloadCreated(_, _)).Times(0); 1821 EXPECT_CALL(dm_observer, OnDownloadCreated(_, _)).Times(0);
1829 1822
1830 download->Resume(); 1823 download->Resume();
1831 WaitForInProgress(download); 1824 WaitForInProgress(download);
1832 1825
1833 download->Remove(); 1826 download->Remove();
1834 1827
1835 // The intermediate file should now be gone. 1828 // The intermediate file should now be gone.
1836 RunAllPendingInMessageLoop(BrowserThread::FILE); 1829 RunAllBlockingPoolTasksUntilIdle();
1837 RunAllPendingInMessageLoop();
1838 EXPECT_FALSE(PathExists(intermediate_path)); 1830 EXPECT_FALSE(PathExists(intermediate_path));
1839 EXPECT_FALSE(PathExists(target_path)); 1831 EXPECT_FALSE(PathExists(target_path));
1840 EXPECT_TRUE(EnsureNoPendingDownloads()); 1832 EXPECT_TRUE(EnsureNoPendingDownloads());
1841 } 1833 }
1842 1834
1843 IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelResumedDownload) { 1835 IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelResumedDownload) {
1844 TestDownloadRequestHandler::Parameters parameters = 1836 TestDownloadRequestHandler::Parameters parameters =
1845 TestDownloadRequestHandler::Parameters::WithSingleInterruption(); 1837 TestDownloadRequestHandler::Parameters::WithSingleInterruption();
1846 TestDownloadRequestHandler request_handler; 1838 TestDownloadRequestHandler request_handler;
1847 request_handler.StartServing(parameters); 1839 request_handler.StartServing(parameters);
(...skipping 11 matching lines...) Expand all
1859 // Resume and remove download. We don't expect OnDownloadCreated() calls. 1851 // Resume and remove download. We don't expect OnDownloadCreated() calls.
1860 MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell())); 1852 MockDownloadManagerObserver dm_observer(DownloadManagerForShell(shell()));
1861 EXPECT_CALL(dm_observer, OnDownloadCreated(_, _)).Times(0); 1853 EXPECT_CALL(dm_observer, OnDownloadCreated(_, _)).Times(0);
1862 1854
1863 download->Resume(); 1855 download->Resume();
1864 WaitForInProgress(download); 1856 WaitForInProgress(download);
1865 1857
1866 download->Cancel(true); 1858 download->Cancel(true);
1867 1859
1868 // The intermediate file should now be gone. 1860 // The intermediate file should now be gone.
1869 RunAllPendingInMessageLoop(BrowserThread::FILE); 1861 RunAllBlockingPoolTasksUntilIdle();
1870 RunAllPendingInMessageLoop();
1871 EXPECT_FALSE(PathExists(intermediate_path)); 1862 EXPECT_FALSE(PathExists(intermediate_path));
1872 EXPECT_FALSE(PathExists(target_path)); 1863 EXPECT_FALSE(PathExists(target_path));
1873 EXPECT_TRUE(EnsureNoPendingDownloads()); 1864 EXPECT_TRUE(EnsureNoPendingDownloads());
1874 } 1865 }
1875 1866
1876 IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoFile) { 1867 IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoFile) {
1877 TestDownloadRequestHandler request_handler; 1868 TestDownloadRequestHandler request_handler;
1878 TestDownloadRequestHandler::Parameters parameters; 1869 TestDownloadRequestHandler::Parameters parameters;
1879 request_handler.StartServing(parameters); 1870 request_handler.StartServing(parameters);
1880 1871
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
2772 2763
2773 std::vector<DownloadItem*> downloads; 2764 std::vector<DownloadItem*> downloads;
2774 DownloadManagerForShell(shell())->GetAllDownloads(&downloads); 2765 DownloadManagerForShell(shell())->GetAllDownloads(&downloads);
2775 ASSERT_EQ(1u, downloads.size()); 2766 ASSERT_EQ(1u, downloads.size());
2776 2767
2777 EXPECT_EQ(FILE_PATH_LITERAL("foo"), 2768 EXPECT_EQ(FILE_PATH_LITERAL("foo"),
2778 downloads[0]->GetTargetFilePath().BaseName().value()); 2769 downloads[0]->GetTargetFilePath().BaseName().value());
2779 } 2770 }
2780 2771
2781 } // namespace content 2772 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/docs/save-page-as.md ('k') | content/browser/download/download_file.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698