Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 297 DOWNLOAD_NAVIGATE, | 297 DOWNLOAD_NAVIGATE, |
| 298 DOWNLOAD_DIRECT | 298 DOWNLOAD_DIRECT |
| 299 }; | 299 }; |
| 300 | 300 |
| 301 // Information passed in to |DownloadFileCheckErrors()|. | 301 // Information passed in to |DownloadFileCheckErrors()|. |
| 302 struct DownloadInfo { | 302 struct DownloadInfo { |
| 303 const char* url_name; // URL for the download. | 303 const char* url_name; // URL for the download. |
| 304 DownloadMethod download_method; // Navigation or Direct. | 304 DownloadMethod download_method; // Navigation or Direct. |
| 305 InterruptReason reason; // Download interrupt reason (NONE is OK). | 305 InterruptReason reason; // Download interrupt reason (NONE is OK). |
| 306 bool show_download_item; // True if the download item appears on the shelf. | 306 bool show_download_item; // True if the download item appears on the shelf. |
| 307 bool should_redirect_to_documents; // True if we save it in "My Documents". | |
| 307 }; | 308 }; |
| 308 | 309 |
| 309 DownloadTest() { | 310 DownloadTest() { |
| 310 EnableDOMAutomation(); | 311 EnableDOMAutomation(); |
| 311 } | 312 } |
| 312 | 313 |
| 313 void SetUpOnMainThread() OVERRIDE { | 314 void SetUpOnMainThread() OVERRIDE { |
| 314 BrowserThread::PostTask( | 315 BrowserThread::PostTask( |
| 315 BrowserThread::IO, FROM_HERE, | 316 BrowserThread::IO, FROM_HERE, |
| 316 base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); | 317 base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 674 | 675 |
| 675 // Check the contents. | 676 // Check the contents. |
| 676 EXPECT_EQ(value, file_contents); | 677 EXPECT_EQ(value, file_contents); |
| 677 if (memcmp(file_contents.c_str(), value.c_str(), expected_size) != 0) | 678 if (memcmp(file_contents.c_str(), value.c_str(), expected_size) != 0) |
| 678 return false; | 679 return false; |
| 679 | 680 |
| 680 return true; | 681 return true; |
| 681 } | 682 } |
| 682 | 683 |
| 683 // Attempts to download a file, based on information in |download_info|. | 684 // Attempts to download a file, based on information in |download_info|. |
| 685 // If a Select File dialog opens, will automatically choose the default. | |
| 684 void DownloadFileCheckErrors(const DownloadInfo& download_info) { | 686 void DownloadFileCheckErrors(const DownloadInfo& download_info) { |
| 685 ASSERT_TRUE(test_server()->Start()); | 687 ASSERT_TRUE(test_server()->Start()); |
| 686 std::vector<DownloadItem*> download_items; | 688 std::vector<DownloadItem*> download_items; |
| 687 GetDownloads(browser(), &download_items); | 689 GetDownloads(browser(), &download_items); |
| 688 ASSERT_TRUE(download_items.empty()); | 690 ASSERT_TRUE(download_items.empty()); |
| 689 | 691 |
| 690 std::string server_path = "files/downloads/"; | 692 std::string server_path = "files/downloads/"; |
| 691 server_path += download_info.url_name; | 693 server_path += download_info.url_name; |
| 692 GURL url = test_server()->GetURL(server_path); | 694 GURL url = test_server()->GetURL(server_path); |
| 693 ASSERT_TRUE(url.is_valid()); | 695 ASSERT_TRUE(url.is_valid()); |
| 694 | 696 |
| 697 NullSelectFile(browser()); // Needed for read-only tests. | |
| 698 | |
| 695 DownloadManager* download_manager = DownloadManagerForBrowser(browser()); | 699 DownloadManager* download_manager = DownloadManagerForBrowser(browser()); |
| 696 scoped_ptr<DownloadTestObserver> observer( | 700 scoped_ptr<DownloadTestObserver> observer( |
| 697 new DownloadTestObserver( | 701 new DownloadTestObserver( |
| 698 download_manager, | 702 download_manager, |
| 699 1, | 703 1, |
| 700 download_info.reason == DOWNLOAD_INTERRUPT_REASON_NONE ? | 704 download_info.reason == DOWNLOAD_INTERRUPT_REASON_NONE ? |
| 701 DownloadItem::COMPLETE : // Really done | 705 DownloadItem::COMPLETE : // Really done |
| 702 DownloadItem::INTERRUPTED, | 706 DownloadItem::INTERRUPTED, |
| 703 true, // Bail on select file | 707 false, // Don't finish on select file |
| 704 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); | 708 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
| 705 | 709 |
| 706 if (download_info.download_method == DOWNLOAD_DIRECT) { | 710 if (download_info.download_method == DOWNLOAD_DIRECT) { |
| 707 // Go directly to download. | 711 // Go directly to download. |
| 708 WebContents* web_contents = browser()->GetSelectedWebContents(); | 712 WebContents* web_contents = browser()->GetSelectedWebContents(); |
| 709 ASSERT_TRUE(web_contents); | 713 ASSERT_TRUE(web_contents); |
| 710 DownloadSaveInfo save_info; | 714 DownloadSaveInfo save_info; |
| 711 save_info.prompt_for_save_location = false; | 715 save_info.prompt_for_save_location = false; |
| 712 | 716 |
| 713 DownloadManagerForBrowser(browser())->DownloadUrl( | 717 DownloadManagerForBrowser(browser())->DownloadUrl( |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 726 download_items.clear(); | 730 download_items.clear(); |
| 727 GetDownloads(browser(), &download_items); | 731 GetDownloads(browser(), &download_items); |
| 728 size_t item_count = download_info.show_download_item ? 1 : 0; | 732 size_t item_count = download_info.show_download_item ? 1 : 0; |
| 729 ASSERT_EQ(item_count, download_items.size()); | 733 ASSERT_EQ(item_count, download_items.size()); |
| 730 | 734 |
| 731 if (download_info.show_download_item) { | 735 if (download_info.show_download_item) { |
| 732 DownloadItem* item = download_items[0]; | 736 DownloadItem* item = download_items[0]; |
| 733 ASSERT_EQ(url, item->GetOriginalUrl()); | 737 ASSERT_EQ(url, item->GetOriginalUrl()); |
| 734 | 738 |
| 735 ASSERT_EQ(download_info.reason, item->GetLastReason()); | 739 ASSERT_EQ(download_info.reason, item->GetLastReason()); |
| 740 | |
| 741 if (item->GetLastReason() == DOWNLOAD_INTERRUPT_REASON_NONE) { | |
| 742 // Clean up the file, in case it ended up in the My Documents folder. | |
| 743 FilePath destination_folder = GetDownloadDirectory(browser()); | |
| 744 FilePath my_downloaded_file = item->GetTargetFilePath(); | |
| 745 EXPECT_TRUE(file_util::PathExists(my_downloaded_file)); | |
| 746 EXPECT_TRUE(file_util::Delete(my_downloaded_file, false)); | |
| 747 | |
| 748 EXPECT_EQ(download_info.should_redirect_to_documents ? | |
| 749 std::string::npos : | |
| 750 0u, | |
| 751 my_downloaded_file.value().find(destination_folder.value())); | |
| 752 if (download_info.should_redirect_to_documents) { | |
| 753 // If it's not where we asked it to be, it should be in the | |
| 754 // My Documents folder. | |
| 755 FilePath my_docs_folder; | |
| 756 EXPECT_TRUE(PathService::Get(chrome::DIR_USER_DOCUMENTS, | |
| 757 &my_docs_folder)); | |
| 758 EXPECT_TRUE(download_info.should_redirect_to_documents); | |
|
Randy Smith (Not in Mondays)
2012/03/01 20:37:14
This feels unnecessary since you're inside of an i
ahendrickson
2012/03/02 17:51:57
Oops, you're right. Missed that in the refactorin
| |
| 759 EXPECT_EQ(0u, | |
| 760 my_downloaded_file.value().find(my_docs_folder.value())); | |
| 761 } | |
| 762 } | |
| 736 } | 763 } |
| 737 } | 764 } |
| 738 | 765 |
| 766 // Attempts to download a file to a read-only folder, based on information | |
| 767 // in |download_info|. | |
| 768 void DownloadFileToReadonlyFolder(const DownloadInfo& download_info) { | |
| 769 ASSERT_TRUE(InitialSetup(false)); // Creates temporary download folder. | |
| 770 | |
| 771 // Make the test folder unwritable. | |
| 772 FilePath destination_folder = GetDownloadDirectory(browser()); | |
| 773 DVLOG(1) << " " << __FUNCTION__ << "()" | |
| 774 << " folder = '" << destination_folder.value() << "'"; | |
| 775 file_util::PermissionRestorer permission_restorer(destination_folder); | |
| 776 EXPECT_TRUE(file_util::MakeFileUnwritable(destination_folder)); | |
| 777 | |
| 778 DownloadFileCheckErrors(download_info); | |
| 779 } | |
| 780 | |
| 739 private: | 781 private: |
| 740 // Location of the test data. | 782 // Location of the test data. |
| 741 FilePath test_dir_; | 783 FilePath test_dir_; |
| 742 | 784 |
| 743 // Location of the downloads directory for these tests | 785 // Location of the downloads directory for these tests |
| 744 ScopedTempDir downloads_directory_; | 786 ScopedTempDir downloads_directory_; |
| 745 }; | 787 }; |
| 746 | 788 |
| 747 // NOTES: | 789 // NOTES: |
| 748 // | 790 // |
| (...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2002 ASSERT_EQ(2u, download_items.size()); | 2044 ASSERT_EQ(2u, download_items.size()); |
| 2003 ASSERT_EQ(jpeg_url, download_items[0]->GetOriginalUrl()); | 2045 ASSERT_EQ(jpeg_url, download_items[0]->GetOriginalUrl()); |
| 2004 ASSERT_EQ(jpeg_url, download_items[1]->GetOriginalUrl()); | 2046 ASSERT_EQ(jpeg_url, download_items[1]->GetOriginalUrl()); |
| 2005 } | 2047 } |
| 2006 | 2048 |
| 2007 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadNavigate) { | 2049 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadNavigate) { |
| 2008 DownloadInfo download_info = { | 2050 DownloadInfo download_info = { |
| 2009 "a_zip_file.zip", | 2051 "a_zip_file.zip", |
| 2010 DOWNLOAD_NAVIGATE, | 2052 DOWNLOAD_NAVIGATE, |
| 2011 DOWNLOAD_INTERRUPT_REASON_NONE, | 2053 DOWNLOAD_INTERRUPT_REASON_NONE, |
| 2012 true | 2054 true, |
| 2055 false | |
| 2013 }; | 2056 }; |
| 2014 | 2057 |
| 2015 // Do initial setup. | 2058 // Do initial setup. |
| 2016 ASSERT_TRUE(InitialSetup(false)); | 2059 ASSERT_TRUE(InitialSetup(false)); |
| 2017 DownloadFileCheckErrors(download_info); | 2060 DownloadFileCheckErrors(download_info); |
| 2018 } | 2061 } |
| 2019 | 2062 |
| 2020 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadDirect) { | 2063 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadDirect) { |
| 2021 DownloadInfo download_info = { | 2064 DownloadInfo download_info = { |
| 2022 "a_zip_file.zip", | 2065 "a_zip_file.zip", |
| 2023 DOWNLOAD_DIRECT, | 2066 DOWNLOAD_DIRECT, |
| 2024 DOWNLOAD_INTERRUPT_REASON_NONE, | 2067 DOWNLOAD_INTERRUPT_REASON_NONE, |
| 2025 true | 2068 true, |
| 2069 false | |
| 2026 }; | 2070 }; |
| 2027 | 2071 |
| 2028 // Do initial setup. | 2072 // Do initial setup. |
| 2029 ASSERT_TRUE(InitialSetup(false)); | 2073 ASSERT_TRUE(InitialSetup(false)); |
| 2030 DownloadFileCheckErrors(download_info); | 2074 DownloadFileCheckErrors(download_info); |
| 2031 } | 2075 } |
| 2032 | 2076 |
| 2033 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError404Direct) { | 2077 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError404Direct) { |
| 2034 DownloadInfo download_info = { | 2078 DownloadInfo download_info = { |
| 2035 "there_IS_no_spoon.zip", | 2079 "there_IS_no_spoon.zip", |
| 2036 DOWNLOAD_DIRECT, | 2080 DOWNLOAD_DIRECT, |
| 2037 DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, | 2081 DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, |
| 2038 true | 2082 true, |
| 2083 false | |
| 2039 }; | 2084 }; |
| 2040 | 2085 |
| 2041 // Do initial setup. | 2086 // Do initial setup. |
| 2042 ASSERT_TRUE(InitialSetup(false)); | 2087 ASSERT_TRUE(InitialSetup(false)); |
| 2043 DownloadFileCheckErrors(download_info); | 2088 DownloadFileCheckErrors(download_info); |
| 2044 } | 2089 } |
| 2045 | 2090 |
| 2046 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError404Navigate) { | 2091 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError404Navigate) { |
| 2047 DownloadInfo download_info = { | 2092 DownloadInfo download_info = { |
| 2048 "there_IS_no_spoon.zip", | 2093 "there_IS_no_spoon.zip", |
| 2049 DOWNLOAD_NAVIGATE, | 2094 DOWNLOAD_NAVIGATE, |
| 2050 DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, | 2095 DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, |
| 2096 false, | |
| 2051 false | 2097 false |
| 2052 }; | 2098 }; |
| 2053 | 2099 |
| 2054 // Do initial setup. | 2100 // Do initial setup. |
| 2055 ASSERT_TRUE(InitialSetup(false)); | 2101 ASSERT_TRUE(InitialSetup(false)); |
| 2056 DownloadFileCheckErrors(download_info); | 2102 DownloadFileCheckErrors(download_info); |
| 2057 } | 2103 } |
| 2058 | 2104 |
| 2059 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError400Direct) { | 2105 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError400Direct) { |
| 2060 DownloadInfo download_info = { | 2106 DownloadInfo download_info = { |
| 2061 "zip_file_not_found.zip", | 2107 "zip_file_not_found.zip", |
| 2062 DOWNLOAD_DIRECT, | 2108 DOWNLOAD_DIRECT, |
| 2063 DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, | 2109 DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, |
| 2064 true | 2110 true, |
| 2111 false | |
| 2065 }; | 2112 }; |
| 2066 | 2113 |
| 2067 // Do initial setup. | 2114 // Do initial setup. |
| 2068 ASSERT_TRUE(InitialSetup(false)); | 2115 ASSERT_TRUE(InitialSetup(false)); |
| 2069 DownloadFileCheckErrors(download_info); | 2116 DownloadFileCheckErrors(download_info); |
| 2070 } | 2117 } |
| 2071 | 2118 |
| 2072 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError400Navigate) { | 2119 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadError400Navigate) { |
| 2073 DownloadInfo download_info = { | 2120 DownloadInfo download_info = { |
| 2074 "zip_file_not_found.zip", | 2121 "zip_file_not_found.zip", |
| 2075 DOWNLOAD_NAVIGATE, | 2122 DOWNLOAD_NAVIGATE, |
| 2076 DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, | 2123 DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, |
| 2124 false, | |
| 2077 false | 2125 false |
| 2078 }; | 2126 }; |
| 2079 | 2127 |
| 2080 // Do initial setup. | 2128 // Do initial setup. |
| 2081 ASSERT_TRUE(InitialSetup(false)); | 2129 ASSERT_TRUE(InitialSetup(false)); |
| 2082 DownloadFileCheckErrors(download_info); | 2130 DownloadFileCheckErrors(download_info); |
| 2083 } | 2131 } |
| 2132 | |
| 2133 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorReadonlyFolderDirect) { | |
| 2134 DownloadInfo download_info = { | |
| 2135 "a_zip_file.zip", | |
| 2136 DOWNLOAD_DIRECT, | |
| 2137 // This passes because we switch to the My Documents folder. | |
| 2138 DOWNLOAD_INTERRUPT_REASON_NONE, | |
| 2139 true, | |
| 2140 true | |
| 2141 }; | |
| 2142 | |
| 2143 DownloadFileToReadonlyFolder(download_info); | |
| 2144 } | |
| 2145 | |
| 2146 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadErrorReadonlyFolderNavigate) { | |
| 2147 DownloadInfo download_info = { | |
| 2148 "a_zip_file.zip", | |
| 2149 DOWNLOAD_NAVIGATE, | |
| 2150 // This passes because we switch to the My Documents folder. | |
| 2151 DOWNLOAD_INTERRUPT_REASON_NONE, | |
| 2152 true, | |
| 2153 true | |
| 2154 }; | |
| 2155 | |
| 2156 DownloadFileToReadonlyFolder(download_info); | |
| 2157 } | |
| OLD | NEW |