Index: chrome/browser/download/download_request_limiter_unittest.cc |
diff --git a/chrome/browser/download/download_request_limiter_unittest.cc b/chrome/browser/download/download_request_limiter_unittest.cc |
index fafb6139a735323d57d38e45104c07e95dbc6049..a8d9907e1fe644151ef2ae344bd29422aadf9df9 100644 |
--- a/chrome/browser/download/download_request_limiter_unittest.cc |
+++ b/chrome/browser/download/download_request_limiter_unittest.cc |
@@ -10,7 +10,10 @@ |
#include "build/build_config.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
+#include "chrome/browser/download/download_permission_request.h" |
+#include "chrome/browser/permissions/permission_request_manager.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
@@ -27,9 +30,6 @@ |
#include "chrome/browser/download/download_request_infobar_delegate_android.h" |
#include "chrome/browser/infobars/infobar_service.h" |
#else |
-#include "chrome/browser/download/download_permission_request.h" |
-#include "chrome/browser/permissions/permission_request_manager.h" |
-#include "chrome/browser/ui/permission_bubble/mock_permission_prompt_factory.h" |
#endif |
using content::WebContents; |
@@ -40,119 +40,45 @@ enum TestingAction { |
CANCEL, |
WAIT |
}; |
- |
-#if defined(OS_ANDROID) |
-class TestingDelegate { |
- public: |
- void SetUp(WebContents* web_contents) { |
- InfoBarService::CreateForWebContents(web_contents); |
- fake_create_callback_ = |
- base::Bind(&TestingDelegate::FakeCreate, base::Unretained(this)); |
- DownloadRequestInfoBarDelegateAndroid::SetCallbackForTesting( |
- &fake_create_callback_); |
- ResetCounts(); |
- } |
- |
- void TearDown() { UnsetInfobarDelegate(); } |
- |
- void LoadCompleted(WebContents* /*web_contents*/) { |
- // No action needed on OS_ANDROID. |
- } |
- |
- void ResetCounts() { ask_allow_count_ = 0; } |
- |
- int AllowCount() { return ask_allow_count_; } |
- |
- void UpdateExpectations(TestingAction action) { testing_action_ = action; } |
- |
- void FakeCreate( |
- InfoBarService* infobar_service, |
- base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host) { |
- ask_allow_count_++; |
- switch (testing_action_) { |
- case ACCEPT: |
- host->Accept(); |
- break; |
- case CANCEL: |
- host->Cancel(); |
- break; |
- case WAIT: |
- break; |
- } |
- } |
- |
- void UnsetInfobarDelegate() { |
- DownloadRequestInfoBarDelegateAndroid::SetCallbackForTesting(nullptr); |
- } |
- |
- private: |
- // Number of times ShouldAllowDownload was invoked. |
- int ask_allow_count_; |
- |
- // The action that FakeCreate() should take. |
- TestingAction testing_action_; |
- |
- DownloadRequestInfoBarDelegateAndroid::FakeCreateCallback |
- fake_create_callback_; |
-}; |
-#else |
-class TestingDelegate { |
- public: |
- void SetUp(WebContents* web_contents) { |
- PermissionRequestManager::CreateForWebContents(web_contents); |
- mock_permission_prompt_factory_.reset(new MockPermissionPromptFactory( |
- PermissionRequestManager::FromWebContents(web_contents))); |
- PermissionRequestManager::FromWebContents(web_contents) |
- ->DisplayPendingRequests(); |
- } |
- |
- void TearDown() { mock_permission_prompt_factory_.reset(); } |
- |
- void LoadCompleted(WebContents* web_contents) { |
- mock_permission_prompt_factory_->DocumentOnLoadCompletedInMainFrame(); |
- } |
- |
- void ResetCounts() { mock_permission_prompt_factory_->ResetCounts(); } |
- |
- int AllowCount() { return mock_permission_prompt_factory_->show_count(); } |
- |
- void UpdateExpectations(TestingAction action) { |
- // Set expectations for PermissionRequestManager. |
- PermissionRequestManager::AutoResponseType response_type = |
- PermissionRequestManager::DISMISS; |
- switch (action) { |
- case ACCEPT: |
- response_type = PermissionRequestManager::ACCEPT_ALL; |
- break; |
- case CANCEL: |
- response_type = PermissionRequestManager::DENY_ALL; |
- break; |
- case WAIT: |
- response_type = PermissionRequestManager::NONE; |
- break; |
- } |
- mock_permission_prompt_factory_->set_response_type(response_type); |
- } |
- |
- private: |
- std::unique_ptr<MockPermissionPromptFactory> mock_permission_prompt_factory_; |
-}; |
-#endif |
} // namespace |
class DownloadRequestLimiterTest : public ChromeRenderViewHostTestHarness { |
public: |
void SetUp() override { |
ChromeRenderViewHostTestHarness::SetUp(); |
- testing_delegate_.SetUp(web_contents()); |
+ |
+ use_permission_request_manager_ = PermissionRequestManager::IsEnabled(); |
+ |
+ if (use_permission_request_manager_) { |
+ PermissionRequestManager::CreateForWebContents(web_contents()); |
+ PermissionRequestManager* manager = |
+ PermissionRequestManager::FromWebContents(web_contents()); |
+ mock_permission_prompt_factory_.reset( |
+ new MockPermissionPromptFactory(manager)); |
+ manager->DisplayPendingRequests(); |
+ } else { |
+#if defined(OS_ANDROID) |
+ InfoBarService::CreateForWebContents(web_contents()); |
+ fake_create_callback_ = base::Bind( |
+ &DownloadRequestLimiterTest::FakeCreate, base::Unretained(this)); |
+ DownloadRequestInfoBarDelegateAndroid::SetCallbackForTesting( |
+ &fake_create_callback_); |
+#endif |
+ } |
UpdateExpectations(ACCEPT); |
- cancel_count_ = continue_count_ = 0; |
+ ask_allow_count_ = cancel_count_ = continue_count_ = 0; |
download_request_limiter_ = new DownloadRequestLimiter(); |
} |
void TearDown() override { |
- testing_delegate_.TearDown(); |
+ if (use_permission_request_manager_) { |
+ mock_permission_prompt_factory_.reset(); |
+ } else { |
+#if defined(OS_ANDROID) |
+ UnsetInfobarDelegate(); |
+#endif |
+ } |
ChromeRenderViewHostTestHarness::TearDown(); |
} |
@@ -192,7 +118,10 @@ class DownloadRequestLimiterTest : public ChromeRenderViewHostTestHarness { |
EXPECT_EQ(expect_cancels, cancel_count_) << "line " << line; |
EXPECT_EQ(expect_asks, AskAllowCount()) << "line " << line; |
continue_count_ = cancel_count_ = 0; |
- testing_delegate_.ResetCounts(); |
+ if (use_permission_request_manager_) |
+ mock_permission_prompt_factory_->ResetCounts(); |
+ else |
+ ask_allow_count_ = 0; |
} |
void UpdateContentSettings(WebContents* web_contents, |
@@ -219,14 +148,62 @@ class DownloadRequestLimiterTest : public ChromeRenderViewHostTestHarness { |
CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, std::string(), setting); |
} |
- void LoadCompleted() { testing_delegate_.LoadCompleted(web_contents()); } |
+ void LoadCompleted() { |
+ if (use_permission_request_manager_) |
+ mock_permission_prompt_factory_->DocumentOnLoadCompletedInMainFrame(); |
+ } |
- int AskAllowCount() { return testing_delegate_.AllowCount(); } |
+ int AskAllowCount() { |
+ if (use_permission_request_manager_) |
+ return mock_permission_prompt_factory_->show_count(); |
+ return ask_allow_count_; |
+ } |
void UpdateExpectations(TestingAction action) { |
- testing_delegate_.UpdateExpectations(action); |
+ if (use_permission_request_manager_) { |
+ // Set expectations for PermissionRequestManager. |
+ PermissionRequestManager::AutoResponseType response_type = |
+ PermissionRequestManager::DISMISS; |
+ switch (action) { |
+ case ACCEPT: |
+ response_type = PermissionRequestManager::ACCEPT_ALL; |
+ break; |
+ case CANCEL: |
+ response_type = PermissionRequestManager::DENY_ALL; |
+ break; |
+ case WAIT: |
+ response_type = PermissionRequestManager::NONE; |
+ break; |
+ } |
+ mock_permission_prompt_factory_->set_response_type(response_type); |
+ } else { |
+ testing_action_ = action; |
+ } |
} |
+#if defined(OS_ANDROID) |
+ void FakeCreate( |
+ InfoBarService* infobar_service, |
+ base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host) { |
+ ask_allow_count_++; |
+ switch (testing_action_) { |
+ case ACCEPT: |
+ host->Accept(); |
+ break; |
+ case CANCEL: |
+ host->Cancel(); |
+ break; |
+ case WAIT: |
+ break; |
+ } |
+ } |
+ |
+ void UnsetInfobarDelegate() { |
+ if (!use_permission_request_manager_) |
+ DownloadRequestInfoBarDelegateAndroid::SetCallbackForTesting(nullptr); |
+ } |
+#endif |
+ |
scoped_refptr<DownloadRequestLimiter> download_request_limiter_; |
// Number of times ContinueDownload was invoked. |
@@ -235,7 +212,20 @@ class DownloadRequestLimiterTest : public ChromeRenderViewHostTestHarness { |
// Number of times CancelDownload was invoked. |
int cancel_count_; |
- TestingDelegate testing_delegate_; |
+ std::unique_ptr<MockPermissionPromptFactory> mock_permission_prompt_factory_; |
+ |
+ // TODO(timloh): Remove the members below here after crbug.com/606138 is done. |
+ |
+ bool use_permission_request_manager_; |
+ |
+ // Number of times ShouldAllowDownload was invoked. |
+ int ask_allow_count_; |
+ // The action that FakeCreate() should take. |
+ TestingAction testing_action_; |
+#if defined(OS_ANDROID) |
+ DownloadRequestInfoBarDelegateAndroid::FakeCreateCallback |
+ fake_create_callback_; |
+#endif |
}; |
TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_Allow) { |
@@ -571,7 +561,6 @@ TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_ResetOnReload) { |
download_request_limiter_->GetDownloadStatus(web_contents())); |
} |
-#if defined(OS_ANDROID) |
TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_RawWebContents) { |
std::unique_ptr<WebContents> web_contents(CreateTestWebContents()); |
@@ -579,13 +568,12 @@ TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_RawWebContents) { |
web_contents->GetController().LoadURL( |
url, content::Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
- // DownloadRequestLimiter won't try to make a permission bubble if there's |
- // no permission bubble manager, so don't put one on the test WebContents. |
- |
- // DownloadRequestLimiter won't try to make an infobar if it doesn't have an |
- // InfoBarService, and we want to test that it will Cancel() instead of |
- // prompting when it doesn't have a InfoBarService, so unset the delegate. |
- testing_delegate_.UnsetInfobarDelegate(); |
+// DownloadRequestLimiter won't try to make a permission request or infobar |
+// if there is no PermissionRequestManager/InfoBarService, and we want to |
+// test that it will Cancel() instead of prompting. |
+#if defined(OS_ANDROID) |
+ UnsetInfobarDelegate(); |
+#endif |
ExpectAndResetCounts(0, 0, 0, __LINE__); |
EXPECT_EQ(DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD, |
download_request_limiter_->GetDownloadStatus(web_contents.get())); |
@@ -613,7 +601,6 @@ TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_RawWebContents) { |
EXPECT_EQ(DownloadRequestLimiter::PROMPT_BEFORE_DOWNLOAD, |
download_request_limiter_->GetDownloadStatus(web_contents.get())); |
} |
-#endif |
TEST_F(DownloadRequestLimiterTest, |
DownloadRequestLimiter_SetHostContentSetting) { |