Chromium Code Reviews| Index: chrome/browser/download/download_target_determiner_unittest.cc |
| diff --git a/chrome/browser/download/download_target_determiner_unittest.cc b/chrome/browser/download/download_target_determiner_unittest.cc |
| index c69e36168c766f25fbb0b50dcaa36051ff09d47f..4884c09d44ee02f455e26841b04885522176b137 100644 |
| --- a/chrome/browser/download/download_target_determiner_unittest.cc |
| +++ b/chrome/browser/download/download_target_determiner_unittest.cc |
| @@ -5,11 +5,15 @@ |
| #include <stddef.h> |
| #include <stdint.h> |
| +#include <string> |
| +#include <vector> |
| + |
| #include "base/at_exit.h" |
| #include "base/files/file_path.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/location.h" |
| #include "base/macros.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/observer_list.h" |
| #include "base/run_loop.h" |
| #include "base/single_thread_task_runner.h" |
| @@ -19,12 +23,15 @@ |
| #include "base/value_conversions.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/download/chrome_download_manager_delegate.h" |
| +#include "chrome/browser/download/download_confirmation_result.h" |
| #include "chrome/browser/download/download_prefs.h" |
| #include "chrome/browser/download/download_target_determiner.h" |
| #include "chrome/browser/download/download_target_info.h" |
| #include "chrome/browser/history/history_service_factory.h" |
| +#include "chrome/common/features.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/common/safe_browsing/file_type_policies.h" |
| +#include "chrome/common/safe_browsing/file_type_policies_test_util.h" |
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| #include "chrome/test/base/testing_profile.h" |
| #include "components/history/core/browser/history_service.h" |
| @@ -111,6 +118,8 @@ enum TestCaseExpectIntermediate { |
| EXPECT_CRDOWNLOAD, // Expect path/to/target.crdownload. |
| EXPECT_UNCONFIRMED, // Expect path/to/Unconfirmed xxx.crdownload. |
| EXPECT_LOCAL_PATH, // Expect target path. |
| + EXPECT_EMPTY, // Expect empty path. Only for downloads which will be marked |
|
svaldez
2016/10/28 17:29:36
Align comments?
asanka
2016/11/07 19:50:15
Done. The former was what clang-format did on its
|
| + // interrupted or cancelled. |
| }; |
| // Typical download test case. Used with |
| @@ -155,8 +164,10 @@ class MockDownloadTargetDeterminerDelegate |
| MOCK_METHOD3(NotifyExtensions, |
| void(content::DownloadItem*, const base::FilePath&, |
| const NotifyExtensionsCallback&)); |
| - MOCK_METHOD3(PromptUserForDownloadPath, |
| - void(content::DownloadItem*, const base::FilePath&, |
| + MOCK_METHOD4(RequestConfirmation, |
| + void(content::DownloadItem*, |
| + const base::FilePath&, |
| + DownloadConfirmationReason, |
| const FileSelectedCallback&)); |
| MOCK_METHOD3(DetermineLocalPath, |
| void(DownloadItem*, const base::FilePath&, |
| @@ -180,9 +191,9 @@ class MockDownloadTargetDeterminerDelegate |
| ON_CALL(*this, ReserveVirtualPath(_, _, _, _, _)) |
| .WillByDefault(Invoke( |
| &MockDownloadTargetDeterminerDelegate::NullReserveVirtualPath)); |
| - ON_CALL(*this, PromptUserForDownloadPath(_, _, _)) |
| - .WillByDefault(Invoke( |
| - &MockDownloadTargetDeterminerDelegate::NullPromptUser)); |
| + ON_CALL(*this, RequestConfirmation(_, _, _, _)) |
| + .WillByDefault( |
| + Invoke(&MockDownloadTargetDeterminerDelegate::NullPromptUser)); |
| ON_CALL(*this, DetermineLocalPath(_, _, _)) |
| .WillByDefault(Invoke( |
| &MockDownloadTargetDeterminerDelegate::NullDetermineLocalPath)); |
| @@ -197,9 +208,10 @@ class MockDownloadTargetDeterminerDelegate |
| bool create_directory, |
| DownloadPathReservationTracker::FilenameConflictAction conflict_action, |
| const DownloadTargetDeterminerDelegate::ReservedPathCallback& callback); |
| - static void NullPromptUser( |
| - DownloadItem* download, const base::FilePath& suggested_path, |
| - const FileSelectedCallback& callback); |
| + static void NullPromptUser(DownloadItem* download, |
| + const base::FilePath& suggested_path, |
| + DownloadConfirmationReason reason, |
| + const FileSelectedCallback& callback); |
| static void NullDetermineLocalPath( |
| DownloadItem* download, const base::FilePath& virtual_path, |
| const LocalPathCallback& callback); |
| @@ -212,7 +224,7 @@ class DownloadTargetDeterminerTest : public ChromeRenderViewHostTestHarness { |
| void TearDown() override; |
| // Creates MockDownloadItem and sets up default expectations. |
| - content::MockDownloadItem* CreateActiveDownloadItem( |
| + std::unique_ptr<content::MockDownloadItem> CreateActiveDownloadItem( |
| int32_t id, |
| const DownloadTestCase& test_case); |
| @@ -268,17 +280,15 @@ class DownloadTargetDeterminerTest : public ChromeRenderViewHostTestHarness { |
| return download_prefs_.get(); |
| } |
| - // Shortcut |
| - const FileTypePolicies* Policies() const { |
| - return FileTypePolicies::GetInstance(); |
| - } |
| - |
| private: |
| + void SetUpFileTypePolicies(); |
| + |
| std::unique_ptr<DownloadPrefs> download_prefs_; |
| ::testing::NiceMock<MockDownloadTargetDeterminerDelegate> delegate_; |
| NullWebContentsDelegate web_contents_delegate_; |
| base::ScopedTempDir test_download_dir_; |
| base::FilePath test_virtual_dir_; |
| + safe_browsing::FileTypePoliciesTestOverlay file_type_configuration_; |
| }; |
| void DownloadTargetDeterminerTest::SetUp() { |
| @@ -290,6 +300,7 @@ void DownloadTargetDeterminerTest::SetUp() { |
| test_virtual_dir_ = test_download_dir().Append(FILE_PATH_LITERAL("virtual")); |
| download_prefs_->SetDownloadPath(test_download_dir()); |
| delegate_.SetupDefaults(); |
| + SetUpFileTypePolicies(); |
| } |
| void DownloadTargetDeterminerTest::TearDown() { |
| @@ -297,12 +308,12 @@ void DownloadTargetDeterminerTest::TearDown() { |
| ChromeRenderViewHostTestHarness::TearDown(); |
| } |
| -content::MockDownloadItem* |
| +std::unique_ptr<content::MockDownloadItem> |
| DownloadTargetDeterminerTest::CreateActiveDownloadItem( |
| int32_t id, |
| const DownloadTestCase& test_case) { |
| - content::MockDownloadItem* item = |
| - new ::testing::NiceMock<content::MockDownloadItem>(); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + base::MakeUnique<::testing::NiceMock<content::MockDownloadItem>>(); |
| GURL download_url(test_case.url); |
| std::vector<GURL> url_chain; |
| url_chain.push_back(download_url); |
| @@ -405,9 +416,9 @@ DownloadTargetDeterminerTest::RunDownloadTargetDeterminer( |
| std::unique_ptr<DownloadTargetInfo> target_info; |
| base::RunLoop run_loop; |
| DownloadTargetDeterminer::Start( |
| - item, initial_virtual_path, download_prefs_.get(), delegate(), |
| - base::Bind(&CompletionCallbackWrapper, |
| - run_loop.QuitClosure(), |
| + item, initial_virtual_path, DownloadPathReservationTracker::UNIQUIFY, |
| + download_prefs_.get(), delegate(), |
| + base::Bind(&CompletionCallbackWrapper, run_loop.QuitClosure(), |
| &target_info)); |
| run_loop.Run(); |
| ::testing::Mock::VerifyAndClearExpectations(delegate()); |
| @@ -418,8 +429,8 @@ void DownloadTargetDeterminerTest::RunTestCasesWithActiveItem( |
| const DownloadTestCase test_cases[], |
| size_t test_case_count) { |
| for (size_t i = 0; i < test_case_count; ++i) { |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_cases[i])); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_cases[i]); |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| RunTestCase(test_cases[i], base::FilePath(), item.get()); |
| } |
| @@ -465,9 +476,39 @@ void DownloadTargetDeterminerTest::VerifyDownloadTarget( |
| EXPECT_EQ(expected_local_path.value(), |
| target_info->intermediate_path.value()); |
| break; |
| + |
| + case EXPECT_EMPTY: |
| + EXPECT_TRUE(target_info->intermediate_path.empty()); |
| + break; |
| } |
| } |
| +void DownloadTargetDeterminerTest::SetUpFileTypePolicies() { |
| + std::unique_ptr<safe_browsing::DownloadFileTypeConfig> fake_file_type_config = |
| + base::MakeUnique<safe_browsing::DownloadFileTypeConfig>(); |
| + auto file_type = fake_file_type_config->mutable_default_file_type(); |
| + file_type->set_uma_value(-1); |
| + auto platform_settings = file_type->add_platform_settings(); |
| + platform_settings->set_danger_level(DownloadFileType::NOT_DANGEROUS); |
| + platform_settings->set_auto_open_hint(DownloadFileType::ALLOW_AUTO_OPEN); |
| + |
| + file_type = fake_file_type_config->add_file_types(); |
| + file_type->set_extension("kindabad"); |
| + file_type->set_uma_value(-1); |
| + platform_settings = file_type->add_platform_settings(); |
| + platform_settings->set_danger_level(DownloadFileType::ALLOW_ON_USER_GESTURE); |
| + platform_settings->set_auto_open_hint(DownloadFileType::ALLOW_AUTO_OPEN); |
| + |
| + file_type = fake_file_type_config->add_file_types(); |
| + file_type->set_extension("bad"); |
| + file_type->set_uma_value(-1); |
| + platform_settings = file_type->add_platform_settings(); |
| + platform_settings->set_danger_level(DownloadFileType::DANGEROUS); |
| + platform_settings->set_auto_open_hint(DownloadFileType::DISALLOW_AUTO_OPEN); |
| + |
| + file_type_configuration_.SwapConfig(fake_file_type_config); |
| +} |
| + |
| // static |
| void MockDownloadTargetDeterminerDelegate::NullReserveVirtualPath( |
| DownloadItem* download, |
| @@ -475,14 +516,16 @@ void MockDownloadTargetDeterminerDelegate::NullReserveVirtualPath( |
| bool create_directory, |
| DownloadPathReservationTracker::FilenameConflictAction conflict_action, |
| const DownloadTargetDeterminerDelegate::ReservedPathCallback& callback) { |
| - callback.Run(virtual_path, true); |
| + callback.Run(virtual_path, DownloadTargetResult::SUCCESS); |
| } |
| // static |
| void MockDownloadTargetDeterminerDelegate::NullPromptUser( |
| - DownloadItem* download, const base::FilePath& suggested_path, |
| + DownloadItem* download, |
| + const base::FilePath& suggested_path, |
| + DownloadConfirmationReason reason, |
| const FileSelectedCallback& callback) { |
| - callback.Run(suggested_path); |
| + callback.Run(DownloadConfirmationResult::CONFIRMED, suggested_path); |
| } |
| // static |
| @@ -509,9 +552,9 @@ void NotifyExtensionsOverridePath( |
| callback.Run(new_path, DownloadPathReservationTracker::UNIQUIFY); |
| } |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_Basic) { |
| +TEST_F(DownloadTargetDeterminerTest, Basic) { |
| const DownloadTestCase kBasicTestCases[] = { |
| - {// 0: Automatic Safe |
| + {// Automatic Safe |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| "text/plain", FILE_PATH_LITERAL(""), |
| @@ -520,8 +563,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_Basic) { |
| EXPECT_CRDOWNLOAD}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| - {// 1: Save_As Safe |
| + {// Save_As Safe |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| "text/plain", FILE_PATH_LITERAL(""), |
| @@ -529,18 +571,18 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_Basic) { |
| FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_CRDOWNLOAD}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| - {// 2: Automatic Dangerous |
| + {// Automatic Dangerous |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", |
| - "", FILE_PATH_LITERAL(""), |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| - {// 3: Forced Safe |
| + {// Forced Safe |
| FORCED, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", "", |
| FILE_PATH_LITERAL("forced-foo.txt"), |
| @@ -551,16 +593,15 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_Basic) { |
| EXPECT_LOCAL_PATH}, |
| }; |
| - // The test assumes that .crx files have a danger level of |
| + // The test assumes that .kindabad files have a danger level of |
| // ALLOW_ON_USER_GESTURE. |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| RunTestCasesWithActiveItem(kBasicTestCases, arraysize(kBasicTestCases)); |
| } |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_CancelSaveAs) { |
| +TEST_F(DownloadTargetDeterminerTest, CancelSaveAs) { |
| const DownloadTestCase kCancelSaveAsTestCases[] = { |
| {// 0: Save_As Safe, Cancelled. |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| @@ -570,16 +611,16 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_CancelSaveAs) { |
| FILE_PATH_LITERAL(""), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_LOCAL_PATH}}; |
| - ON_CALL(*delegate(), PromptUserForDownloadPath(_, _, _)) |
| - .WillByDefault(WithArg<2>(ScheduleCallback(base::FilePath()))); |
| + ON_CALL(*delegate(), RequestConfirmation(_, _, _, _)) |
| + .WillByDefault(WithArg<3>(ScheduleCallback2( |
| + DownloadConfirmationResult::CANCELED, base::FilePath()))); |
| RunTestCasesWithActiveItem(kCancelSaveAsTestCases, |
| arraysize(kCancelSaveAsTestCases)); |
| } |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| // The SafeBrowsing check is performed early. Make sure that a download item |
| // that has been marked as DANGEROUS_URL behaves correctly. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| +TEST_F(DownloadTargetDeterminerTest, DangerousUrl) { |
| const DownloadTestCase kSafeBrowsingTestCases[] = { |
| {// 0: Automatic Dangerous URL |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| @@ -590,7 +631,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| EXPECT_UNCONFIRMED}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 1: Save As Dangerous URL |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| DownloadFileType::NOT_DANGEROUS, "http://phishing.example.com/foo.txt", |
| @@ -599,7 +639,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_UNCONFIRMED}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 2: Forced Dangerous URL |
| FORCED, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| @@ -622,7 +661,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| EXPECT_UNCONFIRMED}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 4: Save As Dangerous URL + Dangerous file |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| DownloadFileType::NOT_DANGEROUS, "http://phishing.example.com/foo.html", |
| @@ -631,7 +669,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| FILE_PATH_LITERAL("foo.html"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_UNCONFIRMED}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 5: Forced Dangerous URL + Dangerous file |
| FORCED, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, |
| @@ -653,44 +690,44 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DangerousUrl) { |
| // The SafeBrowsing check is performed early. Make sure that a download item |
| // that has been marked as MAYBE_DANGEROUS_CONTENT behaves correctly. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_MaybeDangerousContent) { |
| +TEST_F(DownloadTargetDeterminerTest, MaybeDangerousContent) { |
| const DownloadTestCase kSafeBrowsingTestCases[] = { |
| {// 0: Automatic Maybe dangerous content |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, |
| DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - "http://phishing.example.com/foo.crx", "", FILE_PATH_LITERAL(""), |
| + "http://phishing.example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| {// 1: Automatic Maybe dangerous content with DANGEROUS type. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, |
| - DownloadFileType::DANGEROUS, "http://phishing.example.com/foo.swf", "", |
| + DownloadFileType::DANGEROUS, "http://phishing.example.com/foo.bad", "", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.swf"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.bad"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| - |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 2: Save As Maybe dangerous content |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, |
| - DownloadFileType::NOT_DANGEROUS, "http://phishing.example.com/foo.crx", |
| - "", FILE_PATH_LITERAL(""), |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://phishing.example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_UNCONFIRMED}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 3: Forced Maybe dangerous content |
| FORCED, content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, |
| - DownloadFileType::NOT_DANGEROUS, "http://phishing.example.com/foo.crx", |
| - "", FILE_PATH_LITERAL("forced-foo.crx"), |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://phishing.example.com/foo.kindabad", "", |
| + FILE_PATH_LITERAL("forced-foo.kindabad"), |
| - FILE_PATH_LITERAL("forced-foo.crx"), |
| + FILE_PATH_LITERAL("forced-foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| @@ -698,11 +735,11 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_MaybeDangerousContent) { |
| // Test assumptions: |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| ASSERT_EQ(DownloadFileType::DANGEROUS, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.swf")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.bad")))); |
| ON_CALL(*delegate(), CheckDownloadUrl(_, _, _)) |
| .WillByDefault(WithArg<2>(ScheduleCallback( |
| @@ -711,9 +748,8 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_MaybeDangerousContent) { |
| arraysize(kSafeBrowsingTestCases)); |
| } |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| // Test whether the last saved directory is used for 'Save As' downloads. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LastSavePath) { |
| +TEST_F(DownloadTargetDeterminerTest, LastSavePath) { |
| const DownloadTestCase kLastSavePathTestCasesPre[] = { |
| {// 0: If the last save path is empty, then the default download directory |
| // should be used. |
| @@ -767,7 +803,9 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LastSavePath) { |
| << "Running with default download path"); |
| base::FilePath prompt_path = |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo.txt")); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, prompt_path, _)); |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation(_, prompt_path, |
| + DownloadConfirmationReason::SAVE_AS, _)); |
| RunTestCasesWithActiveItem(kLastSavePathTestCasesPre, |
| arraysize(kLastSavePathTestCasesPre)); |
| } |
| @@ -779,7 +817,9 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LastSavePath) { |
| download_prefs()->SetSaveFilePath(test_download_dir().AppendASCII("foo")); |
| base::FilePath prompt_path = |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo/foo.txt")); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, prompt_path, _)); |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation(_, prompt_path, |
| + DownloadConfirmationReason::SAVE_AS, _)); |
| RunTestCasesWithActiveItem(kLastSavePathTestCasesPost, |
| arraysize(kLastSavePathTestCasesPost)); |
| } |
| @@ -791,8 +831,9 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LastSavePath) { |
| base::FilePath last_selected_dir = test_virtual_dir().AppendASCII("foo"); |
| base::FilePath virtual_path = last_selected_dir.AppendASCII("foo.txt"); |
| download_prefs()->SetSaveFilePath(last_selected_dir); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath( |
| - _, last_selected_dir.AppendASCII("foo.txt"), _)); |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation(_, last_selected_dir.AppendASCII("foo.txt"), |
| + DownloadConfirmationReason::SAVE_AS, _)); |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, virtual_path, _)) |
| .WillOnce(WithArg<2>(ScheduleCallback( |
| GetPathInDownloadDir(FILE_PATH_LITERAL("bar.txt"))))); |
| @@ -800,11 +841,10 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LastSavePath) { |
| arraysize(kLastSavePathTestCasesVirtual)); |
| } |
| } |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| // These tests are run with the default downloads folder set to a virtual |
| // directory. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DefaultVirtual) { |
| +TEST_F(DownloadTargetDeterminerTest, DefaultVirtual) { |
| // The default download directory is the virutal path. |
| download_prefs()->SetDownloadPath(test_virtual_dir()); |
| @@ -828,7 +868,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DefaultVirtual) { |
| RunTestCasesWithActiveItem(&kAutomaticDownloadToVirtualDir, 1); |
| } |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| { |
| SCOPED_TRACE(testing::Message() << "Save As to virtual directory"); |
| const DownloadTestCase kSaveAsToVirtualDir = { |
| @@ -846,13 +885,16 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DefaultVirtual) { |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, _, _)) |
| .WillOnce(WithArg<2>(ScheduleCallback( |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo-local.txt"))))); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath( |
| - _, test_virtual_dir().AppendASCII("bar.txt"), _)) |
| - .WillOnce(WithArg<2>(ScheduleCallback( |
| - test_virtual_dir().AppendASCII("prompted.txt")))); |
| + EXPECT_CALL(*delegate(), RequestConfirmation( |
| + _, test_virtual_dir().AppendASCII("bar.txt"), |
| + DownloadConfirmationReason::SAVE_AS, _)) |
| + .WillOnce(WithArg<3>( |
| + ScheduleCallback2(DownloadConfirmationResult::CONFIRMED, |
| + test_virtual_dir().AppendASCII("prompted.txt")))); |
| RunTestCasesWithActiveItem(&kSaveAsToVirtualDir, 1); |
| } |
| + // "Save as" is not supported on Android. |
|
svaldez
2016/10/28 17:29:36
Should this move up one test?
asanka
2016/11/07 19:50:15
Should be removed. At the DTD layer, Android deals
|
| { |
| SCOPED_TRACE(testing::Message() << "Save As to local directory"); |
| const DownloadTestCase kSaveAsToLocalDir = { |
| @@ -867,13 +909,14 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DefaultVirtual) { |
| DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_CRDOWNLOAD}; |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath( |
| - _, test_virtual_dir().AppendASCII("bar.txt"), _)) |
| - .WillOnce(WithArg<2>(ScheduleCallback( |
| + EXPECT_CALL(*delegate(), RequestConfirmation( |
| + _, test_virtual_dir().AppendASCII("bar.txt"), |
| + DownloadConfirmationReason::SAVE_AS, _)) |
| + .WillOnce(WithArg<3>(ScheduleCallback2( |
| + DownloadConfirmationResult::CONFIRMED, |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo-x.txt"))))); |
| RunTestCasesWithActiveItem(&kSaveAsToLocalDir, 1); |
| } |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| { |
| SCOPED_TRACE(testing::Message() << "Forced safe download"); |
| @@ -895,7 +938,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_DefaultVirtual) { |
| // Test that an inactive download will still get a virtual or local download |
| // path. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_InactiveDownload) { |
| +TEST_F(DownloadTargetDeterminerTest, InactiveDownload) { |
| const DownloadTestCase kInactiveTestCases[] = { |
| {AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| @@ -905,26 +948,23 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_InactiveDownload) { |
| EXPECT_CRDOWNLOAD}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| "text/plain", FILE_PATH_LITERAL(""), |
| FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| - EXPECT_CRDOWNLOAD} |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| - }; |
| + EXPECT_CRDOWNLOAD}}; |
|
svaldez
2016/10/28 17:29:36
Extra whitespace?
asanka
2016/11/07 19:50:15
Reformatted.
|
| for (size_t i = 0; i < arraysize(kInactiveTestCases); ++i) { |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| const DownloadTestCase& test_case = kInactiveTestCases[i]; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_case); |
| EXPECT_CALL(*item.get(), GetState()) |
| .WillRepeatedly(Return(content::DownloadItem::CANCELLED)); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, _, _)).Times(0); |
| + EXPECT_CALL(*delegate(), RequestConfirmation(_, _, _, _)).Times(0); |
| EXPECT_CALL(*delegate(), NotifyExtensions(_, _, _)).Times(0); |
| EXPECT_CALL(*delegate(), ReserveVirtualPath(_, _, _, _, _)).Times(0); |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, _, _)).Times(1); |
| @@ -932,31 +972,113 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_InactiveDownload) { |
| } |
| } |
| +namespace { |
| + |
| +// TODO(asanka): Once we can use C++14, make this a constexpr and use |
| +// static_assert where ASSERT* is used. Once we can use C++17 switch to using |
| +// reflection. |
| +size_t CountDownloadTargetResultValues() { |
|
svaldez
2016/10/28 17:29:36
Seems excessive since if we forget to add a test c
asanka
2016/11/07 19:50:15
This one fails to compile if we forget to add an e
|
| + size_t count = 0; |
| + DownloadTargetResult result = DownloadTargetResult::SUCCESS; |
| + switch (result) { |
| + case DownloadTargetResult::SUCCESS: |
| + count++; |
| + case DownloadTargetResult::USER_CANCELED: |
| + count++; |
| + case DownloadTargetResult::UNEXPECTED: |
| + count++; |
| + case DownloadTargetResult::NAME_TOO_LONG: |
| + count++; |
| + case DownloadTargetResult::CONFLICT: |
| + count++; |
| + case DownloadTargetResult::PATH_NOT_WRITEABLE: |
| + count++; |
| + // Oh you added a new |DownloadTargetResult| type? Add a case here for |
| + // your new value and increment |count|. Don't forget to update the tests |
| + // below. If not, the try bots will remind you. |
| + } |
| + return count; |
| +} |
| + |
| +} // namespace |
| + |
| // If the reserved path could not be verified, then the user should see a |
| // prompt. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ReservationFailed) { |
| - const DownloadTestCase kReservationFailedCases[] = { |
| - {// 0: Automatic download. Since the reservation fails, the disposition of |
| - // the target is to prompt, but the returned path is used. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| - "text/plain", FILE_PATH_LITERAL(""), |
| +TEST_F(DownloadTargetDeterminerTest, ReservationFailed_Confirmation) { |
| + DownloadTestCase download_test_case = { |
| + // 0: Automatic download. Since the reservation fails, the disposition of |
| + // the target is to prompt, but the returned path is used. |
| + AUTOMATIC, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/foo.txt", |
| + "text/plain", |
| + FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("bar.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + FILE_PATH_LITERAL("bar.txt"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| - EXPECT_CRDOWNLOAD}, |
| + EXPECT_CRDOWNLOAD}; |
| + |
| + struct { |
| + DownloadTargetResult result; |
| + DownloadConfirmationReason expected_confirmation_reason; |
| + } kTestCases[] = { |
| + // Reservation succeeded. No confirmation needed. |
| + {DownloadTargetResult::SUCCESS, DownloadConfirmationReason::NONE}, |
| + |
| + // User cancelled the reservation. No further confirmation needed. |
| + {DownloadTargetResult::USER_CANCELED, DownloadConfirmationReason::NONE}, |
| + |
| + // An unexpected error occurred. The download will be marked as |
| + // interrupted. No confirmation needed. |
| + {DownloadTargetResult::UNEXPECTED, DownloadConfirmationReason::NONE}, |
| + |
| + // The name was too long. Need to confirm with user. |
| + {DownloadTargetResult::NAME_TOO_LONG, |
| + DownloadConfirmationReason::NAME_TOO_LONG}, |
| + |
| + // Pathname conflict. User confirmation needed. |
| + {DownloadTargetResult::CONFLICT, |
| + DownloadConfirmationReason::TARGET_CONFLICT}, |
| + |
| + // The path is not writeable. Prompt user for a new path. |
| + {DownloadTargetResult::PATH_NOT_WRITEABLE, |
| + DownloadConfirmationReason::TARGET_NOT_WRITEABLE}, |
| }; |
| - // Setup ReserveVirtualPath() to fail. |
| - ON_CALL(*delegate(), ReserveVirtualPath(_, _, _, _, _)) |
| - .WillByDefault(WithArg<4>(ScheduleCallback2( |
| - GetPathInDownloadDir(FILE_PATH_LITERAL("bar.txt")), false))); |
| - RunTestCasesWithActiveItem(kReservationFailedCases, |
| - arraysize(kReservationFailedCases)); |
| + ASSERT_EQ(CountDownloadTargetResultValues(), arraysize(kTestCases)) |
|
svaldez
2016/10/28 17:29:36
This seems kind of fragile. Maybe something like:
asanka
2016/11/07 19:50:15
Hmm. I tried something like that here. Better?
|
| + << "All enumeration values for DownloadTargetResult must be tested"; |
| + |
| + for (auto& test_case : kTestCases) { |
| + SCOPED_TRACE(::testing::Message() << "DownloadTargetResult " |
| + << static_cast<int>(test_case.result)); |
| + ON_CALL(*delegate(), ReserveVirtualPath(_, _, _, _, _)) |
| + .WillByDefault(WithArg<4>(ScheduleCallback2( |
| + GetPathInDownloadDir(FILE_PATH_LITERAL("bar.txt")), |
| + test_case.result))); |
| + if (test_case.expected_confirmation_reason != |
| + DownloadConfirmationReason::NONE) { |
| + EXPECT_CALL( |
| + *delegate(), |
| + RequestConfirmation(_, _, test_case.expected_confirmation_reason, _)); |
| + } else { |
| + EXPECT_CALL(*delegate(), RequestConfirmation(_, _, _, _)).Times(0); |
| + } |
| + |
| + download_test_case.expected_disposition = |
| + test_case.expected_confirmation_reason == |
| + DownloadConfirmationReason::NONE |
| + ? content::DownloadItem::TARGET_DISPOSITION_OVERWRITE |
| + : content::DownloadItem::TARGET_DISPOSITION_PROMPT; |
| + std::unique_ptr<content::MockDownloadItem> item = CreateActiveDownloadItem( |
| + static_cast<int>(test_case.result), download_test_case); |
| + RunTestCase(download_test_case, base::FilePath(), item.get()); |
| + } |
| } |
| // If the local path could not be determined, the download should be cancelled. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LocalPathFailed) { |
| +TEST_F(DownloadTargetDeterminerTest, LocalPathFailed) { |
| const DownloadTestCase kLocalPathFailedCases[] = { |
| {// 0: Automatic download. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| @@ -981,57 +1103,60 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_LocalPathFailed) { |
| // Downloads that have a danger level of ALLOW_ON_USER_GESTURE should be marked |
| // as safe depending on whether there was a user gesture associated with the |
| // download and whether the referrer was visited prior to today. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_VisitedReferrer) { |
| +TEST_F(DownloadTargetDeterminerTest, VisitedReferrer) { |
| const DownloadTestCase kVisitedReferrerCases[] = { |
| // http://visited.example.com/ is added to the history as a visit that |
| // happened prior to today. |
| {// 0: Safe download due to visiting referrer before. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://visited.example.com/foo.crx", |
| - "application/xml", FILE_PATH_LITERAL(""), |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://visited.example.com/foo.kindabad", "application/xml", |
| + FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_CRDOWNLOAD}, |
| {// 1: Dangerous due to not having visited referrer before. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - "http://not-visited.example.com/foo.crx", "application/xml", |
| + "http://not-visited.example.com/foo.kindabad", "application/xml", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 2: Safe because the user is being prompted. |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, |
| - "http://not-visited.example.com/foo.crx", "application/xml", |
| + "http://not-visited.example.com/foo.kindabad", "application/xml", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_CRDOWNLOAD}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 3: Safe because of forced path. |
| FORCED, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, |
| - "http://not-visited.example.com/foo.crx", "application/xml", |
| - FILE_PATH_LITERAL("foo.crx"), |
| + "http://not-visited.example.com/foo.kindabad", "application/xml", |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_LOCAL_PATH}, |
| }; |
| - // This test assumes that the danger level of .crx files is |
| + // This test assumes that the danger level of .kindabad files is |
| // ALLOW_ON_USER_GESTURE. |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| // First the history service must exist. |
| ASSERT_TRUE(profile()->CreateHistoryService(false, false)); |
| @@ -1069,11 +1194,11 @@ TEST_F(DownloadTargetDeterminerTest, TransitionType) { |
| AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - "http://example.com/foo.crx", |
| + "http://example.com/foo.kindabad", |
| "application/octet-stream", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}; |
| @@ -1082,11 +1207,11 @@ TEST_F(DownloadTargetDeterminerTest, TransitionType) { |
| AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| DownloadFileType::DANGEROUS, |
| - "http://example.com/foo.swf", |
| + "http://example.com/foo.bad", |
| "application/octet-stream", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.swf"), |
| + FILE_PATH_LITERAL("foo.bad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}; |
| @@ -1139,13 +1264,13 @@ TEST_F(DownloadTargetDeterminerTest, TransitionType) { |
| // Test assumptions: |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| ASSERT_EQ(DownloadFileType::DANGEROUS, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.swf")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.bad")))); |
| ASSERT_EQ(DownloadFileType::NOT_DANGEROUS, |
| - Policies()->GetFileDangerLevel( |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| base::FilePath(FILE_PATH_LITERAL("foo.txt")))); |
| for (const auto& test_case : kTestCases) { |
| @@ -1162,98 +1287,186 @@ TEST_F(DownloadTargetDeterminerTest, TransitionType) { |
| download_test_case.expected_intermediate = EXPECT_CRDOWNLOAD; |
| } |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(1, download_test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(1, download_test_case); |
| EXPECT_CALL(*item, GetTransitionType()) |
| .WillRepeatedly(Return(test_case.page_transition)); |
| RunTestCase(download_test_case, base::FilePath(), item.get()); |
| } |
| } |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| // These test cases are run with "Prompt for download" user preference set to |
| // true. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways) { |
| - const DownloadTestCase kPromptingTestCases[] = { |
| - {// 0: Safe Automatic - Should prompt because of "Prompt for download" |
| - // preference setting. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| - "text/plain", FILE_PATH_LITERAL(""), |
| +TEST_F(DownloadTargetDeterminerTest, PromptAlways_SafeAutomatic) { |
| + const DownloadTestCase kSafeAutomatic = { |
| + // 0: Safe Automatic - Should prompt because of "Prompt for download" |
| + // preference setting. |
| + AUTOMATIC, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/automatic.txt", |
| + "text/plain", |
| + FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + FILE_PATH_LITERAL("automatic.txt"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| - EXPECT_CRDOWNLOAD}, |
| + EXPECT_CRDOWNLOAD}; |
| - {// 1: Safe Forced - Shouldn't prompt. |
| - FORCED, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| - "text/plain", FILE_PATH_LITERAL("foo.txt"), |
| + SetPromptForDownload(true); |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation( |
| + _, GetPathInDownloadDir(FILE_PATH_LITERAL("automatic.txt")), |
| + DownloadConfirmationReason::PREFERENCE, _)); |
| + RunTestCasesWithActiveItem(&kSafeAutomatic, 1); |
| +} |
| - FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| +TEST_F(DownloadTargetDeterminerTest, PromptAlways_SafeSaveAs) { |
| + const DownloadTestCase kSafeSaveAs = { |
| + // 1: Safe Save As - Should prompt because of "Save as" invocation. |
| + SAVE_AS, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/save-as.txt", |
| + "text/plain", |
| + FILE_PATH_LITERAL(""), |
| - EXPECT_LOCAL_PATH}, |
| + FILE_PATH_LITERAL("save-as.txt"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| - {// 2: Automatic - The filename extension is marked as one that we will |
| - // open automatically. Shouldn't prompt. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.dummy", "", |
| - FILE_PATH_LITERAL(""), |
| + EXPECT_CRDOWNLOAD}; |
| - FILE_PATH_LITERAL("foo.dummy"), |
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + SetPromptForDownload(true); |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation( |
| + _, GetPathInDownloadDir(FILE_PATH_LITERAL("save-as.txt")), |
| + DownloadConfirmationReason::SAVE_AS, _)); |
| + RunTestCasesWithActiveItem(&kSafeSaveAs, 1); |
| +} |
| - EXPECT_CRDOWNLOAD}, |
| - }; |
| +TEST_F(DownloadTargetDeterminerTest, PromptAlways_SafeForced) { |
| + const DownloadTestCase kSafeForced = { |
| + // 2: Safe Forced - Shouldn't prompt. |
| + FORCED, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/foo.txt", |
| + "text/plain", |
| + FILE_PATH_LITERAL("foo.txt"), |
| + |
| + FILE_PATH_LITERAL("foo.txt"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_LOCAL_PATH}; |
| SetPromptForDownload(true); |
| + RunTestCasesWithActiveItem(&kSafeForced, 1); |
| +} |
| + |
| +TEST_F(DownloadTargetDeterminerTest, PromptAlways_AutoOpen) { |
| + const DownloadTestCase kAutoOpen = { |
| + // 3: Automatic - The filename extension is marked as one that we will |
| + // open automatically. Shouldn't prompt. |
| + AUTOMATIC, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/foo.dummy", |
| + "", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.dummy"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_CRDOWNLOAD}; |
| + SetPromptForDownload(true); |
| EnableAutoOpenBasedOnExtension( |
| base::FilePath(FILE_PATH_LITERAL("dummy.dummy"))); |
| - RunTestCasesWithActiveItem(kPromptingTestCases, |
| - arraysize(kPromptingTestCases)); |
| + RunTestCasesWithActiveItem(&kAutoOpen, 1); |
| +} |
| + |
| +// If an embedder responds to a RequestConfirmation with a new path and a |
| +// CONTINUE_WITHOUT_CONFIRMATION, then we shouldn't consider the file as safe. |
| +TEST_F(DownloadTargetDeterminerTest, ContinueWithoutConfirmation_SaveAs) { |
| + const DownloadTestCase kTestCase = { |
| + SAVE_AS, |
| + content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/save-as.kindabad", |
| + "text/plain", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_UNCONFIRMED}; |
| + |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation(_, GetPathInDownloadDir( |
| + FILE_PATH_LITERAL("save-as.kindabad")), |
| + DownloadConfirmationReason::SAVE_AS, _)) |
| + .WillOnce(WithArg<3>(ScheduleCallback2( |
| + DownloadConfirmationResult::CONTINUE_WITHOUT_CONFIRMATION, |
| + GetPathInDownloadDir(FILE_PATH_LITERAL("foo.kindabad"))))); |
| + RunTestCasesWithActiveItem(&kTestCase, 1); |
| +} |
| + |
| +// Same as ContinueWithoutConfirmation_SaveAs, but the embedder response |
| +// indicates that the user confirmed the path. Hence the danger level of the |
| +// download and the disposition should be updated accordingly. |
| +TEST_F(DownloadTargetDeterminerTest, ContinueWithConfirmation_SaveAs) { |
| + const DownloadTestCase kTestCase = { |
| + SAVE_AS, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, |
| + "http://example.com/save-as.kindabad", |
| + "text/plain", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + |
| + EXPECT_CRDOWNLOAD}; |
| + |
| + EXPECT_CALL(*delegate(), |
| + RequestConfirmation(_, GetPathInDownloadDir( |
| + FILE_PATH_LITERAL("save-as.kindabad")), |
| + DownloadConfirmationReason::SAVE_AS, _)) |
| + .WillOnce(WithArg<3>(ScheduleCallback2( |
| + DownloadConfirmationResult::CONFIRMED, |
| + GetPathInDownloadDir(FILE_PATH_LITERAL("foo.kindabad"))))); |
| + RunTestCasesWithActiveItem(&kTestCase, 1); |
| } |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| #if defined(ENABLE_EXTENSIONS) |
| // These test cases are run with "Prompt for download" user preference set to |
| // true. Automatic extension downloads shouldn't cause prompting. |
| // Android doesn't support extensions. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways_Extension) { |
| +TEST_F(DownloadTargetDeterminerTest, PromptAlways_Extension) { |
| const DownloadTestCase kPromptingTestCases[] = { |
| - {// 0: Automatic Browser Extension download. - Shouldn't prompt for browser |
| - // extension downloads even if "Prompt for download" preference is set. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", |
| - extensions::Extension::kMimeType, FILE_PATH_LITERAL(""), |
| - |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| - |
| - EXPECT_UNCONFIRMED}, |
| - |
| -#if defined(OS_WIN) |
| - {// 1: Automatic User Script - Shouldn't prompt for user script downloads |
| - // even if "Prompt for download" preference is set. ".js" files are |
| - // considered dangerous on Windows. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.user.js", "", |
| - FILE_PATH_LITERAL(""), |
| - |
| - FILE_PATH_LITERAL("foo.user.js"), |
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| - |
| - EXPECT_UNCONFIRMED}, |
| -#else |
| - {// 1: Automatic User Script - Shouldn't prompt for user script downloads |
| - // even if "Prompt for download" preference is set. |
| - AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.user.js", "", |
| - FILE_PATH_LITERAL(""), |
| - |
| - FILE_PATH_LITERAL("foo.user.js"), |
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| - |
| - EXPECT_CRDOWNLOAD}, |
| -#endif |
| + {// 0: Automatic Browser Extension download. - Shouldn't prompt for |
| + // browser |
| + // extension downloads even if "Prompt for download" preference is |
| + // set. |
| + AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", extensions::Extension::kMimeType, |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_UNCONFIRMED}, |
| + |
| + {// 1: Automatic User Script - Shouldn't prompt for user script downloads |
| + // even if "Prompt for download" preference is set. |
| + AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.user.js", "", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.user.js"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_CRDOWNLOAD}, |
| }; |
| SetPromptForDownload(true); |
| @@ -1264,7 +1477,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways_Extension) { |
| // If the download path is managed, then we don't show any prompts. |
| // Note that if the download path is managed, then PromptForDownload() is false. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ManagedPath) { |
| +TEST_F(DownloadTargetDeterminerTest, ManagedPath) { |
| const DownloadTestCase kManagedPathTestCases[] = { |
| {// 0: Automatic Safe |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| @@ -1293,7 +1506,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ManagedPath) { |
| // Test basic functionality supporting extensions that want to override download |
| // filenames. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsSafe) { |
| +TEST_F(DownloadTargetDeterminerTest, NotifyExtensionsSafe) { |
| const DownloadTestCase kNotifyExtensionsTestCases[] = { |
| {// 0: Automatic Safe |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| @@ -1305,7 +1518,6 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsSafe) { |
| EXPECT_CRDOWNLOAD}, |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 1: Save_As Safe |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| @@ -1315,14 +1527,13 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsSafe) { |
| DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_CRDOWNLOAD}, |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| {// 2: Automatic Dangerous |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", |
| - "", FILE_PATH_LITERAL(""), |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("overridden/foo.crx"), |
| + FILE_PATH_LITERAL("overridden/foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| @@ -1346,16 +1557,16 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsSafe) { |
| // Test that filenames provided by extensions are passed into SafeBrowsing |
| // checks and dangerous download checks. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsUnsafe) { |
| +TEST_F(DownloadTargetDeterminerTest, NotifyExtensionsUnsafe) { |
| const DownloadTestCase kNotHandledBySafeBrowsing = { |
| AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - "http://example.com/foo.crx.remove", |
| + "http://example.com/foo.kindabad.remove", |
| "text/plain", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("overridden/foo.crx"), |
| + FILE_PATH_LITERAL("overridden/foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}; |
| @@ -1364,11 +1575,11 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsUnsafe) { |
| AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT, |
| DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - "http://example.com/foo.crx.remove", |
| + "http://example.com/foo.kindabad.remove", |
| "text/plain", |
| FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("overridden/foo.crx"), |
| + FILE_PATH_LITERAL("overridden/foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}; |
| @@ -1385,8 +1596,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_NotifyExtensionsUnsafe) { |
| // Test that conflict actions set by extensions are passed correctly into |
| // ReserveVirtualPath. |
| -TEST_F(DownloadTargetDeterminerTest, |
| - TargetDeterminer_NotifyExtensionsConflict) { |
| +TEST_F(DownloadTargetDeterminerTest, NotifyExtensionsConflict) { |
| const DownloadTestCase kNotifyExtensionsTestCase = { |
| AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| @@ -1401,8 +1611,8 @@ TEST_F(DownloadTargetDeterminerTest, |
| EXPECT_CRDOWNLOAD}; |
| const DownloadTestCase& test_case = kNotifyExtensionsTestCase; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(0, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(0, test_case); |
| base::FilePath overridden_path(FILE_PATH_LITERAL("overridden/foo.txt")); |
| base::FilePath full_overridden_path = |
| GetPathInDownloadDir(overridden_path.value()); |
| @@ -1412,10 +1622,11 @@ TEST_F(DownloadTargetDeterminerTest, |
| .WillOnce(WithArg<2>( |
| ScheduleCallback2(overridden_path, |
| DownloadPathReservationTracker::OVERWRITE))); |
| - EXPECT_CALL(*delegate(), ReserveVirtualPath( |
| - _, full_overridden_path, true, DownloadPathReservationTracker::OVERWRITE, |
| - _)).WillOnce(WithArg<4>( |
| - ScheduleCallback2(full_overridden_path, true))); |
| + EXPECT_CALL(*delegate(), |
| + ReserveVirtualPath(_, full_overridden_path, true, |
| + DownloadPathReservationTracker::OVERWRITE, _)) |
| + .WillOnce(WithArg<4>(ScheduleCallback2(full_overridden_path, |
| + DownloadTargetResult::SUCCESS))); |
| RunTestCase(test_case, base::FilePath(), item.get()); |
| @@ -1424,20 +1635,19 @@ TEST_F(DownloadTargetDeterminerTest, |
| .WillOnce(WithArg<2>( |
| ScheduleCallback2(overridden_path, |
| DownloadPathReservationTracker::PROMPT))); |
| - EXPECT_CALL(*delegate(), ReserveVirtualPath( |
| - _, full_overridden_path, true, DownloadPathReservationTracker::PROMPT, _)) |
| - .WillOnce(WithArg<4>( |
| - ScheduleCallback2(full_overridden_path, true))); |
| + EXPECT_CALL(*delegate(), |
| + ReserveVirtualPath(_, full_overridden_path, true, |
| + DownloadPathReservationTracker::PROMPT, _)) |
| + .WillOnce(WithArg<4>(ScheduleCallback2(full_overridden_path, |
| + DownloadTargetResult::SUCCESS))); |
| RunTestCase(test_case, base::FilePath(), item.get()); |
| } |
| -#if !BUILDFLAG(ANDROID_JAVA_UI) |
| // Test that relative paths returned by extensions are always relative to the |
| // default downloads path. |
| -TEST_F(DownloadTargetDeterminerTest, |
| - TargetDeterminer_NotifyExtensionsDefaultPath) { |
| +TEST_F(DownloadTargetDeterminerTest, NotifyExtensionsDefaultPath) { |
| const DownloadTestCase kNotifyExtensionsTestCase = { |
| - SAVE_AS, |
| + AUTOMATIC, |
| content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| DownloadFileType::NOT_DANGEROUS, |
| "http://example.com/foo.txt", |
| @@ -1445,13 +1655,13 @@ TEST_F(DownloadTargetDeterminerTest, |
| FILE_PATH_LITERAL(""), |
| FILE_PATH_LITERAL("overridden/foo.txt"), |
| - DownloadItem::TARGET_DISPOSITION_PROMPT, |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_CRDOWNLOAD}; |
| const DownloadTestCase& test_case = kNotifyExtensionsTestCase; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(0, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(0, test_case); |
| base::FilePath overridden_path(FILE_PATH_LITERAL("overridden/foo.txt")); |
| base::FilePath full_overridden_path = |
| GetPathInDownloadDir(overridden_path.value()); |
| @@ -1463,16 +1673,10 @@ TEST_F(DownloadTargetDeterminerTest, |
| .WillOnce(WithArg<2>( |
| ScheduleCallback2(overridden_path, |
| DownloadPathReservationTracker::UNIQUIFY))); |
| - EXPECT_CALL(*delegate(), |
| - PromptUserForDownloadPath(_, full_overridden_path, _)) |
| - .WillOnce(WithArg<2>( |
| - ScheduleCallback(full_overridden_path))); |
| RunTestCase(test_case, base::FilePath(), item.get()); |
| } |
| -#endif // !BUILDFLAG(ANDROID_JAVA_UI) |
| -TEST_F(DownloadTargetDeterminerTest, |
| - TargetDeterminer_InitialVirtualPathUnsafe) { |
| +TEST_F(DownloadTargetDeterminerTest, InitialVirtualPathUnsafe) { |
| const base::FilePath::CharType* kInitialPath = |
| FILE_PATH_LITERAL("some_path/bar.html"); |
| @@ -1493,8 +1697,8 @@ TEST_F(DownloadTargetDeterminerTest, |
| EXPECT_CRDOWNLOAD}; |
| const DownloadTestCase& test_case = kInitialPathTestCase; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(1, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(1, test_case); |
| EXPECT_CALL(*item, GetLastReason()) |
| .WillRepeatedly(Return( |
| content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED)); |
| @@ -1508,7 +1712,7 @@ TEST_F(DownloadTargetDeterminerTest, |
| // the download (ACCESS_DENIED, NO_SPACE, etc..), then the user should be |
| // prompted, and not otherwise. These test cases shouldn't result in prompting |
| // since the error is set to NETWORK_FAILED. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| +TEST_F(DownloadTargetDeterminerTest, ResumedNoPrompt) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType* kInitialPath = |
| @@ -1518,8 +1722,8 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| {// 0: Automatic Safe: Initial path is ignored since the user has not been |
| // prompted before. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", "text/plain", |
| - FILE_PATH_LITERAL(""), |
| + DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| + "text/plain", FILE_PATH_LITERAL(""), |
| FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| @@ -1527,8 +1731,8 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| {// 1: Save_As Safe: Initial path used. |
| SAVE_AS, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", "text/plain", |
| - FILE_PATH_LITERAL(""), |
| + DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| + "text/plain", FILE_PATH_LITERAL(""), |
| kInitialPath, DownloadItem::TARGET_DISPOSITION_PROMPT, |
| @@ -1537,10 +1741,11 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| {// 2: Automatic Dangerous: Initial path is ignored since the user hasn't |
| // been prompted before. |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", "", |
| - FILE_PATH_LITERAL(""), |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| @@ -1555,16 +1760,16 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| EXPECT_LOCAL_PATH}, |
| }; |
| - // The test assumes that .crx files have a danger level of |
| + // The test assumes that .kindabad files have a danger level of |
| // ALLOW_ON_USER_GESTURE. |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| for (size_t i = 0; i < arraysize(kResumedTestCases); ++i) { |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| const DownloadTestCase& test_case = kResumedTestCases[i]; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_case); |
| base::FilePath expected_path = |
| GetPathInDownloadDir(test_case.expected_local_path); |
| ON_CALL(*item.get(), GetLastReason()) |
| @@ -1576,7 +1781,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| EXPECT_CALL(*delegate(), NotifyExtensions(_, _, _)) |
| .Times(test_case.test_type == AUTOMATIC ? 1 : 0); |
| EXPECT_CALL(*delegate(), ReserveVirtualPath(_, expected_path, false, _, _)); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, expected_path, _)) |
| + EXPECT_CALL(*delegate(), RequestConfirmation(_, expected_path, _, _)) |
| .Times(0); |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, expected_path, _)); |
| EXPECT_CALL(*delegate(), CheckDownloadUrl(_, expected_path, _)); |
| @@ -1586,7 +1791,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedNoPrompt) { |
| // Test that a forced download doesn't prompt, even if the interrupt reason |
| // suggests that the target path may not be suitable for downloads. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedForcedDownload) { |
| +TEST_F(DownloadTargetDeterminerTest, ResumedForcedDownload) { |
| const base::FilePath::CharType* kInitialPath = |
| FILE_PATH_LITERAL("some_path/bar.txt"); |
| const DownloadTestCase kResumedForcedDownload = { |
| @@ -1606,15 +1811,14 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedForcedDownload) { |
| const DownloadTestCase& test_case = kResumedForcedDownload; |
| base::FilePath expected_path = |
| GetPathInDownloadDir(test_case.expected_local_path); |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(0, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(0, test_case); |
| ON_CALL(*item.get(), GetLastReason()) |
| .WillByDefault(Return(content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE)); |
| EXPECT_CALL(*delegate(), NotifyExtensions(_, _, _)) |
| .Times(test_case.test_type == AUTOMATIC ? 1 : 0); |
| EXPECT_CALL(*delegate(), ReserveVirtualPath(_, expected_path, false, _, _)); |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, _, _)) |
| - .Times(0); |
| + EXPECT_CALL(*delegate(), RequestConfirmation(_, _, _, _)).Times(0); |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, expected_path, _)); |
| EXPECT_CALL(*delegate(), CheckDownloadUrl(_, expected_path, _)); |
| RunTestCase(test_case, GetPathInDownloadDir(kInitialPath), item.get()); |
| @@ -1625,7 +1829,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedForcedDownload) { |
| // the download (ACCESS_DENIED, NO_SPACE, etc..), then the user should be |
| // prompted, and not otherwise. These test cases result in prompting since the |
| // error is set to NO_SPACE. |
| -TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedWithPrompt) { |
| +TEST_F(DownloadTargetDeterminerTest, ResumedWithPrompt) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType* kInitialPath = |
| @@ -1637,12 +1841,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedWithPrompt) { |
| DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.txt", |
| "text/plain", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.txt"), |
| -#if BUILDFLAG(ANDROID_JAVA_UI) |
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| -#else |
| - DownloadItem::TARGET_DISPOSITION_PROMPT, |
| -#endif |
| + FILE_PATH_LITERAL("foo.txt"), DownloadItem::TARGET_DISPOSITION_PROMPT, |
| EXPECT_CRDOWNLOAD}, |
| {// 1: Save_As Safe |
| @@ -1656,53 +1855,33 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedWithPrompt) { |
| { |
| // 2: Automatic Dangerous |
| - AUTOMATIC, |
| -#if BUILDFLAG(ANDROID_JAVA_UI) |
| - // If we don't prompt user, the file will be treated as dangerous. |
| - content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, |
| -#else |
| - content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| - DownloadFileType::NOT_DANGEROUS, |
| -#endif |
| - "http://example.com/foo.crx", "", FILE_PATH_LITERAL(""), |
| - |
| - FILE_PATH_LITERAL("foo.crx"), |
| -#if BUILDFLAG(ANDROID_JAVA_UI) |
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| - // Dangerous download will have an unconfirmed intermediate file name. |
| - EXPECT_UNCONFIRMED, |
| -#else |
| + AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + DownloadFileType::NOT_DANGEROUS, "http://example.com/foo.kindabad", |
|
svaldez
2016/10/28 17:29:36
Should this be ".bad"?
asanka
2016/11/07 19:50:15
Added another test case for .bad. The semantics ar
|
| + "", FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_PROMPT, EXPECT_CRDOWNLOAD, |
| -#endif |
| }, |
| }; |
| - // The test assumes that .xml files have a danger level of |
| - // ALLOW_ON_USER_GESTURE. |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| for (size_t i = 0; i < arraysize(kResumedTestCases); ++i) { |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| download_prefs()->SetSaveFilePath(test_download_dir()); |
| const DownloadTestCase& test_case = kResumedTestCases[i]; |
| base::FilePath expected_path = |
| GetPathInDownloadDir(test_case.expected_local_path); |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_case)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_case); |
| ON_CALL(*item.get(), GetLastReason()) |
| .WillByDefault(Return( |
| content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE)); |
| EXPECT_CALL(*delegate(), NotifyExtensions(_, _, _)) |
| .Times(test_case.test_type == AUTOMATIC ? 1 : 0); |
| EXPECT_CALL(*delegate(), ReserveVirtualPath(_, expected_path, false, _, _)); |
| -#if BUILDFLAG(ANDROID_JAVA_UI) |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, expected_path, _)) |
| - .Times(0); |
| -#else |
| - EXPECT_CALL(*delegate(), PromptUserForDownloadPath(_, expected_path, _)); |
| -#endif |
| + EXPECT_CALL(*delegate(), RequestConfirmation(_, expected_path, _, _)); |
| EXPECT_CALL(*delegate(), DetermineLocalPath(_, expected_path, _)); |
| EXPECT_CALL(*delegate(), CheckDownloadUrl(_, expected_path, _)); |
| RunTestCase(test_case, GetPathInDownloadDir(kInitialPath), item.get()); |
| @@ -1710,8 +1889,7 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_ResumedWithPrompt) { |
| } |
| // Test intermediate filename generation for resumed downloads. |
| -TEST_F(DownloadTargetDeterminerTest, |
| - TargetDeterminer_IntermediateNameForResumed) { |
| +TEST_F(DownloadTargetDeterminerTest, IntermediateNameForResumed) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType kInitialPath[] = |
| @@ -1754,10 +1932,10 @@ TEST_F(DownloadTargetDeterminerTest, |
| {{// 2: Automatic Dangerous |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", |
| - "", FILE_PATH_LITERAL(""), |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| @@ -1766,10 +1944,10 @@ TEST_F(DownloadTargetDeterminerTest, |
| {{// 3: Automatic Dangerous |
| AUTOMATIC, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, |
| - DownloadFileType::ALLOW_ON_USER_GESTURE, "http://example.com/foo.crx", |
| - "", FILE_PATH_LITERAL(""), |
| + DownloadFileType::ALLOW_ON_USER_GESTURE, |
| + "http://example.com/foo.kindabad", "", FILE_PATH_LITERAL(""), |
| - FILE_PATH_LITERAL("foo.crx"), |
| + FILE_PATH_LITERAL("foo.kindabad"), |
| DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| EXPECT_UNCONFIRMED}, |
| @@ -1793,17 +1971,17 @@ TEST_F(DownloadTargetDeterminerTest, |
| FILE_PATH_LITERAL("forced-foo.txt")}, |
| }; |
| - // The test assumes that .crx files have a danger level of |
| + // The test assumes that .kindabad files have a danger level of |
| // ALLOW_ON_USER_GESTURE. |
| ASSERT_EQ(DownloadFileType::ALLOW_ON_USER_GESTURE, |
| - Policies()->GetFileDangerLevel( |
| - base::FilePath(FILE_PATH_LITERAL("foo.crx")))); |
| + safe_browsing::FileTypePolicies::GetInstance()->GetFileDangerLevel( |
| + base::FilePath(FILE_PATH_LITERAL("foo.kindabad")))); |
| for (size_t i = 0; i < arraysize(kIntermediateNameTestCases); ++i) { |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| const IntermediateNameTestCase& test_case = kIntermediateNameTestCases[i]; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_case.general)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_case.general); |
| ON_CALL(*item.get(), GetLastReason()) |
| .WillByDefault(Return( |
| @@ -1826,8 +2004,7 @@ TEST_F(DownloadTargetDeterminerTest, |
| } |
| // Test MIME type determination based on the target filename. |
| -TEST_F(DownloadTargetDeterminerTest, |
| - TargetDeterminer_MIMETypeDetermination) { |
| +TEST_F(DownloadTargetDeterminerTest, MIMETypeDetermination) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType kInitialPath[] = |
| @@ -1900,7 +2077,6 @@ TEST_F(DownloadTargetDeterminerTest, |
| EXPECT_CRDOWNLOAD}, |
| ""}, |
| - |
| }; |
| ON_CALL(*delegate(), GetFileMimeType( |
| @@ -1911,8 +2087,8 @@ TEST_F(DownloadTargetDeterminerTest, |
| for (size_t i = 0; i < arraysize(kMIMETypeTestCases); ++i) { |
| SCOPED_TRACE(testing::Message() << "Running test case " << i); |
| const MIMETypeTestCase& test_case = kMIMETypeTestCases[i]; |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(i, test_case.general)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(i, test_case.general); |
| std::unique_ptr<DownloadTargetInfo> target_info = |
| RunDownloadTargetDeterminer(GetPathInDownloadDir(kInitialPath), |
| item.get()); |
| @@ -2033,8 +2209,7 @@ class DownloadTargetDeterminerTestWithPlugin |
| // Check if secure handling of filetypes is determined correctly for PPAPI |
| // plugins. |
| -TEST_F(DownloadTargetDeterminerTestWithPlugin, |
| - TargetDeterminer_CheckForSecureHandling_PPAPI) { |
| +TEST_F(DownloadTargetDeterminerTestWithPlugin, CheckForSecureHandling_PPAPI) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType kInitialPath[] = |
| @@ -2071,8 +2246,8 @@ TEST_F(DownloadTargetDeterminerTestWithPlugin, |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo.fakeext")), _)) |
| .WillByDefault(WithArg<1>( |
| ScheduleCallback(kTestMIMEType))); |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(1, kSecureHandlingTestCase)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(1, kSecureHandlingTestCase); |
| std::unique_ptr<DownloadTargetInfo> target_info = RunDownloadTargetDeterminer( |
| GetPathInDownloadDir(kInitialPath), item.get()); |
| EXPECT_FALSE(target_info->is_filetype_handled_safely); |
| @@ -2103,7 +2278,7 @@ TEST_F(DownloadTargetDeterminerTestWithPlugin, |
| // Check if secure handling of filetypes is determined correctly for |
| // BrowserPlugins. |
| TEST_F(DownloadTargetDeterminerTestWithPlugin, |
| - TargetDeterminer_CheckForSecureHandling_BrowserPlugin) { |
| + CheckForSecureHandling_BrowserPlugin) { |
| // All test cases run with GetPathInDownloadDir(kInitialPath) as the inital |
| // path. |
| const base::FilePath::CharType kInitialPath[] = |
| @@ -2140,8 +2315,8 @@ TEST_F(DownloadTargetDeterminerTestWithPlugin, |
| GetPathInDownloadDir(FILE_PATH_LITERAL("foo.fakeext")), _)) |
| .WillByDefault(WithArg<1>( |
| ScheduleCallback(kTestMIMEType))); |
| - std::unique_ptr<content::MockDownloadItem> item( |
| - CreateActiveDownloadItem(1, kSecureHandlingTestCase)); |
| + std::unique_ptr<content::MockDownloadItem> item = |
| + CreateActiveDownloadItem(1, kSecureHandlingTestCase); |
| std::unique_ptr<DownloadTargetInfo> target_info = RunDownloadTargetDeterminer( |
| GetPathInDownloadDir(kInitialPath), item.get()); |
| EXPECT_FALSE(target_info->is_filetype_handled_safely); |