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); |
} |