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 3174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3185 CommandLine::ForCurrentProcess()->AppendSwitch( | 3185 CommandLine::ForCurrentProcess()->AppendSwitch( |
3186 switches::kEnableDownloadResumption); | 3186 switches::kEnableDownloadResumption); |
3187 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3187 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3188 content::TestFileErrorInjector::Create( | 3188 content::TestFileErrorInjector::Create( |
3189 DownloadManagerForBrowser(browser()))); | 3189 DownloadManagerForBrowser(browser()))); |
3190 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3190 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3191 CreateWaiter(browser(), 1)); | 3191 CreateWaiter(browser(), 1)); |
3192 EnableFileChooser(true); | 3192 EnableFileChooser(true); |
3193 | 3193 |
3194 DownloadItem* download = StartMockDownloadAndInjectError( | 3194 DownloadItem* download = StartMockDownloadAndInjectError( |
3195 error_injector, | 3195 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
3196 content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | |
3197 ASSERT_TRUE(download); | 3196 ASSERT_TRUE(download); |
3198 | 3197 |
3199 download->Resume(); | 3198 download->Resume(); |
3200 completion_observer->WaitForFinished(); | 3199 completion_observer->WaitForFinished(); |
3201 | 3200 |
3202 EXPECT_EQ( | 3201 EXPECT_EQ( |
3203 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3202 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3204 EXPECT_FALSE(DidShowFileChooser()); | 3203 EXPECT_FALSE(DidShowFileChooser()); |
3205 } | 3204 } |
3206 | 3205 |
3207 // A download that's interrupted due to a reason that indicates that the target | 3206 // A download that's interrupted due to a reason that indicates that the target |
3208 // path is invalid or unusable should cause a prompt to be displayed on | 3207 // path is invalid or unusable should cause a prompt to be displayed on |
3209 // resumption. | 3208 // resumption. |
3210 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPrompt) { | 3209 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPrompt) { |
3211 CommandLine::ForCurrentProcess()->AppendSwitch( | 3210 CommandLine::ForCurrentProcess()->AppendSwitch( |
3212 switches::kEnableDownloadResumption); | 3211 switches::kEnableDownloadResumption); |
3213 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3212 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3214 content::TestFileErrorInjector::Create( | 3213 content::TestFileErrorInjector::Create( |
3215 DownloadManagerForBrowser(browser()))); | 3214 DownloadManagerForBrowser(browser()))); |
3216 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3215 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3217 CreateWaiter(browser(), 1)); | 3216 CreateWaiter(browser(), 1)); |
3218 EnableFileChooser(true); | 3217 EnableFileChooser(true); |
3219 | 3218 |
3220 DownloadItem* download = StartMockDownloadAndInjectError( | 3219 DownloadItem* download = StartMockDownloadAndInjectError( |
3221 error_injector, | 3220 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE); |
3222 content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE); | |
3223 ASSERT_TRUE(download); | 3221 ASSERT_TRUE(download); |
3224 | 3222 |
3225 download->Resume(); | 3223 download->Resume(); |
3226 completion_observer->WaitForFinished(); | 3224 completion_observer->WaitForFinished(); |
3227 | 3225 |
3228 EXPECT_EQ( | 3226 EXPECT_EQ( |
3229 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3227 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3230 EXPECT_TRUE(DidShowFileChooser()); | 3228 EXPECT_TRUE(DidShowFileChooser()); |
3231 } | 3229 } |
3232 | 3230 |
3233 // The user shouldn't be prompted on a resumed download unless a prompt is | 3231 // The user shouldn't be prompted on a resumed download unless a prompt is |
3234 // necessary due to the interrupt reason. | 3232 // necessary due to the interrupt reason. |
3235 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPromptAlways) { | 3233 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_WithPromptAlways) { |
3236 CommandLine::ForCurrentProcess()->AppendSwitch( | 3234 CommandLine::ForCurrentProcess()->AppendSwitch( |
3237 switches::kEnableDownloadResumption); | 3235 switches::kEnableDownloadResumption); |
3238 browser()->profile()->GetPrefs()->SetBoolean( | 3236 browser()->profile()->GetPrefs()->SetBoolean( |
3239 prefs::kPromptForDownload, true); | 3237 prefs::kPromptForDownload, true); |
3240 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3238 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3241 content::TestFileErrorInjector::Create( | 3239 content::TestFileErrorInjector::Create( |
3242 DownloadManagerForBrowser(browser()))); | 3240 DownloadManagerForBrowser(browser()))); |
3243 scoped_ptr<content::DownloadTestObserver> completion_observer( | 3241 scoped_ptr<content::DownloadTestObserver> completion_observer( |
3244 CreateWaiter(browser(), 1)); | 3242 CreateWaiter(browser(), 1)); |
3245 EnableFileChooser(true); | 3243 EnableFileChooser(true); |
3246 | 3244 |
3247 DownloadItem* download = StartMockDownloadAndInjectError( | 3245 DownloadItem* download = StartMockDownloadAndInjectError( |
3248 error_injector, | 3246 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
3249 content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | |
3250 ASSERT_TRUE(download); | 3247 ASSERT_TRUE(download); |
3251 | 3248 |
3252 // Prompts the user initially because of the kPromptForDownload preference. | 3249 // Prompts the user initially because of the kPromptForDownload preference. |
3253 EXPECT_TRUE(DidShowFileChooser()); | 3250 EXPECT_TRUE(DidShowFileChooser()); |
3254 | 3251 |
3255 download->Resume(); | 3252 download->Resume(); |
3256 completion_observer->WaitForFinished(); | 3253 completion_observer->WaitForFinished(); |
3257 | 3254 |
3258 EXPECT_EQ( | 3255 EXPECT_EQ( |
3259 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 3256 1u, completion_observer->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
3260 // Shouldn't prompt for resumption. | 3257 // Shouldn't prompt for resumption. |
3261 EXPECT_FALSE(DidShowFileChooser()); | 3258 EXPECT_FALSE(DidShowFileChooser()); |
3262 } | 3259 } |
3263 | 3260 |
3264 // A download that is interrupted due to a transient error should be resumed | 3261 // A download that is interrupted due to a transient error should be resumed |
3265 // automatically. | 3262 // automatically. |
3266 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_Automatic) { | 3263 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_Automatic) { |
3267 CommandLine::ForCurrentProcess()->AppendSwitch( | 3264 CommandLine::ForCurrentProcess()->AppendSwitch( |
3268 switches::kEnableDownloadResumption); | 3265 switches::kEnableDownloadResumption); |
3269 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3266 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3270 content::TestFileErrorInjector::Create( | 3267 content::TestFileErrorInjector::Create( |
3271 DownloadManagerForBrowser(browser()))); | 3268 DownloadManagerForBrowser(browser()))); |
3272 | 3269 |
3273 DownloadItem* download = StartMockDownloadAndInjectError( | 3270 DownloadItem* download = StartMockDownloadAndInjectError( |
3274 error_injector, | 3271 error_injector.get(), |
3275 content::DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); | 3272 content::DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); |
3276 ASSERT_TRUE(download); | 3273 ASSERT_TRUE(download); |
3277 | 3274 |
3278 // The number of times this the download is resumed automatically is defined | 3275 // The number of times this the download is resumed automatically is defined |
3279 // in DownloadItemImpl::kMaxAutoResumeAttempts. The number of DownloadFiles | 3276 // in DownloadItemImpl::kMaxAutoResumeAttempts. The number of DownloadFiles |
3280 // created should be that number + 1 (for the original download request). We | 3277 // created should be that number + 1 (for the original download request). We |
3281 // only care that it is greater than 1. | 3278 // only care that it is greater than 1. |
3282 EXPECT_GT(1u, error_injector->TotalFileCount()); | 3279 EXPECT_GT(1u, error_injector->TotalFileCount()); |
3283 } | 3280 } |
3284 | 3281 |
3285 // An interrupting download should be resumable multiple times. | 3282 // An interrupting download should be resumable multiple times. |
3286 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_MultipleAttempts) { | 3283 IN_PROC_BROWSER_TEST_F(DownloadTest, Resumption_MultipleAttempts) { |
3287 CommandLine::ForCurrentProcess()->AppendSwitch( | 3284 CommandLine::ForCurrentProcess()->AppendSwitch( |
3288 switches::kEnableDownloadResumption); | 3285 switches::kEnableDownloadResumption); |
3289 scoped_refptr<content::TestFileErrorInjector> error_injector( | 3286 scoped_refptr<content::TestFileErrorInjector> error_injector( |
3290 content::TestFileErrorInjector::Create( | 3287 content::TestFileErrorInjector::Create( |
3291 DownloadManagerForBrowser(browser()))); | 3288 DownloadManagerForBrowser(browser()))); |
3292 scoped_ptr<DownloadTestObserverNotInProgress> completion_observer( | 3289 scoped_ptr<DownloadTestObserverNotInProgress> completion_observer( |
3293 new DownloadTestObserverNotInProgress( | 3290 new DownloadTestObserverNotInProgress( |
3294 DownloadManagerForBrowser(browser()), 1)); | 3291 DownloadManagerForBrowser(browser()), 1)); |
3295 // Wait for two transitions to a resumable state | 3292 // Wait for two transitions to a resumable state |
3296 scoped_ptr<content::DownloadTestObserver> resumable_observer( | 3293 scoped_ptr<content::DownloadTestObserver> resumable_observer( |
3297 new DownloadTestObserverResumable( | 3294 new DownloadTestObserverResumable( |
3298 DownloadManagerForBrowser(browser()), 2)); | 3295 DownloadManagerForBrowser(browser()), 2)); |
3299 | 3296 |
3300 EnableFileChooser(true); | 3297 EnableFileChooser(true); |
3301 DownloadItem* download = StartMockDownloadAndInjectError( | 3298 DownloadItem* download = StartMockDownloadAndInjectError( |
3302 error_injector, | 3299 error_injector.get(), content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
3303 content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | |
3304 ASSERT_TRUE(download); | 3300 ASSERT_TRUE(download); |
3305 | 3301 |
3306 content::TestFileErrorInjector::FileErrorInfo error_info; | 3302 content::TestFileErrorInjector::FileErrorInfo error_info; |
3307 error_info.url = download->GetOriginalUrl().spec(); | 3303 error_info.url = download->GetOriginalUrl().spec(); |
3308 error_info.code = content::TestFileErrorInjector::FILE_OPERATION_WRITE; | 3304 error_info.code = content::TestFileErrorInjector::FILE_OPERATION_WRITE; |
3309 error_info.operation_instance = 0; | 3305 error_info.operation_instance = 0; |
3310 error_info.error = content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED; | 3306 error_info.error = content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED; |
3311 error_injector->AddError(error_info); | 3307 error_injector->AddError(error_info); |
3312 error_injector->InjectErrors(); | 3308 error_injector->InjectErrors(); |
3313 | 3309 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3391 *(downloads[0]))); | 3387 *(downloads[0]))); |
3392 | 3388 |
3393 // Begin feedback and check that the file is "stolen". | 3389 // Begin feedback and check that the file is "stolen". |
3394 download_protection_service->feedback_service()->BeginFeedbackForDownload( | 3390 download_protection_service->feedback_service()->BeginFeedbackForDownload( |
3395 downloads[0]); | 3391 downloads[0]); |
3396 std::vector<DownloadItem*> updated_downloads; | 3392 std::vector<DownloadItem*> updated_downloads; |
3397 GetDownloads(browser(), &updated_downloads); | 3393 GetDownloads(browser(), &updated_downloads); |
3398 ASSERT_TRUE(updated_downloads.empty()); | 3394 ASSERT_TRUE(updated_downloads.empty()); |
3399 } | 3395 } |
3400 #endif | 3396 #endif |
OLD | NEW |