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 53812ab44cd80554c8380d329f82789700d6c961..43e593b4705d7afdd145eb646937c20a38b99392 100644 |
| --- a/chrome/browser/download/download_target_determiner_unittest.cc |
| +++ b/chrome/browser/download/download_target_determiner_unittest.cc |
| @@ -47,6 +47,13 @@ |
| #include "extensions/common/extension.h" |
| #endif |
| +#if defined(OS_ANDROID) |
| +#include "content/public/browser/android/download_controller_android.h" |
| +#include "content/public/common/context_menu_params.h" |
| +using content::WebContents; |
| +using content::ContextMenuParams; |
| +#endif |
| + |
| using ::testing::AnyNumber; |
| using ::testing::Invoke; |
| using ::testing::Ref; |
| @@ -67,6 +74,46 @@ class NullWebContentsDelegate : public content::WebContentsDelegate { |
| ~NullWebContentsDelegate() override {} |
| }; |
| +#if defined(OS_ANDROID) |
| +class MockDownloadControllerAndroid |
| + : public content::DownloadControllerAndroid { |
| + public: |
| + MockDownloadControllerAndroid() |
| + : require_user_permission_prompt_(false), |
| + approve_user_request_(true) {} |
| + ~MockDownloadControllerAndroid() override {} |
| + |
| + void CreateGETDownload(int render_process_id, int render_view_id, |
| + int request_id) override {}; |
| + void OnDownloadStarted(DownloadItem* download_item) override {}; |
| + void StartContextMenuDownload( |
| + const ContextMenuParams& params, WebContents* web_contents, |
| + bool is_link, const std::string& extra_headers) override {}; |
| + void DangerousDownloadValidated( |
| + WebContents* web_contents, int download_id, bool accept) override {}; |
| + bool RequireUserPermissionPrompt(WebContents* web_contents) override { |
| + return require_user_permission_prompt_; |
| + } |
| + void PromptUserForPermission( |
| + WebContents* web_contents, |
| + const UserPermissionPromptCallback& callback) override { |
| + ASSERT_TRUE(require_user_permission_prompt_); |
| + base::ThreadTaskRunnerHandle::Get()->PostTask( |
| + FROM_HERE, base::Bind(callback, approve_user_request_)); |
| + } |
| + |
| + void set_require_user_permission_prompt(bool require_user_permission_prompt) { |
| + require_user_permission_prompt_ = require_user_permission_prompt; |
| + } |
| + void set_approve_user_request(bool approve_user_request) { |
| + approve_user_request_ = approve_user_request; |
| + } |
| + private: |
| + bool require_user_permission_prompt_; |
| + bool approve_user_request_; |
| +}; |
| +#endif |
| + |
| // 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 |
| @@ -257,12 +304,21 @@ class DownloadTargetDeterminerTest : public ChromeRenderViewHostTestHarness { |
| return download_prefs_.get(); |
| } |
| + #if defined(OS_ANDROID) |
| + MockDownloadControllerAndroid* download_controller() { |
| + return &download_controller_; |
| + } |
| + #endif |
| + |
| private: |
| scoped_ptr<DownloadPrefs> download_prefs_; |
| ::testing::NiceMock<MockDownloadTargetDeterminerDelegate> delegate_; |
| NullWebContentsDelegate web_contents_delegate_; |
| base::ScopedTempDir test_download_dir_; |
| base::FilePath test_virtual_dir_; |
| +#if defined(OS_ANDROID) |
| + MockDownloadControllerAndroid download_controller_; |
| +#endif |
| }; |
| void DownloadTargetDeterminerTest::SetUp() { |
| @@ -274,6 +330,10 @@ void DownloadTargetDeterminerTest::SetUp() { |
| test_virtual_dir_ = test_download_dir().Append(FILE_PATH_LITERAL("virtual")); |
| download_prefs_->SetDownloadPath(test_download_dir()); |
| delegate_.SetupDefaults(); |
| +#if defined(OS_ANDROID) |
| + DownloadTargetDeterminer::SetDownloadControllerAndroidForTestings( |
| + &download_controller_); |
|
asanka
2015/07/06 21:09:41
You are setting a global pointer to a temporary va
qinmin
2015/07/07 00:54:22
Done.
|
| +#endif |
| } |
| void DownloadTargetDeterminerTest::TearDown() { |
| @@ -1154,6 +1214,51 @@ TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways) { |
| arraysize(kPromptingTestCases)); |
| } |
| +#if defined(OS_ANDROID) |
| +TEST_F(DownloadTargetDeterminerTest, |
| + TargetDeterminer_ApprovePromptForUserPermission) { |
| + const DownloadTestCase kUserPermissionTestCases[] = { |
| + { |
| + // 0: Automatic Safe |
| + AUTOMATIC, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + "http://example.com/foo.txt", "text/plain", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL("foo.txt"), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_CRDOWNLOAD |
| + }, |
| + }; |
| + download_controller()->set_require_user_permission_prompt(true); |
| + RunTestCasesWithActiveItem(kUserPermissionTestCases, |
| + arraysize(kUserPermissionTestCases)); |
| +} |
| + |
| +TEST_F(DownloadTargetDeterminerTest, |
| + TargetDeterminer_DisapprovePromptForUserPermission) { |
| + const DownloadTestCase kUserPermissionTestCases[] = { |
| + { |
| + // 0: Automatic Safe |
| + AUTOMATIC, |
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, |
| + "http://example.com/foo.txt", "text/plain", |
| + FILE_PATH_LITERAL(""), |
| + |
| + FILE_PATH_LITERAL(""), |
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| + |
| + EXPECT_LOCAL_PATH |
| + }, |
| + }; |
| + download_controller()->set_require_user_permission_prompt(true); |
| + download_controller()->set_approve_user_request(false); |
| + RunTestCasesWithActiveItem(kUserPermissionTestCases, |
| + arraysize(kUserPermissionTestCases)); |
| +} |
| +#endif |
| + |
| #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. |