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

Side by Side Diff: chrome/browser/download/download_browsertest.cc

Issue 9355050: Added read-only file error test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created DownloadId default constructor. Cleaned up per Chris' comments. Created 8 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
« base/test/test_file_util.h ('K') | « base/test/test_file_util_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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 }
OLDNEW
« base/test/test_file_util.h ('K') | « base/test/test_file_util_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698