| Index: chrome/browser/download/download_browsertest.cc
|
| diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
|
| index 5fdcbf45f3b4b525b84edc2b7f537113804705d6..d87183737057836f6dbed74be5c5bc7a8dd0e507 100644
|
| --- a/chrome/browser/download/download_browsertest.cc
|
| +++ b/chrome/browser/download/download_browsertest.cc
|
| @@ -398,8 +398,12 @@ class DownloadTest : public InProcessBrowserTest {
|
|
|
| // Information passed in to |DownloadFileCheckErrors()|.
|
| struct DownloadInfo {
|
| - const char* url_name; // URL for the download.
|
| - DownloadMethod download_method; // Navigation or Direct.
|
| + const char* starting_url; // URL for initiating the download.
|
| + const char* expected_download_url; // Expected value of DI::GetURL(). Can
|
| + // be different if |starting_url|
|
| + // initiates a download from another
|
| + // URL.
|
| + DownloadMethod download_method; // Navigation or Direct.
|
| // Download interrupt reason (NONE is OK).
|
| content::DownloadInterruptReason reason;
|
| bool show_download_item; // True if the download item appears on the shelf.
|
| @@ -832,24 +836,33 @@ class DownloadTest : public InProcessBrowserTest {
|
|
|
| void DownloadFilesCheckErrorsLoopBody(const DownloadInfo& download_info,
|
| size_t i) {
|
| - SCOPED_TRACE(
|
| - ::testing::Message()
|
| - << " " << __FUNCTION__ << "()"
|
| - << " index = " << i << " url = '" << download_info.url_name << "'"
|
| - << " method = " << ((download_info.download_method == DOWNLOAD_DIRECT)
|
| - ? "DOWNLOAD_DIRECT"
|
| - : "DOWNLOAD_NAVIGATE")
|
| - << " show_item = " << download_info.show_download_item << " reason = "
|
| - << DownloadInterruptReasonToString(download_info.reason));
|
| + SCOPED_TRACE(testing::Message()
|
| + << " " << __FUNCTION__ << "()"
|
| + << " index = " << i << " starting_url = '"
|
| + << download_info.starting_url << "'"
|
| + << " download_url = '" << download_info.expected_download_url
|
| + << "'"
|
| + << " method = "
|
| + << ((download_info.download_method == DOWNLOAD_DIRECT)
|
| + ? "DOWNLOAD_DIRECT"
|
| + : "DOWNLOAD_NAVIGATE")
|
| + << " show_item = " << download_info.show_download_item
|
| + << " reason = "
|
| + << DownloadInterruptReasonToString(download_info.reason));
|
|
|
| std::vector<DownloadItem*> download_items;
|
| GetDownloads(browser(), &download_items);
|
| size_t downloads_expected = download_items.size();
|
|
|
| - std::string server_path = "/downloads/";
|
| - server_path += download_info.url_name;
|
| - GURL url = embedded_test_server()->GetURL(server_path);
|
| - ASSERT_TRUE(url.is_valid());
|
| + // GURL("http://foo/bar").Resolve("baz") => "http://foo/bar/baz"
|
| + // GURL("http://foo/bar").Resolve("http://baz") => "http://baz"
|
| + // I.e. both starting_url and expected_download_url can either be relative
|
| + // to the base test server URL or be an absolute URL.
|
| + GURL base_url = embedded_test_server()->GetURL("/downloads/");
|
| + GURL starting_url = base_url.Resolve(download_info.starting_url);
|
| + GURL download_url = base_url.Resolve(download_info.expected_download_url);
|
| + ASSERT_TRUE(starting_url.is_valid());
|
| + ASSERT_TRUE(download_url.is_valid());
|
|
|
| DownloadManager* download_manager = DownloadManagerForBrowser(browser());
|
| WebContents* web_contents =
|
| @@ -873,7 +886,7 @@ class DownloadTest : public InProcessBrowserTest {
|
| creation_observer(new content::DownloadTestItemCreationObserver);
|
|
|
| scoped_ptr<DownloadUrlParameters> params(
|
| - DownloadUrlParameters::FromWebContents(web_contents, url));
|
| + DownloadUrlParameters::FromWebContents(web_contents, starting_url));
|
| params->set_callback(creation_observer->callback());
|
| DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
|
|
|
| @@ -881,22 +894,12 @@ class DownloadTest : public InProcessBrowserTest {
|
| // won't be.
|
| creation_observer->WaitForDownloadItemCreation();
|
|
|
| - ASSERT_EQ(download_info.show_download_item,
|
| - creation_observer->succeeded());
|
| - if (download_info.show_download_item) {
|
| - EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - creation_observer->interrupt_reason());
|
| - EXPECT_NE(content::DownloadItem::kInvalidId,
|
| - creation_observer->download_id());
|
| - } else {
|
| - EXPECT_NE(content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - creation_observer->interrupt_reason());
|
| - EXPECT_EQ(content::DownloadItem::kInvalidId,
|
| - creation_observer->download_id());
|
| - }
|
| + EXPECT_NE(content::DownloadItem::kInvalidId,
|
| + creation_observer->download_id());
|
| } else {
|
| // Navigate to URL normally, wait until done.
|
| - ui_test_utils::NavigateToURL(browser(), url);
|
| + ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
|
| + browser(), starting_url, 1);
|
| }
|
|
|
| if (download_info.show_download_item) {
|
| @@ -926,8 +929,8 @@ class DownloadTest : public InProcessBrowserTest {
|
| item = download_items[d];
|
| }
|
|
|
| - ASSERT_EQ(url, item->GetOriginalUrl());
|
| - ASSERT_EQ(download_info.reason, item->GetLastReason());
|
| + EXPECT_EQ(download_url, item->GetURL());
|
| + EXPECT_EQ(download_info.reason, item->GetLastReason());
|
|
|
| if (item->GetState() == content::DownloadItem::COMPLETE) {
|
| // Clean up the file, in case it ended up in the My Documents folder.
|
| @@ -1006,7 +1009,7 @@ class DownloadTest : public InProcessBrowserTest {
|
| for (size_t i = 0; i < count; ++i) {
|
| // Set up the full URL, for download file tracking.
|
| std::string server_path = "/downloads/";
|
| - server_path += info[i].download_info.url_name;
|
| + server_path += info[i].download_info.starting_url;
|
| GURL url = embedded_test_server()->GetURL(server_path);
|
| info[i].error_info.url = url.spec();
|
|
|
| @@ -1258,12 +1261,12 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadResourceThrottleCancels) {
|
| // Try to start the download via Javascript and wait for the corresponding
|
| // load stop event.
|
| content::TestNavigationObserver observer(web_contents);
|
| - bool download_assempted;
|
| + bool download_attempted;
|
| ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
|
| browser()->tab_strip_model()->GetActiveWebContents(),
|
| "window.domAutomationController.send(startDownload());",
|
| - &download_assempted));
|
| - ASSERT_TRUE(download_assempted);
|
| + &download_attempted));
|
| + ASSERT_TRUE(download_attempted);
|
| observer.Wait();
|
|
|
| // Check that we did not download the file.
|
| @@ -2291,249 +2294,156 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaPost) {
|
|
|
| IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorsServer) {
|
| DownloadInfo download_info[] = {
|
| - { // Normal navigated download.
|
| - "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - true,
|
| - false
|
| - },
|
| - { // Normal direct download.
|
| - "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - true,
|
| - false
|
| - },
|
| - { // Direct download with 404 error.
|
| - "there_IS_no_spoon.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
|
| - true,
|
| - false
|
| - },
|
| - { // Navigated download with 404 error.
|
| - "there_IS_no_spoon.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
|
| - false,
|
| - false
|
| - },
|
| - { // Direct download with 400 error.
|
| - "zip_file_not_found.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED,
|
| - true,
|
| - false
|
| - },
|
| - { // Navigated download with 400 error.
|
| - "zip_file_not_found.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED,
|
| - false,
|
| - false
|
| - }
|
| - };
|
| + {// Normal navigated download.
|
| + "a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false},
|
| + {// Normal direct download.
|
| + "a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_NONE, true, false},
|
| + {// Direct download with 404 error.
|
| + "there_IS_no_spoon.zip", "there_IS_no_spoon.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, true, false},
|
| + {// Navigated download with 404 error.
|
| + "there_IS_no_spoon.zip", "there_IS_no_spoon.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, false, false},
|
| + {// Direct download with 400 error.
|
| + "zip_file_not_found.zip", "zip_file_not_found.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, true, false},
|
| + {// Navigated download with 400 error.
|
| + "zip_file_not_found.zip", "", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, false, false},
|
| + {// Simulates clicking on <a href="http://..." download="">. The name does
|
| + // not resolve. But since this is an explicit download, the download
|
| + // should appear on the shelf and the error should be indicated.
|
| + "download-anchor-attrib-name-not-resolved.html",
|
| + "http://doesnotexist/shouldnotberesolved", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false},
|
| + {// Simulates clicking on <a href="http://..." download=""> where the URL
|
| + // leads to a 404 response. This is different from the previous test case
|
| + // in that the ResourceLoader issues a OnResponseStarted() callback since
|
| + // the headers are successfully received.
|
| + "download-anchor-attrib-404.html", "there_IS_no_spoon.zip",
|
| + DOWNLOAD_NAVIGATE, content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
|
| + true, false},
|
| + {// Similar to the above, but the resulting response contains a status
|
| + // code of 400.
|
| + "download-anchor-attrib-400.html", "zip_file_not_found.zip",
|
| + DOWNLOAD_NAVIGATE, content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED,
|
| + true, false},
|
| + {// Direct download of a URL where the hostname doesn't resolve.
|
| + "http://doesnotexist/shouldnotdownloadsuccessfully",
|
| + "http://doesnotexist/shouldnotdownloadsuccessfully", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, true, false}};
|
|
|
| DownloadFilesCheckErrors(arraysize(download_info), download_info);
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorsFile) {
|
| FileErrorInjectInfo error_info[] = {
|
| - { // Navigated download with injected "Disk full" error in Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - }
|
| - },
|
| - { // Direct download with injected "Disk full" error in Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - }
|
| - },
|
| - { // Navigated download with injected "Disk full" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - }
|
| - },
|
| - { // Direct download with injected "Disk full" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - }
|
| - },
|
| - { // Navigated download with injected "Failed" error in Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Direct download with injected "Failed" error in Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Navigated download with injected "Failed" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Direct download with injected "Failed" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Navigated download with injected "Name too long" error in
|
| + {// Navigated download with injected "Disk full" error in Initialize().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| + }},
|
| + {// Direct download with injected "Disk full" error in Initialize().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| + }},
|
| + {// Navigated download with injected "Disk full" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| + }},
|
| + {// Direct download with injected "Disk full" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| + }},
|
| + {// Navigated download with injected "Failed" error in Initialize().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Direct download with injected "Failed" error in Initialize().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Navigated download with injected "Failed" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Direct download with injected "Failed" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Navigated download with injected "Name too long" error in
|
| // Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| - }
|
| - },
|
| - { // Direct download with injected "Name too long" error in Initialize().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| - }
|
| - },
|
| - { // Navigated download with injected "Name too long" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Direct download with injected "Name too long" error in Write().
|
| - { "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 0,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| - }
|
| - },
|
| - { // Direct download with injected "Disk full" error in 2nd Write().
|
| - { "06bESSE21Evolution.ppt",
|
| - DOWNLOAD_DIRECT,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - 1
|
| - },
|
| - {
|
| - "",
|
| - content::TestFileErrorInjector::FILE_OPERATION_WRITE,
|
| - 1,
|
| - content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| - }
|
| - }
|
| - };
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| + }},
|
| + {// Direct download with injected "Name too long" error in Initialize().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NAME_TOO_LONG,
|
| + }},
|
| + {// Navigated download with injected "Name too long" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Direct download with injected "Name too long" error in Write().
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 0,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
|
| + }},
|
| + {// Direct download with injected "Disk full" error in 2nd Write().
|
| + {"06bESSE21Evolution.ppt", "06bESSE21Evolution.ppt", DOWNLOAD_DIRECT,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE, true, false},
|
| + {
|
| + "", content::TestFileErrorInjector::FILE_OPERATION_WRITE, 1,
|
| + content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE,
|
| + }}};
|
|
|
| DownloadInsertFilesErrorCheckErrors(arraysize(error_info), error_info);
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorReadonlyFolder) {
|
| DownloadInfo download_info[] = {
|
| - {
|
| - "a_zip_file.zip",
|
| - DOWNLOAD_DIRECT,
|
| - // This passes because we switch to the My Documents folder.
|
| - content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - true,
|
| - true
|
| - },
|
| - {
|
| - "a_zip_file.zip",
|
| - DOWNLOAD_NAVIGATE,
|
| - // This passes because we switch to the My Documents folder.
|
| - content::DOWNLOAD_INTERRUPT_REASON_NONE,
|
| - true,
|
| - true
|
| - }
|
| - };
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_DIRECT,
|
| + // This passes because we switch to the My Documents folder.
|
| + content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true},
|
| + {"a_zip_file.zip", "a_zip_file.zip", DOWNLOAD_NAVIGATE,
|
| + // This passes because we switch to the My Documents folder.
|
| + content::DOWNLOAD_INTERRUPT_REASON_NONE, true, true}};
|
|
|
| DownloadFilesToReadonlyFolder(arraysize(download_info), download_info);
|
| }
|
|
|