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 <sstream> | 5 #include <sstream> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 ASSERT_TRUE(InitialSetup()); | 447 ASSERT_TRUE(InitialSetup()); |
448 } | 448 } |
449 | 449 |
450 void TearDownOnMainThread() override { | 450 void TearDownOnMainThread() override { |
451 // Needs to be torn down on the main thread. file_activity_observer_ holds a | 451 // Needs to be torn down on the main thread. file_activity_observer_ holds a |
452 // reference to the ChromeDownloadManagerDelegate which should be destroyed | 452 // reference to the ChromeDownloadManagerDelegate which should be destroyed |
453 // on the UI thread. | 453 // on the UI thread. |
454 file_activity_observer_.reset(); | 454 file_activity_observer_.reset(); |
455 } | 455 } |
456 | 456 |
457 void SetUpCommandLine(CommandLine* command_line) override { | 457 void SetUpCommandLine(base::CommandLine* command_line) override { |
458 command_line->AppendSwitch(switches::kDisablePluginsDiscovery); | 458 command_line->AppendSwitch(switches::kDisablePluginsDiscovery); |
459 } | 459 } |
460 | 460 |
461 // Returning false indicates a failure of the setup, and should be asserted | 461 // Returning false indicates a failure of the setup, and should be asserted |
462 // in the caller. | 462 // in the caller. |
463 virtual bool InitialSetup() { | 463 virtual bool InitialSetup() { |
464 bool have_test_dir = PathService::Get(chrome::DIR_TEST_DATA, &test_dir_); | 464 bool have_test_dir = PathService::Get(chrome::DIR_TEST_DATA, &test_dir_); |
465 EXPECT_TRUE(have_test_dir); | 465 EXPECT_TRUE(have_test_dir); |
466 if (!have_test_dir) | 466 if (!have_test_dir) |
467 return false; | 467 return false; |
(...skipping 1349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1817 EXPECT_EQ(content::DownloadItem::INTERRUPTED, row1.state); | 1817 EXPECT_EQ(content::DownloadItem::INTERRUPTED, row1.state); |
1818 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, | 1818 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, |
1819 row1.interrupt_reason); | 1819 row1.interrupt_reason); |
1820 EXPECT_FALSE(row1.opened); | 1820 EXPECT_FALSE(row1.opened); |
1821 } | 1821 } |
1822 | 1822 |
1823 // Make sure a dangerous file shows up properly in the history. | 1823 // Make sure a dangerous file shows up properly in the history. |
1824 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryDangerCheck) { | 1824 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryDangerCheck) { |
1825 #if defined(OS_WIN) && defined(USE_ASH) | 1825 #if defined(OS_WIN) && defined(USE_ASH) |
1826 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 1826 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
1827 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 1827 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 1828 switches::kAshBrowserTests)) |
1828 return; | 1829 return; |
1829 #endif | 1830 #endif |
1830 | 1831 |
1831 // .swf file so that it's dangerous on all platforms (including CrOS). | 1832 // .swf file so that it's dangerous on all platforms (including CrOS). |
1832 base::FilePath file(FILE_PATH_LITERAL("downloads/dangerous/dangerous.swf")); | 1833 base::FilePath file(FILE_PATH_LITERAL("downloads/dangerous/dangerous.swf")); |
1833 GURL download_url(URLRequestMockHTTPJob::GetMockUrl(file)); | 1834 GURL download_url(URLRequestMockHTTPJob::GetMockUrl(file)); |
1834 | 1835 |
1835 // Download the url and wait until the object has been stored. | 1836 // Download the url and wait until the object has been stored. |
1836 scoped_ptr<content::DownloadTestObserver> download_observer( | 1837 scoped_ptr<content::DownloadTestObserver> download_observer( |
1837 new content::DownloadTestObserverTerminal( | 1838 new content::DownloadTestObserverTerminal( |
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2871 observer->WaitForFinished(); | 2872 observer->WaitForFinished(); |
2872 | 2873 |
2873 // Verify that download shelf is not shown. | 2874 // Verify that download shelf is not shown. |
2874 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); | 2875 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); |
2875 } | 2876 } |
2876 | 2877 |
2877 // Verify the multiple downloads infobar. | 2878 // Verify the multiple downloads infobar. |
2878 IN_PROC_BROWSER_TEST_F(DownloadTest, TestMultipleDownloadsInfobar) { | 2879 IN_PROC_BROWSER_TEST_F(DownloadTest, TestMultipleDownloadsInfobar) { |
2879 #if defined(OS_WIN) && defined(USE_ASH) | 2880 #if defined(OS_WIN) && defined(USE_ASH) |
2880 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 2881 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
2881 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 2882 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 2883 switches::kAshBrowserTests)) |
2882 return; | 2884 return; |
2883 #endif | 2885 #endif |
2884 | 2886 |
2885 ASSERT_TRUE(test_server()->Start()); | 2887 ASSERT_TRUE(test_server()->Start()); |
2886 | 2888 |
2887 // Create a downloads observer. | 2889 // Create a downloads observer. |
2888 scoped_ptr<content::DownloadTestObserver> downloads_observer( | 2890 scoped_ptr<content::DownloadTestObserver> downloads_observer( |
2889 CreateWaiter(browser(), 2)); | 2891 CreateWaiter(browser(), 2)); |
2890 | 2892 |
2891 // Create an infobar observer. | 2893 // Create an infobar observer. |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3162 EXPECT_EQ(dir.AppendASCII("off").value(), off_prefs->SaveFilePath().value()); | 3164 EXPECT_EQ(dir.AppendASCII("off").value(), off_prefs->SaveFilePath().value()); |
3163 | 3165 |
3164 on_prefs->SetSaveFilePath(dir.AppendASCII("on")); | 3166 on_prefs->SetSaveFilePath(dir.AppendASCII("on")); |
3165 EXPECT_EQ(dir.AppendASCII("on").value(), on_prefs->SaveFilePath().value()); | 3167 EXPECT_EQ(dir.AppendASCII("on").value(), on_prefs->SaveFilePath().value()); |
3166 EXPECT_EQ(dir.AppendASCII("off").value(), off_prefs->SaveFilePath().value()); | 3168 EXPECT_EQ(dir.AppendASCII("off").value(), off_prefs->SaveFilePath().value()); |
3167 } | 3169 } |
3168 | 3170 |
3169 // A download that is interrupted due to a file error should be able to be | 3171 // A download that is interrupted due to a file error should be able to be |
3170 // resumed. | 3172 // resumed. |
3171 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_NoPrompt) { | 3173 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_NoPrompt) { |
3172 CommandLine::ForCurrentProcess()->AppendSwitch( | 3174 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
3173 switches::kEnableDownloadResumption); | 3175 switches::kEnableDownloadResumption); |
3174 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3176 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3175 content::TestFileErrorInjector::Create( | 3177 content::TestFileErrorInjector::Create( |
3176 DownloadManagerForBrowser(browser()))); | 3178 DownloadManagerForBrowser(browser()))); |
3177 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3179 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3178 CreateWaiter(browser(), 1)); | 3180 CreateWaiter(browser(), 1)); |
3179 EnableFileChooser(true); | 3181 EnableFileChooser(true); |
3180 | 3182 |
3181 DownloadItem* download = StartMockDownloadAndInjectError( | 3183 DownloadItem* download = StartMockDownloadAndInjectError( |
3182 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 3184 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
3183 ASSERT_TRUE(download); | 3185 ASSERT_TRUE(download); |
3184 | 3186 |
3185 download->Resume(); | 3187 download->Resume(); |
3186 completion_observer->WaitForFinished(); | 3188 completion_observer->WaitForFinished(); |
3187 | 3189 |
3188 EXPECT_EQ( | 3190 EXPECT_EQ( |
3189 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3191 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3190 EXPECT_FALSE(DidShowFileChooser()); | 3192 EXPECT_FALSE(DidShowFileChooser()); |
3191 } | 3193 } |
3192 | 3194 |
3193 // A download that's interrupted due to a reason that indicates that the target | 3195 // A download that's interrupted due to a reason that indicates that the target |
3194 // path is invalid or unusable should cause a prompt to be displayed on | 3196 // path is invalid or unusable should cause a prompt to be displayed on |
3195 // resumption. | 3197 // resumption. |
3196 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPrompt) { | 3198 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPrompt) { |
3197 CommandLine::ForCurrentProcess()->AppendSwitch( | 3199 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
3198 switches::kEnableDownloadResumption); | 3200 switches::kEnableDownloadResumption); |
3199 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3201 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3200 content::TestFileErrorInjector::Create( | 3202 content::TestFileErrorInjector::Create( |
3201 DownloadManagerForBrowser(browser()))); | 3203 DownloadManagerForBrowser(browser()))); |
3202 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3204 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3203 CreateWaiter(browser(), 1)); | 3205 CreateWaiter(browser(), 1)); |
3204 EnableFileChooser(true); | 3206 EnableFileChooser(true); |
3205 | 3207 |
3206 DownloadItem* download = StartMockDownloadAndInjectError( | 3208 DownloadItem* download = StartMockDownloadAndInjectError( |
3207 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE); | 3209 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE); |
3208 ASSERT_TRUE(download); | 3210 ASSERT_TRUE(download); |
3209 | 3211 |
3210 download->Resume(); | 3212 download->Resume(); |
3211 completion_observer->WaitForFinished(); | 3213 completion_observer->WaitForFinished(); |
3212 | 3214 |
3213 EXPECT_EQ( | 3215 EXPECT_EQ( |
3214 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3216 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3215 EXPECT_TRUE(DidShowFileChooser()); | 3217 EXPECT_TRUE(DidShowFileChooser()); |
3216 } | 3218 } |
3217 | 3219 |
3218 // The user shouldn't be prompted on a resumed download unless a prompt is | 3220 // The user shouldn't be prompted on a resumed download unless a prompt is |
3219 // necessary due to the interrupt reason. | 3221 // necessary due to the interrupt reason. |
3220 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPromptAlways) { | 3222 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPromptAlways) { |
3221 CommandLine::ForCurrentProcess()->AppendSwitch( | 3223 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
3222 switches::kEnableDownloadResumption); | 3224 switches::kEnableDownloadResumption); |
3223 browser()->profile()->GetPrefs()->SetBoolean( | 3225 browser()->profile()->GetPrefs()->SetBoolean( |
3224 prefs::kPromptForDownload, true); | 3226 prefs::kPromptForDownload, true); |
3225 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3227 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3226 content::TestFileErrorInjector::Create( | 3228 content::TestFileErrorInjector::Create( |
3227 DownloadManagerForBrowser(browser()))); | 3229 DownloadManagerForBrowser(browser()))); |
3228 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3230 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3229 CreateWaiter(browser(), 1)); | 3231 CreateWaiter(browser(), 1)); |
3230 EnableFileChooser(true); | 3232 EnableFileChooser(true); |
3231 | 3233 |
3232 DownloadItem* download = StartMockDownloadAndInjectError( | 3234 DownloadItem* download = StartMockDownloadAndInjectError( |
3233 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 3235 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
3234 ASSERT_TRUE(download); | 3236 ASSERT_TRUE(download); |
3235 | 3237 |
3236 // Prompts the user initially because of the kPromptForDownload preference. | 3238 // Prompts the user initially because of the kPromptForDownload preference. |
3237 EXPECT_TRUE(DidShowFileChooser()); | 3239 EXPECT_TRUE(DidShowFileChooser()); |
3238 | 3240 |
3239 download->Resume(); | 3241 download->Resume(); |
3240 completion_observer->WaitForFinished(); | 3242 completion_observer->WaitForFinished(); |
3241 | 3243 |
3242 EXPECT_EQ( | 3244 EXPECT_EQ( |
3243 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3245 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3244 // Shouldn't prompt for resumption. | 3246 // Shouldn't prompt for resumption. |
3245 EXPECT_FALSE(DidShowFileChooser()); | 3247 EXPECT_FALSE(DidShowFileChooser()); |
3246 } | 3248 } |
3247 | 3249 |
3248 // A download that is interrupted due to a transient error should be resumed | 3250 // A download that is interrupted due to a transient error should be resumed |
3249 // automatically. | 3251 // automatically. |
3250 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_Automatic) { | 3252 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_Automatic) { |
3251 CommandLine::ForCurrentProcess()->AppendSwitch( | 3253 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
3252 switches::kEnableDownloadResumption); | 3254 switches::kEnableDownloadResumption); |
3253 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3255 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3254 content::TestFileErrorInjector::Create( | 3256 content::TestFileErrorInjector::Create( |
3255 DownloadManagerForBrowser(browser()))); | 3257 DownloadManagerForBrowser(browser()))); |
3256 | 3258 |
3257 DownloadItem* download = StartMockDownloadAndInjectError( | 3259 DownloadItem* download = StartMockDownloadAndInjectError( |
3258 error_injector.get(), | 3260 error_injector.get(), |
3259 content::DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); | 3261 content::DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); |
3260 ASSERT_TRUE(download); | 3262 ASSERT_TRUE(download); |
3261 | 3263 |
3262 // The number of times this the download is resumed automatically is defined | 3264 // The number of times this the download is resumed automatically is defined |
3263 // in DownloadItemImpl::kMaxAutoResumeAttempts. The number of DownloadFiles | 3265 // in DownloadItemImpl::kMaxAutoResumeAttempts. The number of DownloadFiles |
3264 // created should be that number + 1 (for the original download request). We | 3266 // created should be that number + 1 (for the original download request). We |
3265 // only care that it is greater than 1. | 3267 // only care that it is greater than 1. |
3266 EXPECT_GT(1u, error_injector->TotalFileCount()); | 3268 EXPECT_GT(1u, error_injector->TotalFileCount()); |
3267 } | 3269 } |
3268 | 3270 |
3269 // An interrupting download should be resumable multiple times. | 3271 // An interrupting download should be resumable multiple times. |
3270 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_MultipleAttempts) { | 3272 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_MultipleAttempts) { |
3271 CommandLine::ForCurrentProcess()->AppendSwitch( | 3273 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
3272 switches::kEnableDownloadResumption); | 3274 switches::kEnableDownloadResumption); |
3273 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3275 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3274 content::TestFileErrorInjector::Create( | 3276 content::TestFileErrorInjector::Create( |
3275 DownloadManagerForBrowser(browser()))); | 3277 DownloadManagerForBrowser(browser()))); |
3276 scoped_ptr<DownloadTestObserverNotInProgress> completion_observer( | 3278 scoped_ptr<DownloadTestObserverNotInProgress> completion_observer( |
3277 new DownloadTestObserverNotInProgress( | 3279 new DownloadTestObserverNotInProgress( |
3278 DownloadManagerForBrowser(browser()), 1)); | 3280 DownloadManagerForBrowser(browser()), 1)); |
3279 // Wait for two transitions to a resumable state | 3281 // Wait for two transitions to a resumable state |
3280 scoped_ptr<content::DownloadTestObserver> resumable_observer( | 3282 scoped_ptr<content::DownloadTestObserver> resumable_observer( |
3281 new DownloadTestObserverResumable( | 3283 new DownloadTestObserverResumable( |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3511 *(downloads[0]))); | 3513 *(downloads[0]))); |
3512 | 3514 |
3513 // Begin feedback and check that the file is "stolen". | 3515 // Begin feedback and check that the file is "stolen". |
3514 download_protection_service->feedback_service()->BeginFeedbackForDownload( | 3516 download_protection_service->feedback_service()->BeginFeedbackForDownload( |
3515 downloads[0]); | 3517 downloads[0]); |
3516 std::vector<DownloadItem*> updated_downloads; | 3518 std::vector<DownloadItem*> updated_downloads; |
3517 GetDownloads(browser(), &updated_downloads); | 3519 GetDownloads(browser(), &updated_downloads); |
3518 ASSERT_TRUE(updated_downloads.empty()); | 3520 ASSERT_TRUE(updated_downloads.empty()); |
3519 } | 3521 } |
3520 #endif | 3522 #endif |
OLD | NEW |