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

Unified Diff: content/browser/download/download_browsertest.cc

Issue 11050003: Shift EnsureNoPendingDownloads() implementation into tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated comments. Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/download/download_browsertest.cc ('k') | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/download_browsertest.cc
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc
index 46030b1e08c42065384c72aa98fd76f078939263..0e2b1ea5c4fa7a2d11501c9cbfe4e077f168f168 100644
--- a/content/browser/download/download_browsertest.cc
+++ b/content/browser/download/download_browsertest.cc
@@ -177,7 +177,6 @@ DownloadFile* DownloadFileWithDelayFactory::CreateFile(
DownloadManager* download_manager,
bool calculate_hash,
const net::BoundNetLog& bound_net_log) {
-
return new DownloadFileWithDelay(
info, stream.Pass(), new DownloadRequestHandle(info->request_handle),
download_manager, calculate_hash,
@@ -224,6 +223,77 @@ void DownloadFileWithDelayFactory::WaitForSomeCallback() {
}
}
+class CountingDownloadFile : public DownloadFileImpl {
+ public:
+ CountingDownloadFile(
+ const DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
+ DownloadRequestHandleInterface* request_handle,
+ scoped_refptr<content::DownloadManager> download_manager,
+ bool calculate_hash,
+ scoped_ptr<content::PowerSaveBlocker> power_save_blocker,
+ const net::BoundNetLog& bound_net_log)
+ : DownloadFileImpl(info, stream.Pass(), request_handle, download_manager,
+ calculate_hash, power_save_blocker.Pass(),
+ bound_net_log) {}
+
+ virtual ~CountingDownloadFile() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ active_files_--;
+ }
+
+ virtual content::DownloadInterruptReason Initialize() OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ active_files_++;
+ return DownloadFileImpl::Initialize();
+ }
+
+ static void GetNumberActiveFiles(int* result) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ *result = active_files_;
+ }
+
+ // Can be called on any thread, and will block (running message loop)
+ // until data is returned.
+ static int GetNumberActiveFilesFromFileThread() {
+ int result = -1;
+ BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
+ base::Bind(&CountingDownloadFile::GetNumberActiveFiles, &result),
+ MessageLoop::current()->QuitClosure());
+ MessageLoop::current()->Run();
+ DCHECK_NE(-1, result);
+ return result;
+ }
+
+ private:
+ static int active_files_;
+};
+
+int CountingDownloadFile::active_files_ = 0;
+
+class CountingDownloadFileFactory : public DownloadFileFactory {
+ public:
+ CountingDownloadFileFactory() {}
+ virtual ~CountingDownloadFileFactory() {}
+
+ // DownloadFileFactory interface.
+ virtual content::DownloadFile* CreateFile(
+ DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
+ DownloadManager* download_manager,
+ bool calculate_hash,
+ const net::BoundNetLog& bound_net_log) OVERRIDE {
+ return new CountingDownloadFile(
+ info, stream.Pass(), new DownloadRequestHandle(info->request_handle),
+ download_manager, calculate_hash,
+ scoped_ptr<content::PowerSaveBlocker>(
+ new content::PowerSaveBlocker(
+ content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension,
+ "Download in progress")).Pass(),
+ bound_net_log);
+ }
+};
+
} // namespace
class DownloadContentTest : public ContentBrowserTest {
@@ -263,13 +333,21 @@ class DownloadContentTest : public ContentBrowserTest {
return new DownloadTestObserverInProgress(download_manager, num_downloads);
}
+ // Note: Cannot be used with other alternative DownloadFileFactorys
+ void SetupEnsureNoPendingDownloads() {
+ GetDownloadFileManager()->SetFileFactoryForTesting(
+ scoped_ptr<content::DownloadFileFactory>(
+ new CountingDownloadFileFactory()).Pass());
+ }
+
bool EnsureNoPendingDownloads() {
bool result = true;
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&EnsureNoPendingDownloadJobsOnIO, &result));
MessageLoop::current()->Run();
- return result && DownloadManager::EnsureNoPendingDownloadsForTesting();
+ return result &&
+ (CountingDownloadFile::GetNumberActiveFilesFromFileThread() == 0);
}
void DownloadAndWait(Shell* shell, const GURL& url) {
@@ -342,6 +420,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadCancelled) {
// DownloadItem, and wait for the state that indicates the item has been
// entered in the history and made visible in the UI.
+ SetupEnsureNoPendingDownloads();
+
// Create a download, wait until it's started, and confirm
// we're in the expected state.
scoped_ptr<DownloadTestObserver> observer(CreateInProgressWaiter(shell(), 1));
@@ -366,6 +446,8 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadCancelled) {
// Check that downloading multiple (in this case, 2) files does not result in
// corrupted files.
IN_PROC_BROWSER_TEST_F(DownloadContentTest, MultiDownload) {
+ SetupEnsureNoPendingDownloads();
+
// Create a download, wait until it's started, and confirm
// we're in the expected state.
scoped_ptr<DownloadTestObserver> observer1(
« no previous file with comments | « chrome/browser/download/download_browsertest.cc ('k') | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698