| 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) {
|
|
|