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. |