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

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

Issue 5610006: Converted download UI tests to Browser tests. (Closed) Base URL: http://git.chromium.org/git/chromium.git@browser_tests
Patch Set: Cleaned up code. Fixed failing tests. Created 10 years 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 | « no previous file | chrome/test/in_process_browser_test.h » ('j') | chrome/test/ui_test_utils.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/download/download_browsertest.cc
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index fde56b5c19ac8ae0147f6bae8e407ba22e620e78..8c904771b6b781b7a0d9dbadf31ee47b27dcdf3a 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -2,26 +2,34 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <stack>
+
#include "base/file_path.h"
#include "base/file_util.h"
#include "base/path_service.h"
#include "base/scoped_temp_dir.h"
#include "base/test/test_file_util.h"
-#include "chrome/browser/ui/browser.h"
+#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_window.h"
#include "chrome/browser/download/download_item.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_prefs.h"
+#include "chrome/browser/download/download_shelf.h"
#include "chrome/browser/net/url_request_mock_http_job.h"
+#include "chrome/browser/net/url_request_slow_download_job.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/notification_service.h"
+#include "chrome/common/page_transition_types.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/in_process_browser_test.h"
#include "chrome/test/ui_test_utils.h"
+#include "net/base/net_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -215,7 +223,40 @@ class DownloadsObserver : public DownloadManager::Observer,
};
class DownloadTest : public InProcessBrowserTest {
+ public:
+ enum SelectExpectation {
+ EXPECT_NO_SELECT_DIALOG = -1,
+ EXPECT_NOTHING,
+ EXPECT_SELECT_DIALOG
+ };
+
+ virtual void InitialSetup(bool force_no_prompt) {
+ // Sanity check default values for window / tab count and shelf visibility.
+ PushBrowser(InProcessBrowserTest::browser()); // Set the initial browser.
+ int window_count = BrowserList::size();
+ ASSERT_EQ(1, window_count);
+ EXPECT_EQ(1, browser()->tab_count());
+
+ bool is_shelf_visible = browser()->window()->IsDownloadShelfVisible();
+ EXPECT_FALSE(is_shelf_visible);
+
+ // Set up the temporary download folder.
+ ASSERT_TRUE(CreateAndSetDownloadsDirectory());
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 My understanding is that we can't use ASSERT_* ins
ahendrickson 2010/12/16 19:26:41 I removed most of the ASSERT's, including all that
+
+ if (force_no_prompt) {
+ browser()->profile()->GetPrefs()->SetBoolean(prefs::kPromptForDownload,
+ false);
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Is there ever a case where we *don't* want to spec
ahendrickson 2010/12/16 19:26:41 There is still one instance where it has to occur
+ }
+ }
+
protected:
+
+ // We now use a browser stack.
+ void PushBrowser(Browser* browser) { browsers_.push(browser); }
+ void PopBrowser() { browsers_.pop(); }
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 If you take my suggestion below about giving Creat
ahendrickson 2010/12/16 19:26:41 It's also needed for |CreateWaiter()|, which is ca
+
+ virtual Browser* browser() const { return browsers_.top(); }
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I'd suggest browsers_.empty() -> return NULL;
ahendrickson 2010/12/16 19:26:41 Done.
+
void SetUpInProcessBrowserTestFixture() {
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir_));
}
@@ -223,11 +264,17 @@ class DownloadTest : public InProcessBrowserTest {
// Must be called after browser creation. Creates a temporary
// directory for downloads that is auto-deleted on destruction.
bool CreateAndSetDownloadsDirectory() {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 The two usages of this function are in InitialSetu
ahendrickson 2010/12/16 19:26:41 I'd have to make other functions take a browser ar
- if (downloads_directory_.CreateUniqueTempDir()) {
- browser()->profile()->GetPrefs()->SetFilePath(
+ if (downloads_directory_.CreateUniqueTempDir())
+ return SetDownloadsDirectoryForBrowser(browser());
+ return false;
+ }
+
+ bool SetDownloadsDirectoryForBrowser(Browser* browser) {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 The only use I can find of SetDownloadsDirectoryFo
ahendrickson 2010/12/16 19:26:41 Done.
+ if (browser) {
+ browser->profile()->GetPrefs()->SetFilePath(
prefs::kDownloadDefaultDirectory,
downloads_directory_.path());
- return true;
+ return true;
}
return false;
}
@@ -246,7 +293,44 @@ class DownloadTest : public InProcessBrowserTest {
return new DownloadsObserver(
download_manager, num_downloads,
DownloadsObserver::FILE_RENAME, // Really done
- true); // Bail on select file
+ true); // Bail on select file
+ }
+
+ // Download a file, then wait for the download to finish.
+ // |disposition| indicates where the naiation occurs (current tab, new
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Nit: "navigation"
ahendrickson 2010/12/16 19:26:41 Done.
+ // foreground tab, etc).
+ // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more
+ // values in the BrowserTestFlags enum.
+ void DownloadAndWaitWithDisposition(Browser* browser,
+ const GURL& url,
+ WindowOpenDisposition disposition,
+ SelectExpectation expectation,
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 |expectation| isn't mentioned in the comments for
ahendrickson 2010/12/16 19:26:41 Done.
+ int browser_test_flags) {
+ // Setup notification, navigate, and block.
+ scoped_ptr<DownloadsObserver> observer(CreateWaiter(1));
+ ui_test_utils::NavigateToURLWithDisposition(browser,
+ url,
+ disposition,
+ browser_test_flags);
+ observer->WaitForFinished();
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I'd make clear in comments that we're blocking for
ahendrickson 2010/12/16 19:26:41 Done.
+
+ // If specified, check the state of the select file dialog.
+ if (expectation != EXPECT_NOTHING) {
+ EXPECT_EQ(expectation == EXPECT_SELECT_DIALOG,
+ observer->select_file_dialog_seen());
+ }
+ }
+
+ // Download a file in the current tab, then wait for the download to finish.
+ void DownloadAndWait(Browser* browser,
+ const GURL& url,
+ SelectExpectation expectation) {
+ DownloadAndWaitWithDisposition(
+ browser,
+ url,
+ CURRENT_TAB,
+ expectation,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
}
// Should only be called when the download is known to have finished
@@ -280,59 +364,569 @@ class DownloadTest : public InProcessBrowserTest {
EXPECT_TRUE(file_util::DieFileDie(downloaded_file, false));
}
+ // Note: |expected_title_in_progress| and |expected_title_in_finished| need
+ // to be checked.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I think the usual format for this is "TODO(<your l
+ void RunSizeTest(const GURL& url,
+ const std::wstring& expected_title_in_progress,
+ const std::wstring& expected_title_finished) {
+ InitialSetup(true);
+
+ // Download a partial web page in a background tab and wait.
+ // The mock system will not complete until it gets a special URL.
+ scoped_ptr<DownloadsObserver> observer(CreateWaiter(1));
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ // TODO(tc): check download status text before downloading.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I think since the text is primarily yours (?), the
ahendrickson 2010/12/16 19:26:41 Done.
+ // Need to:
+ // - Add a member function to the |DownloadShelf| interface class, that
+ // indicates how many members it has.
+ // - Add a member function to |DownloadShelf| to get the status text
+ // of a given member (for example, via |DownloadItemView|'s
+ // GetAccessibleName() member function), by index.
+ // - Iterate over browser()->window()->GetDownloadShelf()'s members
+ // to see if any match the status text we want. Start with the last one.
+
+ // Complete sending the request. We do this by loading a second URL in a
+ // separate tab.
+ GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl);
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ finish_url,
+ NEW_FOREGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+ observer->WaitForFinished();
+
+ EXPECT_EQ(2, browser()->tab_count());
+
+ // TODO(tc): check download status text after downloading.
+
+ // Make sure the download shelf is showing.
+ EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
+
+ FilePath filename;
+ net::FileURLToFilePath(url, &filename);
+ filename = filename.BaseName();
+ FilePath download_path = downloads_directory_.path().Append(filename);
+ EXPECT_TRUE(file_util::PathExists(download_path));
+
+ // Delete the file we just downloaded.
+ EXPECT_TRUE(file_util::DieFileDie(download_path, true));
+ EXPECT_FALSE(file_util::PathExists(download_path));
+ }
+
private:
// Location of the test data.
FilePath test_dir_;
// Location of the downloads directory for these tests
ScopedTempDir downloads_directory_;
+
+ std::stack<Browser *> browsers_;
};
+// NOTES:
+//
+// Files for these tests are found in chrome\test\data\.
+// Mock responses have extension .mock-http-headers appended to the file name.
+
+// Download a file due to the associated MIME type.
+//
// Test is believed good (non-flaky) in itself, but it
// sometimes trips over underlying flakiness in the downloads
// subsystem in in http://crbug.com/63237. Until that bug is
// fixed, this test should be considered flaky. It's entered as
// DISABLED since if 63237 does cause a failure, it'll be a timeout.
IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeType) {
+ InitialSetup(false);
FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
- ASSERT_TRUE(CreateAndSetDownloadsDirectory());
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
- EXPECT_EQ(1, browser()->tab_count());
+ // Download the file and wait. We do not expect the Select File dialog.
+ DownloadAndWait(browser(), url, EXPECT_NO_SELECT_DIALOG);
- // Setup notification, navigate, and block.
- scoped_ptr<DownloadsObserver> observer(CreateWaiter(1));
- ui_test_utils::NavigateToURL(
- browser(), URLRequestMockHTTPJob::GetMockUrl(file));
- observer->WaitForFinished();
-
- // Download should be finished; check state.
- EXPECT_FALSE(observer->select_file_dialog_seen());
+ // Check state.
EXPECT_EQ(1, browser()->tab_count());
CheckDownload(file, file);
EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
}
+// Put up a Select File dialog when the file is downloaded, due to its MIME
+// type.
+//
// This test runs correctly, but leaves behind turds in the test user's
// download directory because of http://crbug.com/62099. No big loss; it
// was primarily confirming DownloadsObserver wait on select file dialog
// functionality anyway.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeTypeSelect) {
- FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
- ASSERT_TRUE(CreateAndSetDownloadsDirectory());
+ InitialSetup(false);
browser()->profile()->GetPrefs()->SetBoolean(prefs::kPromptForDownload, true);
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+
+ // Download the file and wait. We expect the Select File dialog to appear
+ // due to the MIME type.
+ DownloadAndWait(browser(), url, EXPECT_SELECT_DIALOG);
+ // Check state.
EXPECT_EQ(1, browser()->tab_count());
+ // Since we exited while the Select File dialog was visible, there should not
+ // be anything in the download shelf and so it should not be visible.
+ EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
+}
+
+// Access a file with a viewable mime-type, verify that a download
+// did not initiate.
+IN_PROC_BROWSER_TEST_F(DownloadTest, NoDownload) {
+ InitialSetup(true);
+ FilePath file(FILE_PATH_LITERAL("download-test2.html"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ FilePath file_path = GetDownloadDirectory().Append(file);
- // Setup notification, navigate, and block.
- scoped_ptr<DownloadsObserver> observer(CreateWaiter(1));
- ui_test_utils::NavigateToURL(
- browser(), URLRequestMockHTTPJob::GetMockUrl(file));
- observer->WaitForFinished();
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURL(browser(), url);
- // Download should not be finished; check state.
- EXPECT_TRUE(observer->select_file_dialog_seen());
+ // Check that we did not download the web page.
+ EXPECT_FALSE(file_util::PathExists(file_path));
+ if (file_util::PathExists(file_path))
+ ASSERT_TRUE(file_util::DieFileDie(file_path, false));
+
+ // Check state.
+ EXPECT_EQ(1, browser()->tab_count());
+ EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
+}
+
+// Download a 0-size file with a content-disposition header, verify that the
+// download tab opened and the file exists as the filename specified in the
+// header. This also ensures we properly handle empty file downloads.
+// The download shelf should be visible in the current tab.
+//
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky. It's entered as
+// DISABLED since if 63237 does cause a failure, it'll be a timeout.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_ContentDisposition) {
+ InitialSetup(true);
+ FilePath file(FILE_PATH_LITERAL("download-test3.gif"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ FilePath download_file(FILE_PATH_LITERAL("download-test3-attachment.gif"));
+
+ // Download a file and wait.
+ DownloadAndWait(browser(), url, EXPECT_NO_SELECT_DIALOG);
+
+ CheckDownload(download_file, file);
+
+ // Check state.
+ EXPECT_EQ(1, browser()->tab_count());
+ EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
+}
+
+// Test that the download shelf is per-window by starting a download in one
+// tab, opening a second tab, closing the shelf, going back to the first tab,
+// and checking that the shelf is closed.
+//
+// The test is considered flaky due to bug http://crbug.com/26325.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Obviously, remove references to 26325.
ahendrickson 2010/12/16 19:26:41 Done.
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. It's entered as
+// DISABLED since if 63237 does cause a failure, it'll be a timeout.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_PerWindowShelf) {
+ InitialSetup(true);
+ FilePath file(FILE_PATH_LITERAL("download-test3.gif"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ FilePath download_file(FILE_PATH_LITERAL("download-test3-attachment.gif"));
+
+ // Download a file and wait.
+ DownloadAndWait(browser(), url, EXPECT_NO_SELECT_DIALOG);
+
+ CheckDownload(download_file, file);
+
+ // Check state.
EXPECT_EQ(1, browser()->tab_count());
+ EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
+
+ // Open a second tab and wait.
+ ASSERT_NE(static_cast<TabContentsWrapper *>(NULL),
+ browser()->AddSelectedTabWithURL(GURL(), PageTransition::TYPED));
+ EXPECT_EQ(2, browser()->tab_count());
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 It would seem natural to this test to check that t
ahendrickson 2010/12/16 19:26:41 Done.
+
+ // Hide the download shelf.
+ browser()->window()->GetDownloadShelf()->Close();
EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
+
+ // Go to the first tab.
+ browser()->SelectTabContentsAt(0, true);
+ ASSERT_EQ(2, browser()->tab_count());
+
+ // The download shelf should not be visible.
+ EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
+}
+
+// UnknownSize and KnownSize are tests which depend on
+// URLRequestSlowDownloadJob to serve content in a certain way. Data will be
+// sent in two chunks where the first chunk is 35K and the second chunk is 10K.
+// The test will first attempt to download a file; but the server will "pause"
+// in the middle until the server receives a second request for
+// "download-finish". At that time, the download will finish.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I'd add "These tests don't currently test much due
ahendrickson 2010/12/16 19:26:41 Done.
+
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_UnknownSize) {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 For what it's worth, I believe these tests won't n
ahendrickson 2010/12/16 19:26:41 I'm going to enable them, then.
+ GURL url(URLRequestSlowDownloadJob::kUnknownSizeUrl);
+ FilePath filename;
+ net::FileURLToFilePath(url, &filename);
+ filename = filename.BaseName();
+ RunSizeTest(url, L"32.0 KB - " + filename.ToWStringHack(),
+ L"100% - " + filename.ToWStringHack());
+}
+
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_KnownSize) {
+ GURL url(URLRequestSlowDownloadJob::kKnownSizeUrl);
+ FilePath filename;
+ net::FileURLToFilePath(url, &filename);
+ filename = filename.BaseName();
+ RunSizeTest(url, L"71% - " + filename.ToWStringHack(),
+ L"100% - " + filename.ToWStringHack());
+}
+
+// Test that when downloading an item in Incognito mode, we don't crash when
+// closing the last Incognito window (http://crbug.com/13983).
+// Also check that the download shelf is not visible after closing the
+// Incognito window.
+//
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_IncognitoDownload) {
+ InitialSetup(false);
+
+ // Open an Incognito window.
+ Browser* incognito = CreateIncognitoBrowser(); // Waits.
+ ASSERT_TRUE(incognito);
+ int window_count = BrowserList::size();
+ ASSERT_EQ(2, window_count);
+
+ // Download a file in the Incognito window and wait.
+ PushBrowser(incognito);
+ CreateAndSetDownloadsDirectory(); // Must be called after PushBrowser().
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ incognito->profile()->GetPrefs()->SetBoolean(prefs::kPromptForDownload,
+ false);
+ DownloadAndWait(incognito, url, EXPECT_NO_SELECT_DIALOG);
+ PopBrowser();
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I'd call this below, near CloseWindow(), just to k
ahendrickson 2010/12/16 19:26:41 Done.
+
+ // We should still have 2 windows.
+ window_count = BrowserList::size();
+ ASSERT_EQ(2, window_count);
+
+ // Verify that the download shelf is showing for the Incognito window.
+ bool is_shelf_visible = incognito->window()->IsDownloadShelfVisible();
+ EXPECT_TRUE(is_shelf_visible);
+
+ // Close the Incognito window and don't crash.
+ incognito->CloseWindow();
+ ui_test_utils::WaitForWindowClosed(incognito);
+ window_count = BrowserList::size();
+ ASSERT_EQ(1, window_count);
+
+ // Verify that the regular window does not have a download shelf.
+ is_shelf_visible = browser()->window()->IsDownloadShelfVisible();
+ EXPECT_FALSE(is_shelf_visible);
+
+ CheckDownload(file, file);
+}
+
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Not a requirement for this CL, but I invite you to
+// Navigate to a new background page, but don't download. Confirm that the
+// download shelf is not visible and that we have two tabs.
+//
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_DontCloseNewTab1) {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I can't seen any reason why this test should be fl
ahendrickson 2010/12/16 19:26:41 Done.
+ InitialSetup(false);
+ // Because it's an HTML link, it should open a tab rather than downloading.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 This comment reads weirdly in combination with the
ahendrickson 2010/12/16 19:26:41 Changed the comments, here and elsewhere.
+ FilePath file1(FILE_PATH_LITERAL("download-test2.html"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file1));
+
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ url,
+ NEW_BACKGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+
+ // We should have two tabs now.
+ ASSERT_EQ(2, browser()->tab_count());
+ EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
+}
+
+// Download a file in a background tab. Verify that the tab is closed
+// automatically, and that the download shelf is visible in the current tab.
+//
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 nit: "in in"
ahendrickson 2010/12/16 19:26:41 I don't understand.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_CloseNewTab1) {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Can't imagine why this wouldn't timeout via 62637.
+ InitialSetup(true);
+
+ // Download a file in a new background tab and wait. The tab is automatically
+ // closed when the download is done.
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ DownloadAndWaitWithDisposition(
+ browser(),
+ url,
+ NEW_BACKGROUND_TAB,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+
+ // When the download finishes, we should still have one tab.
+ ASSERT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ ASSERT_EQ(1, browser()->tab_count());
+
+ CheckDownload(file, file);
+}
+
+// Open a web page, then download a file in another tab via a Javascript call.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Elsewhere current tab, foreground tab, background
ahendrickson 2010/12/16 19:26:41 Added "current tab", but no temporary tab is creat
+// Verify that we have 2 tabs, and the download shelf is visible in the current
+// tab.
+//
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_DontCloseNewTab2) {
+ InitialSetup(true);
+ // Because it's an HTML link, it should open a tab rather than downloading.
+ FilePath file1(FILE_PATH_LITERAL("download_page1.html"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file1));
+
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ // Download a file in a new tab and wait (via Javascript).
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ DownloadAndWaitWithDisposition(browser(),
+ GURL("javascript:openNew()"),
+ CURRENT_TAB,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
+
+ // When the download finishes, we should have two tabs.
+ ASSERT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ ASSERT_EQ(2, browser()->tab_count());
+
+ CheckDownload(file, file);
+}
+
+// Open a web page in the current tab, open another tab via a Javascript call,
+// then download a file in the new tab.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 I'd suggest that in general, when the test relies
ahendrickson 2010/12/16 19:26:41 The |openNew()| function is embedded in the web pa
+// Verify that we have 2 tabs, and the download shelf is visible in the current
+// tab.
+//
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_DontCloseNewTab3) {
+ InitialSetup(true);
+ // Because it's an HTML link, it should open a tab rather than downloading.
+ FilePath file1(FILE_PATH_LITERAL("download_page2.html"));
+ GURL url1(URLRequestMockHTTPJob::GetMockUrl(file1));
+
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURL(browser(), url1);
+
+ // Open a new tab and wait.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(),
+ GURL("javascript:openNew()"),
+ CURRENT_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
+
+ ASSERT_EQ(2, browser()->tab_count());
+
+ // Download a file and wait.
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+ DownloadAndWaitWithDisposition(browser(),
+ url,
+ CURRENT_TAB,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_NONE);
+
+ // When the download finishes, we should have two tabs.
+ ASSERT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ ASSERT_EQ(2, browser()->tab_count());
+
+ CheckDownload(file, file);
+}
+
+// Open a web page in the current tab, then download a file via Javascript,
+// which will do so in a temporary tab.
+// Verify that we have 1 tab, and the download shelf is visible.
+//
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_CloseNewTab2) {
+ InitialSetup(true);
+ // Because it's an HTML link, it should open a tab rather than downloading.
+ FilePath file1(FILE_PATH_LITERAL("download_page3.html"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file1));
+
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ // Download a file and wait.
+ // The file to download is "download-test1.lib".
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ DownloadAndWaitWithDisposition(browser(),
+ GURL("javascript:openNew()"),
+ CURRENT_TAB,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
+
+ // When the download finishes, we should still have one tab.
+ ASSERT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ ASSERT_EQ(1, browser()->tab_count());
+
+ CheckDownload(file, file);
+}
+
+// Open a web page in the current tab, then call Javascript via a button to
+// download a file in a new tab. Close the new tab when the download is done.
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Is the new tab closed by the test? I don't see th
ahendrickson 2010/12/16 19:26:41 Done.
+// Verify that we have 1 tab, and the download shelf is visible.
+//
+// The test sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, FLAKY_CloseNewTab3) {
+ InitialSetup(true);
+ // Because it's an HTML link, it should open a tab rather than downloading.
+ FilePath file1(FILE_PATH_LITERAL("download_page4.html"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file1));
+
+ // Open a web page and wait.
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ // Download a file in a new tab and wait. The tab will automatically close
+ // when the download is done.
+ // The file to download is "download-test1.lib".
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ DownloadAndWaitWithDisposition(
+ browser(),
+ GURL("javascript:document.getElementById('form').submit()"),
+ CURRENT_TAB,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
+
+ // When the download finishes, we should still have one tab.
+ ASSERT_TRUE(browser()->window()->IsDownloadShelfVisible());
+ ASSERT_EQ(1, browser()->tab_count());
+
+ CheckDownload(file, file);
+}
+
+// Download a file in a new browser window, leaving it open.
+// Verify that we have 2 windows, and the download shelf is not visible in the
+// first window, but is visible in the second window.
+//
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DontCloseNewWindow) {
+ InitialSetup(true);
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+
+ // Download a file in a new window and wait.
+ DownloadAndWaitWithDisposition(
+ browser(),
+ url,
+ NEW_WINDOW,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_NONE);
+
+ // When the download finishes, the download shelf SHOULD NOT be visible in
+ // the first window.
+ int window_count = BrowserList::size();
+ ASSERT_EQ(2, window_count);
+ ASSERT_EQ(1, browser()->tab_count());
+ ASSERT_FALSE(browser()->window()->IsDownloadShelfVisible());
+
+ // The download shelf SHOULD be visible in the second window.
+ Browser* download_browser = ui_test_utils::GetBrowser(1);
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Does GetBrowser() give a guarantee that we get the
ahendrickson 2010/12/16 19:26:41 In this particular case, it's guaranteed. If you
+ ASSERT_NE(download_browser, browser());
+ ASSERT_EQ(1, download_browser->tab_count());
+ ASSERT_TRUE(download_browser->window()->IsDownloadShelfVisible());
+
+ CheckDownload(file, file);
+}
+
+// Download a file in a new window.
+// Verify that we have 2 windows, and the download shelf is not visible in the
+// first window, but is visible in the second window.
+// Close the new window.
+// Verify that we have 1 window, and the download shelf is not visible.
+//
+// Regression test for http://crbug.com/44454
+//
+// Test is believed mostly good (non-flaky) in itself, but it
+// sometimes trips over underlying flakiness in the downloads
+// subsystem in in http://crbug.com/63237. Until that bug is
+// fixed, this test should be considered flaky.
+// Additionally, there is Windows-specific flake, http://crbug.com/20809.
+IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_NewWindow) {
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 This test looks like a strict superset of DontClos
+ InitialSetup(true);
+ FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
+ GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
+
+ // Download a file in a new window and wait.
+ DownloadAndWaitWithDisposition(browser(),
+ url,
+ NEW_WINDOW,
+ EXPECT_NO_SELECT_DIALOG,
+ ui_test_utils::BROWSER_TEST_NONE);
Randy Smith (Not in Mondays) 2010/12/13 21:44:58 Micro-nit: Consistency is a win, so in the absence
ahendrickson 2010/12/16 19:26:41 I personally prefer this method of lining up varia
+
+ // When the download finishes, the download shelf SHOULD NOT be visible in
+ // the first window.
+ int window_count = BrowserList::size();
+ ASSERT_EQ(2, window_count);
+ ASSERT_EQ(1, browser()->tab_count());
+ ASSERT_FALSE(browser()->window()->IsDownloadShelfVisible());
+
+ // The download shelf SHOULD be visible in the second window.
+ Browser* download_browser = ui_test_utils::GetBrowser(1);
+ ASSERT_NE(download_browser, browser());
+ ASSERT_EQ(1, download_browser->tab_count());
+ ASSERT_TRUE(download_browser->window()->IsDownloadShelfVisible());
+
+ // Close the new window.
+ download_browser->CloseWindow();
+ ui_test_utils::WaitForWindowClosed(download_browser);
+ window_count = BrowserList::size();
+ ASSERT_EQ(1, window_count);
+ ASSERT_EQ(1, browser()->tab_count());
+ // The download shelf should not be visible in the remaining window.
+ ASSERT_FALSE(browser()->window()->IsDownloadShelfVisible());
+
+ CheckDownload(file, file);
}
} // namespace
« no previous file with comments | « no previous file | chrome/test/in_process_browser_test.h » ('j') | chrome/test/ui_test_utils.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698