Index: chrome/browser/download/download_browsertest.cc |
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc |
index 5874cce0183e983a3661edf6a6d6a4e237c14c6d..7474bad70a553de5f7dba29426fde51606f70741 100644 |
--- a/chrome/browser/download/download_browsertest.cc |
+++ b/chrome/browser/download/download_browsertest.cc |
@@ -389,45 +389,56 @@ class DownloadTest : public InProcessBrowserTest { |
return GetDownloadPrefs(browser)->download_path(); |
} |
- // Create a DownloadTestObserver that will wait for the |
+ // Create a DownloadTestObserverTerminal that will wait for the |
// specified number of downloads to finish. |
DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) { |
DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
- return new DownloadTestObserver( |
+ return new DownloadTestObserverTerminal( |
download_manager, num_downloads, |
- DownloadItem::COMPLETE, // Really done |
true, // Bail on select file |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
} |
- // Create a DownloadTestObserver that will wait for the |
+ // Create a DownloadTestObserverInProgress that will wait for the |
// specified number of downloads to start. |
DownloadTestObserver* CreateInProgressWaiter(Browser* browser, |
int num_downloads) { |
benjhayden
2012/03/08 20:30:02
pre-existing nit: indentation.
ahendrickson
2012/03/08 21:28:55
Done.
|
DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
- return new DownloadTestObserver( |
- download_manager, num_downloads, |
- DownloadItem::IN_PROGRESS, // Has started |
- true, // Bail on select file |
- DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
+ return new DownloadTestObserverInProgress( |
+ download_manager, num_downloads); |
} |
- // Create a DownloadTestObserver that will wait for the |
+ // Create a DownloadTestObserverTerminal that will wait for the |
// specified number of downloads to finish, or for |
// a dangerous download warning to be shown. |
DownloadTestObserver* DangerousInstallWaiter( |
Browser* browser, |
int num_downloads, |
- DownloadItem::DownloadState final_state, |
DownloadTestObserver::DangerousDownloadAction dangerous_download_action) { |
DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
- return new DownloadTestObserver( |
+ return new DownloadTestObserverTerminal( |
download_manager, num_downloads, |
- final_state, |
true, // Bail on select file |
dangerous_download_action); |
} |
+ void CheckDownloadStatesForBrowser(Browser* browser, |
+ size_t num, |
+ DownloadItem::DownloadState state) { |
+ std::vector<DownloadItem*> download_items; |
+ GetDownloads(browser, &download_items); |
+ |
+ EXPECT_EQ(num, download_items.size()); |
+ |
+ for (size_t i = 0; i < download_items.size(); ++i) { |
+ EXPECT_EQ(state, download_items[i]->GetState()) << " Item " << i; |
+ } |
+ } |
+ |
+ void CheckDownloadStates(size_t num, DownloadItem::DownloadState state) { |
+ CheckDownloadStatesForBrowser(browser(), num, state); |
+ } |
+ |
// Download |url|, then wait for the download to finish. |
// |disposition| indicates where the navigation occurs (current tab, new |
// foreground tab, etc). |
@@ -452,6 +463,7 @@ class DownloadTest : public InProcessBrowserTest { |
browser_test_flags); |
// Waits for the download to complete. |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
Randy Smith (Not in Mondays)
2012/03/08 18:25:31
I think of DCHECKs as not being good in test code,
ahendrickson
2012/03/08 20:56:34
Done.
|
// If specified, check the state of the select file dialog. |
if (expectation != EXPECT_NOTHING) { |
@@ -564,6 +576,8 @@ class DownloadTest : public InProcessBrowserTest { |
NEW_FOREGROUND_TAB, |
ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStatesForBrowser(browser, 1, DownloadItem::COMPLETE); |
Randy Smith (Not in Mondays)
2012/03/08 18:25:31
These seem redundant. You're welcome to leave it
ahendrickson
2012/03/08 20:56:34
For this test, they are somewhat redundant. In ot
|
EXPECT_EQ(2, browser->tab_count()); |
@@ -694,12 +708,9 @@ class DownloadTest : public InProcessBrowserTest { |
DownloadManager* download_manager = DownloadManagerForBrowser(browser()); |
scoped_ptr<DownloadTestObserver> observer( |
- new DownloadTestObserver( |
+ new DownloadTestObserverTerminal( |
download_manager, |
1, |
- download_info.reason == DOWNLOAD_INTERRUPT_REASON_NONE ? |
- DownloadItem::COMPLETE : // Really done |
- DownloadItem::INTERRUPTED, |
true, // Bail on select file |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
@@ -719,8 +730,14 @@ class DownloadTest : public InProcessBrowserTest { |
1); |
} |
- if (download_info.show_download_item) |
+ if (download_info.show_download_item) { |
observer->WaitForFinished(); |
+ DownloadItem::DownloadState final_state = |
+ (download_info.reason == DOWNLOAD_INTERRUPT_REASON_NONE) ? |
+ DownloadItem::COMPLETE : |
+ DownloadItem::INTERRUPTED; |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(final_state)); |
+ } |
// Validate that the correct file was downloaded. |
download_items.clear(); |
@@ -799,16 +816,17 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) { |
// Download the file and wait. We expect the Select File dialog to appear |
// due to the MIME type, but we still wait until the download completes. |
scoped_ptr<DownloadTestObserver> observer( |
- new DownloadTestObserver( |
+ new DownloadTestObserverTerminal( |
DownloadManagerForBrowser(browser()), |
1, |
- DownloadItem::COMPLETE, // Really done |
false, // Continue on select file. |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
ui_test_utils::NavigateToURLWithDisposition( |
browser(), url, CURRENT_TAB, |
ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
EXPECT_TRUE(observer->select_file_dialog_seen()); |
// Check state. |
@@ -1329,6 +1347,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, MultiDownload) { |
NEW_FOREGROUND_TAB, |
ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
observer2->WaitForFinished(); // Wait for the third request. |
+ DCHECK_EQ(1u, observer2->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
// Get the important info from other threads and check it. |
scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); |
@@ -1356,12 +1375,12 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { |
EXPECT_EQ(1, browser()->tab_count()); |
// TODO(rdsmith): Fragile code warning! The code below relies on the |
- // DownloadTestObserver only finishing when the new download has reached |
- // the state of being entered into the history and being user-visible |
- // (that's what's required for the Remove to be valid and for the |
- // download shelf to be visible). By the pure semantics of |
- // DownloadTestObserver, that's not guaranteed; DownloadItems are created |
- // in the IN_PROGRESS state and made known to the DownloadManager |
+ // DownloadTestObserverInProgress only finishing when the new download |
+ // has reached the state of being entered into the history and being |
+ // user-visible (that's what's required for the Remove to be valid and |
+ // for the download shelf to be visible). By the pure semantics of |
+ // DownloadTestObserverInProgress, that's not guaranteed; DownloadItems |
+ // are created in the IN_PROGRESS state and made known to the DownloadManager |
// immediately, so any ModelChanged event on the DownloadManager after |
// navigation would allow the observer to return. However, the only |
// ModelChanged() event the code will currently fire is in |
@@ -1507,6 +1526,8 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { |
scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser(), 1)); |
ui_test_utils::NavigateToURL(browser(), url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
// Confirm the downloaded data exists. |
FilePath downloaded_file = GetDownloadDirectory(browser()); |
@@ -1552,11 +1573,12 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { |
scoped_ptr<DownloadTestObserver> observer( |
DangerousInstallWaiter( |
- browser(), 1, DownloadItem::CANCELLED, |
+ browser(), 1, |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY)); |
ui_test_utils::NavigateToURL(browser(), extension_url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::CANCELLED)); |
EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
// Download shelf should close. Download panel stays open on ChromeOS. |
@@ -1581,11 +1603,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { |
scoped_ptr<DownloadTestObserver> observer( |
DangerousInstallWaiter( |
- browser(), 1, DownloadItem::COMPLETE, |
+ browser(), 1, |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
ui_test_utils::NavigateToURL(browser(), extension_url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
// Download shelf should close. Download panel stays open on ChromeOS. |
@@ -1610,11 +1634,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { |
scoped_ptr<DownloadTestObserver> observer( |
DangerousInstallWaiter( |
- browser(), 1, DownloadItem::COMPLETE, |
+ browser(), 1, |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
ui_test_utils::NavigateToURL(browser(), extension_url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
// Download shelf should close. Download panel stays open on ChromeOS. |
@@ -1640,11 +1666,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { |
scoped_ptr<DownloadTestObserver> observer( |
DangerousInstallWaiter( |
- browser(), 1, DownloadItem::COMPLETE, |
+ browser(), 1, |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
ui_test_utils::NavigateToURL(browser(), extension_url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
// Check that the extension was not installed. |
ExtensionService* extension_service = |
@@ -1664,11 +1692,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { |
scoped_ptr<DownloadTestObserver> observer( |
DangerousInstallWaiter( |
- browser(), 1, DownloadItem::COMPLETE, |
+ browser(), 1, |
DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
ui_test_utils::NavigateToURL(browser(), extension_url); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
// Download shelf should close. Download panel stays open on ChromeOS. |
@@ -1825,16 +1855,17 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrl) { |
ASSERT_TRUE(web_contents); |
DownloadTestObserver* observer( |
- new DownloadTestObserver( |
- DownloadManagerForBrowser(browser()), 1, |
- DownloadItem::COMPLETE, // Really done |
- false, // Ignore select file. |
- DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
+ new DownloadTestObserverTerminal( |
+ DownloadManagerForBrowser(browser()), 1, |
+ false, // Ignore select file. |
+ DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
DownloadSaveInfo save_info; |
save_info.prompt_for_save_location = true; |
DownloadManagerForBrowser(browser())->DownloadUrl( |
url, GURL(""), "", false, -1, save_info, web_contents); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
EXPECT_TRUE(observer->select_file_dialog_seen()); |
// Check state. |
@@ -1862,6 +1893,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrlToPath) { |
DownloadManagerForBrowser(browser())->DownloadUrl( |
url, GURL(""), "", false, -1, save_info, web_contents); |
observer->WaitForFinished(); |
+ DCHECK_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
// Check state. |
EXPECT_EQ(1, browser()->tab_count()); |
@@ -1894,11 +1926,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) { |
// reachable. |
ASSERT_TRUE(test_server()->Stop()); |
scoped_ptr<DownloadTestObserver> waiter( |
- new DownloadTestObserver( |
- DownloadManagerForBrowser(browser()), 1, DownloadItem::COMPLETE, |
+ new DownloadTestObserverTerminal( |
+ DownloadManagerForBrowser(browser()), 1, |
false, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
browser()->SavePage(); |
waiter->WaitForFinished(); |
+ DCHECK_EQ(1u, waiter->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
// Validate that the correct file was downloaded. |
GetDownloads(browser(), &download_items); |
@@ -1908,8 +1942,8 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) { |
// Try to download it via a context menu. |
scoped_ptr<DownloadTestObserver> waiter_context_menu( |
- new DownloadTestObserver( |
- DownloadManagerForBrowser(browser()), 1, DownloadItem::COMPLETE, |
+ new DownloadTestObserverTerminal( |
+ DownloadManagerForBrowser(browser()), 1, |
false, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
content::ContextMenuParams context_menu_params; |
context_menu_params.media_type = WebKit::WebContextMenuData::MediaTypeImage; |
@@ -1920,6 +1954,9 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) { |
menu.Init(); |
menu.ExecuteCommand(IDC_CONTENT_CONTEXT_SAVEIMAGEAS); |
waiter_context_menu->WaitForFinished(); |
+ DCHECK_EQ( |
+ 1u, waiter_context_menu->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(2, DownloadItem::COMPLETE); |
// Validate that the correct file was downloaded via the context menu. |
download_items.clear(); |
@@ -1969,11 +2006,13 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaPost) { |
// rather than "POST". |
ASSERT_TRUE(test_server()->Stop()); |
scoped_ptr<DownloadTestObserver> waiter( |
- new DownloadTestObserver( |
- DownloadManagerForBrowser(browser()), 1, DownloadItem::COMPLETE, |
+ new DownloadTestObserverTerminal( |
+ DownloadManagerForBrowser(browser()), 1, |
false, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
browser()->SavePage(); |
waiter->WaitForFinished(); |
+ DCHECK_EQ(1u, waiter->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(1, DownloadItem::COMPLETE); |
// Validate that the correct file was downloaded. |
GetDownloads(browser(), &download_items); |
@@ -1983,8 +2022,8 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaPost) { |
// Try to download it via a context menu. |
scoped_ptr<DownloadTestObserver> waiter_context_menu( |
- new DownloadTestObserver( |
- DownloadManagerForBrowser(browser()), 1, DownloadItem::COMPLETE, |
+ new DownloadTestObserverTerminal( |
+ DownloadManagerForBrowser(browser()), 1, |
false, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
content::ContextMenuParams context_menu_params; |
context_menu_params.media_type = WebKit::WebContextMenuData::MediaTypeImage; |
@@ -1994,6 +2033,9 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaPost) { |
menu.Init(); |
menu.ExecuteCommand(IDC_CONTENT_CONTEXT_SAVEIMAGEAS); |
waiter_context_menu->WaitForFinished(); |
+ DCHECK_EQ( |
+ 1u, waiter_context_menu->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
+ CheckDownloadStates(2, DownloadItem::COMPLETE); |
// Validate that the correct file was downloaded via the context menu. |
download_items.clear(); |