| Index: chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| diff --git a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| index 657fb75c01e4878c095b55c851248f2d084fc08b..abc43122af4ce1835dd02ef366c56c5c3f6e0a95 100644
|
| --- a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| +++ b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| @@ -37,6 +37,8 @@ using ::testing::ReturnRefOfCopy;
|
| using ::testing::WithArg;
|
| using ::testing::_;
|
|
|
| +namespace {
|
| +
|
| // Google Mock action that posts a task to the current message loop that invokes
|
| // the first argument of the mocked method as a callback. Said argument must be
|
| // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is
|
| @@ -61,8 +63,6 @@ MATCHER_P(InfoMatchingURL, url, "DownloadInfo matching URL " + url.spec()) {
|
| return url == arg.download_url_chain.front();
|
| }
|
|
|
| -namespace {
|
| -
|
| // Used with DownloadTestCase. Indicates the type of test case. The expectations
|
| // for the test is set based on the type.
|
| enum TestCaseType {
|
| @@ -90,25 +90,34 @@ struct DownloadTestCase {
|
| // Type of test.
|
| TestCaseType test_type;
|
|
|
| - // The |danger_type| value is used to determine the behavior of
|
| - // DownloadProtectionService::IsSupportedDownload(), GetUrlCheckResult() and
|
| - // well as set expectations for GetDangerType() as necessary for flagging the
|
| - // download with as a dangerous download of type |danger_type|.
|
| + // The |danger_type| is the expected danger type for the download as
|
| + // determined by CDMD. This value is also used to determine the behavior of
|
| + // DownloadProtectionService::IsSupportedDownload(), CDMD::CheckDownloadUrl()
|
| + // as necessary for flagging the download with as a dangerous download of type
|
| + // |danger_type|.
|
| content::DownloadDangerType danger_type;
|
|
|
| - // Value of GetURL()
|
| + // Value of DownloadItem::GetURL()
|
| const char* url;
|
|
|
| - // Value of GetMimeType()
|
| + // Value of DownloadItem::GetMimeType()
|
| const char* mime_type;
|
|
|
| // Should be non-empty if |test_type| == FORCED. Value of GetForcedFilePath().
|
| const FilePath::CharType* forced_file_path;
|
|
|
| // Expected final download path. Specified relative to the test download path.
|
| + // If the user is presented with a file chooser, this path will also be the
|
| + // response sent back from the file chooser.
|
| const FilePath::CharType* expected_target_path;
|
|
|
| - // Expected target disposition.
|
| + // The path to expect as the suggested path if the user will be prompted for a
|
| + // download path.
|
| + const FilePath::CharType* expected_prompt_path;
|
| +
|
| + // Expected target disposition. If this is TARGET_DISPOSITION_PROMPT, then the
|
| + // test run will expect ChromeDownloadManagerDelegate to prompt the user for a
|
| + // download location.
|
| DownloadItem::TargetDisposition expected_disposition;
|
|
|
| // Type of intermediate path to expect.
|
| @@ -146,6 +155,7 @@ class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
|
| download_protection_service_->SetEnabled(true);
|
| #endif
|
| }
|
| +
|
| virtual safe_browsing::DownloadProtectionService*
|
| GetDownloadProtectionService() OVERRIDE {
|
| #if defined(ENABLE_SAFE_BROWSING)
|
| @@ -154,6 +164,7 @@ class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
|
| return NULL;
|
| #endif
|
| }
|
| +
|
| virtual bool IsDangerousFile(const DownloadItem& download,
|
| const FilePath& suggested_path,
|
| bool visited_referrer_before) OVERRIDE {
|
| @@ -167,18 +178,26 @@ class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
|
| return suggested_path.MatchesExtension(FILE_PATH_LITERAL(".jar")) ||
|
| suggested_path.MatchesExtension(FILE_PATH_LITERAL(".exe"));
|
| }
|
| +
|
| virtual void GetReservedPath(
|
| content::DownloadItem& download,
|
| const FilePath& target_path,
|
| const FilePath& default_download_path,
|
| bool should_uniquify_path,
|
| - const DownloadPathReservationTracker::ReservedPathCallback callback) {
|
| + const DownloadPathReservationTracker::ReservedPathCallback& callback)
|
| + OVERRIDE {
|
| // Pretend the path reservation succeeded without any change to
|
| // |target_path|.
|
| MessageLoop::current()->PostTask(FROM_HERE,
|
| base::Bind(callback, target_path, true));
|
| }
|
|
|
| + // During tests, we want to mock the behavior of this method.
|
| + MOCK_METHOD3(ChooseDownloadPath,
|
| + void(content::DownloadItem*,
|
| + const FilePath&,
|
| + const FileSelectedCallback&));
|
| +
|
| #if defined(ENABLE_SAFE_BROWSING)
|
| // A TestDownloadProtectionService* is convenient for setting up mocks.
|
| TestDownloadProtectionService* test_download_protection_service() {
|
| @@ -235,18 +254,20 @@ class ChromeDownloadManagerDelegateTest : public ::testing::Test {
|
| // Set the kPromptForDownload user preference to |prompt|.
|
| void SetPromptForDownload(bool prompt);
|
|
|
| - // Verifies that the intermediate path in |intermediate| is the path that is
|
| - // expected for |target| given the intermediate path type in |expectation|.
|
| - void VerifyIntermediatePath(TestCaseExpectIntermediate expectation,
|
| - const FilePath& target,
|
| - const FilePath& intermediate);
|
| -
|
| const FilePath& default_download_path() const;
|
| TestChromeDownloadManagerDelegate* delegate();
|
| content::MockDownloadManager* download_manager();
|
| DownloadPrefs* download_prefs();
|
|
|
| private:
|
| + // Verifies that |target_path|, |disposition|, |danger_type| and
|
| + // |intermediate_path| matches the expectations of |test_case|.
|
| + void DownloadTargetVerifier(const DownloadTestCase* test_case,
|
| + const FilePath& target_path,
|
| + DownloadItem::TargetDisposition disposition,
|
| + content::DownloadDangerType danger_type,
|
| + const FilePath& intermediate_path);
|
| +
|
| MessageLoopForUI message_loop_;
|
| TestingPrefService* pref_service_;
|
| ScopedTempDir test_download_dir_;
|
| @@ -365,57 +386,36 @@ void ChromeDownloadManagerDelegateTest::RunTestCaseWithDownloadItem(
|
| test_case.danger_type);
|
| #endif // !ENABLE_SAFE_BROWSING
|
|
|
| - // Expectations for filename determination results.
|
| - FilePath expected_target_path(
|
| - GetPathInDownloadDir(test_case.expected_target_path));
|
| - {
|
| - ::testing::Sequence s1, s2, s3;
|
| - DownloadItem::TargetDisposition initial_disposition =
|
| - (test_case.test_type == SAVE_AS) ?
|
| - DownloadItem::TARGET_DISPOSITION_PROMPT :
|
| - DownloadItem::TARGET_DISPOSITION_OVERWRITE;
|
| - EXPECT_CALL(*item, GetTargetFilePath())
|
| - .InSequence(s1)
|
| - .WillRepeatedly(ReturnRefOfCopy(FilePath()));
|
| - EXPECT_CALL(*item, GetTargetDisposition())
|
| - .InSequence(s2)
|
| - .WillRepeatedly(Return(initial_disposition));
|
| - EXPECT_CALL(*item, GetDangerType())
|
| - .InSequence(s3)
|
| - .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS));
|
| - EXPECT_CALL(*item, OnTargetPathDetermined(expected_target_path,
|
| - test_case.expected_disposition,
|
| - test_case.danger_type))
|
| - .InSequence(s1, s2, s3);
|
| - EXPECT_CALL(*item, GetTargetFilePath())
|
| - .InSequence(s1)
|
| - .WillRepeatedly(ReturnRef(expected_target_path));
|
| - EXPECT_CALL(*item, GetTargetDisposition())
|
| - .InSequence(s2)
|
| - .WillRepeatedly(Return(test_case.expected_disposition));
|
| - EXPECT_CALL(*item, GetDangerType())
|
| - .InSequence(s3)
|
| - .WillRepeatedly(Return(test_case.danger_type));
|
| + DownloadItem::TargetDisposition initial_disposition =
|
| + (test_case.test_type == SAVE_AS) ?
|
| + DownloadItem::TARGET_DISPOSITION_PROMPT :
|
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE;
|
| + EXPECT_CALL(*item, GetTargetFilePath())
|
| + .WillRepeatedly(ReturnRefOfCopy(FilePath()));
|
| + EXPECT_CALL(*item, GetTargetDisposition())
|
| + .WillRepeatedly(Return(initial_disposition));
|
| + EXPECT_CALL(*item, GetDangerType())
|
| + .WillRepeatedly(Return(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS));
|
| +
|
| + if (test_case.expected_disposition ==
|
| + DownloadItem::TARGET_DISPOSITION_PROMPT) {
|
| + FilePath expected_prompt_path = GetPathInDownloadDir(
|
| + test_case.expected_prompt_path);
|
| + FilePath expected_target_path = GetPathInDownloadDir(
|
| + test_case.expected_target_path);
|
| + EXPECT_CALL(*delegate_,
|
| + ChooseDownloadPath(item, expected_prompt_path, _))
|
| + .WillOnce(WithArg<2>(ScheduleCallback(expected_target_path)));
|
| }
|
|
|
| - // RestartDownload() should be called at this point.
|
| - EXPECT_CALL(*download_manager_, RestartDownload(item->GetId()));
|
| - EXPECT_CALL(*download_manager_, LastDownloadPath())
|
| - .WillRepeatedly(Return(FilePath()));
|
| -
|
| // Kick off the test.
|
| - EXPECT_FALSE(delegate_->ShouldStartDownload(item->GetId()));
|
| + base::WeakPtrFactory<ChromeDownloadManagerDelegateTest> factory(this);
|
| + EXPECT_TRUE(delegate_->DetermineDownloadTarget(
|
| + item,
|
| + base::Bind(&ChromeDownloadManagerDelegateTest::DownloadTargetVerifier,
|
| + factory.GetWeakPtr(), base::Unretained(&test_case))));
|
| message_loop_.RunAllPending();
|
| -
|
| - // Now query the intermediate path.
|
| - EXPECT_CALL(*item, GetDangerType())
|
| - .WillOnce(Return(test_case.danger_type));
|
| - bool ok_to_overwrite = false;
|
| - FilePath intermediate_path = delegate_->GetIntermediatePath(*item);
|
| - EXPECT_FALSE(ok_to_overwrite);
|
| - VerifyIntermediatePath(test_case.expected_intermediate,
|
| - GetPathInDownloadDir(test_case.expected_target_path),
|
| - intermediate_path);
|
| + VerifyAndClearExpectations();
|
| }
|
|
|
| void ChromeDownloadManagerDelegateTest::RunTestCases(
|
| @@ -443,24 +443,32 @@ void ChromeDownloadManagerDelegateTest::SetPromptForDownload(bool prompt) {
|
| pref_service_->SetBoolean(prefs::kPromptForDownload, prompt);
|
| }
|
|
|
| -void ChromeDownloadManagerDelegateTest::VerifyIntermediatePath(
|
| - TestCaseExpectIntermediate expectation,
|
| - const FilePath& target,
|
| - const FilePath& intermediate) {
|
| - if (expectation == EXPECT_CRDOWNLOAD) {
|
| - EXPECT_EQ(download_util::GetCrDownloadPath(target).value(),
|
| - intermediate.value());
|
| +void ChromeDownloadManagerDelegateTest::DownloadTargetVerifier(
|
| + const DownloadTestCase* test_case,
|
| + const FilePath& target_path,
|
| + DownloadItem::TargetDisposition disposition,
|
| + content::DownloadDangerType danger_type,
|
| + const FilePath& intermediate_path) {
|
| + FilePath expected_target_path(
|
| + GetPathInDownloadDir(test_case->expected_target_path));
|
| + EXPECT_EQ(expected_target_path.value(), target_path.value());
|
| + EXPECT_EQ(test_case->expected_disposition, disposition);
|
| + EXPECT_EQ(test_case->danger_type, danger_type);
|
| +
|
| + if (test_case->expected_intermediate == EXPECT_CRDOWNLOAD) {
|
| + EXPECT_EQ(download_util::GetCrDownloadPath(target_path).value(),
|
| + intermediate_path.value());
|
| } else {
|
| // The paths (in English) look like: /path/Unconfirmed xxx.crdownload.
|
| // Of this, we only check that the path is:
|
| // 1. Not "/path/target.crdownload",
|
| // 2. Points to the same directory as the target.
|
| // 3. Has extension ".crdownload".
|
| - EXPECT_NE(download_util::GetCrDownloadPath(target).value(),
|
| - intermediate.value());
|
| - EXPECT_EQ(target.DirName().value(),
|
| - intermediate.DirName().value());
|
| - EXPECT_TRUE(intermediate.MatchesExtension(
|
| + EXPECT_NE(download_util::GetCrDownloadPath(target_path).value(),
|
| + intermediate_path.value());
|
| + EXPECT_EQ(target_path.DirName().value(),
|
| + intermediate_path.DirName().value());
|
| + EXPECT_TRUE(intermediate_path.MatchesExtension(
|
| FILE_PATH_LITERAL(".crdownload")));
|
| }
|
| }
|
| @@ -486,13 +494,6 @@ DownloadPrefs* ChromeDownloadManagerDelegateTest::download_prefs() {
|
|
|
| } // namespace
|
|
|
| -TEST_F(ChromeDownloadManagerDelegateTest, ShouldStartDownload_Invalid) {
|
| - // Invalid download ID shouldn't do anything.
|
| - EXPECT_CALL(*download_manager(), GetActiveDownloadItem(-1))
|
| - .WillOnce(Return(reinterpret_cast<DownloadItem*>(NULL)));
|
| - EXPECT_FALSE(delegate()->ShouldStartDownload(-1));
|
| -}
|
| -
|
| TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| const DownloadTestCase kBasicTestCases[] = {
|
| {
|
| @@ -503,6 +504,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -516,6 +518,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL("foo.txt"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -529,6 +532,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.exe"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -542,6 +546,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL("forced-foo.txt"),
|
|
|
| FILE_PATH_LITERAL("forced-foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -559,6 +564,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL("forced-foo.exe"),
|
|
|
| FILE_PATH_LITERAL("forced-foo.exe"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -572,6 +578,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_Basic) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.exe"),
|
| + FILE_PATH_LITERAL("foo.exe"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -595,6 +602,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -608,6 +616,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL("foo.txt"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -621,6 +630,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL("forced-foo.txt"),
|
|
|
| FILE_PATH_LITERAL("forced-foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -635,6 +645,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.jar"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -648,6 +659,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.jar"),
|
| + FILE_PATH_LITERAL("foo.jar"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -661,6 +673,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_DangerousURL) {
|
| FILE_PATH_LITERAL("forced-foo.jar"),
|
|
|
| FILE_PATH_LITERAL("forced-foo.jar"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -685,6 +698,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_PromptAlways) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL("foo.txt"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -700,6 +714,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_PromptAlways) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.crx"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -714,6 +729,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_PromptAlways) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.user.js"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -728,6 +744,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_PromptAlways) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.dummy"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -746,6 +763,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_PromptAlways) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.exe"),
|
| + FILE_PATH_LITERAL("foo.exe"),
|
| DownloadItem::TARGET_DISPOSITION_PROMPT,
|
|
|
| EXPECT_UNCONFIRMED
|
| @@ -770,6 +788,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_ManagedPath) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -783,6 +802,7 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_ManagedPath) {
|
| FILE_PATH_LITERAL(""),
|
|
|
| FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
|
|
| EXPECT_CRDOWNLOAD
|
| @@ -794,6 +814,69 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_ManagedPath) {
|
| RunTestCases(kManagedPathTestCases, arraysize(kManagedPathTestCases));
|
| }
|
|
|
| +// Test whether the last saved directory is saved if the user was presented with
|
| +// a file chooser.
|
| +TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_LastSavePath) {
|
| + const DownloadTestCase kLastSavePathTestCases[] = {
|
| + {
|
| + // Initially the last saved directory is the user's default download path.
|
| +
|
| + // 0: Start a Save As download. Then respond to the file chooser with
|
| + // foo/bar.txt as the target directory. This should cause the foo/
|
| + // directory to be remembered as the last used save directory.
|
| + SAVE_AS,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + "http://example.com/foo.txt", "text/plain",
|
| + FILE_PATH_LITERAL(""),
|
| +
|
| + FILE_PATH_LITERAL("foo/bar.txt"),
|
| + FILE_PATH_LITERAL("foo.txt"),
|
| + DownloadItem::TARGET_DISPOSITION_PROMPT,
|
| +
|
| + EXPECT_CRDOWNLOAD
|
| + },
|
| +
|
| + {
|
| + // 1: Start another Save As download. This time the suggested path should
|
| + // be in the foo/ directory.
|
| + SAVE_AS,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + "http://example.com/foo.txt", "text/plain",
|
| + FILE_PATH_LITERAL(""),
|
| +
|
| + FILE_PATH_LITERAL("bar/foo.txt"),
|
| + FILE_PATH_LITERAL("foo/foo.txt"),
|
| + DownloadItem::TARGET_DISPOSITION_PROMPT,
|
| +
|
| + EXPECT_CRDOWNLOAD
|
| + },
|
| +
|
| + {
|
| + // 2: Start an automatic download. This should be saved to the user's
|
| + // default download directory and not the last used Save As directory.
|
| + AUTOMATIC,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + "http://example.com/foo.txt", "text/plain",
|
| + FILE_PATH_LITERAL(""),
|
| +
|
| + FILE_PATH_LITERAL("foo.txt"),
|
| + FILE_PATH_LITERAL(""),
|
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
| +
|
| + EXPECT_CRDOWNLOAD
|
| + },
|
| + };
|
| +
|
| + RunTestCases(kLastSavePathTestCases, arraysize(kLastSavePathTestCases));
|
| +
|
| + // Now clear the last download path.
|
| + delegate()->ClearLastDownloadPath();
|
| +
|
| + // Run the first test case again. Since the last download path was cleared,
|
| + // this test case should behave identically to the first time it was run.
|
| + RunTestCases(kLastSavePathTestCases, 1);
|
| +}
|
| +
|
| // TODO(asanka): Add more tests.
|
| // * Default download path is not writable.
|
| // * Download path doesn't exist.
|
|
|