| Index: chrome/browser/download/download_danger_prompt_browsertest.cc
|
| diff --git a/chrome/browser/download/download_danger_prompt_browsertest.cc b/chrome/browser/download/download_danger_prompt_browsertest.cc
|
| index 9986c5d6b179ad492dcd6c9a04b10a0707d12a4f..b893f5664de71fe5adda6caeca3c4de5cd82de89 100644
|
| --- a/chrome/browser/download/download_danger_prompt_browsertest.cc
|
| +++ b/chrome/browser/download/download_danger_prompt_browsertest.cc
|
| @@ -8,7 +8,7 @@
|
| #include "build/build_config.h"
|
| #include "chrome/browser/download/download_danger_prompt.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| +#include "chrome/browser/safe_browsing/test_safe_browsing_service.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| @@ -34,53 +34,14 @@ using safe_browsing::SafeBrowsingService;
|
|
|
| const char kTestDownloadUrl[] = "http://evildownload.com";
|
|
|
| -class FakeSafeBrowsingService : public SafeBrowsingService {
|
| - public:
|
| - FakeSafeBrowsingService() {}
|
| -
|
| - void SendSerializedDownloadReport(const std::string& report) override {
|
| - report_ = report;
|
| - }
|
| -
|
| - std::string GetDownloadRecoveryReport() const { return report_; }
|
| -
|
| - protected:
|
| - ~FakeSafeBrowsingService() override {}
|
| -
|
| - private:
|
| - std::string report_;
|
| -};
|
| -
|
| -// Factory that creates FakeSafeBrowsingService instances.
|
| -class TestSafeBrowsingServiceFactory
|
| - : public safe_browsing::SafeBrowsingServiceFactory {
|
| - public:
|
| - TestSafeBrowsingServiceFactory() : fake_safe_browsing_service_(nullptr) {}
|
| - ~TestSafeBrowsingServiceFactory() override {}
|
| -
|
| - SafeBrowsingService* CreateSafeBrowsingService() override {
|
| - if (!fake_safe_browsing_service_) {
|
| - fake_safe_browsing_service_ = new FakeSafeBrowsingService();
|
| - }
|
| - return fake_safe_browsing_service_.get();
|
| - }
|
| -
|
| - scoped_refptr<FakeSafeBrowsingService> fake_safe_browsing_service() {
|
| - return fake_safe_browsing_service_;
|
| - }
|
| -
|
| - private:
|
| - scoped_refptr<FakeSafeBrowsingService> fake_safe_browsing_service_;
|
| -};
|
| -
|
| class DownloadDangerPromptTest : public InProcessBrowserTest {
|
| public:
|
| DownloadDangerPromptTest()
|
| : prompt_(nullptr),
|
| expected_action_(DownloadDangerPrompt::CANCEL),
|
| did_receive_callback_(false),
|
| - test_safe_browsing_factory_(new TestSafeBrowsingServiceFactory()),
|
| - report_sent_(false) {}
|
| + test_safe_browsing_factory_(
|
| + new safe_browsing::TestSafeBrowsingServiceFactory()) {}
|
|
|
| ~DownloadDangerPromptTest() override {}
|
|
|
| @@ -115,26 +76,31 @@ class DownloadDangerPromptTest : public InProcessBrowserTest {
|
| SetUpSafeBrowsingReportExpectations(
|
| expected_action == DownloadDangerPrompt::ACCEPT, download_verdict);
|
| CreatePrompt();
|
| - report_sent_ = false;
|
| }
|
|
|
| - void VerifyExpectations() {
|
| + void VerifyExpectations(bool should_send_report) {
|
| content::RunAllPendingInMessageLoop();
|
| // At the end of each test, we expect no more activity from the prompt. The
|
| // prompt shouldn't exist anymore either.
|
| EXPECT_TRUE(did_receive_callback_);
|
| EXPECT_FALSE(prompt_);
|
| - testing::Mock::VerifyAndClearExpectations(&download_);
|
| - if (report_sent_) {
|
| +
|
| + if (should_send_report) {
|
| EXPECT_EQ(expected_serialized_report_,
|
| - test_safe_browsing_factory_->fake_safe_browsing_service()
|
| - ->GetDownloadRecoveryReport());
|
| + test_safe_browsing_factory_->test_safe_browsing_service()
|
| + ->serilized_download_report());
|
| + } else {
|
| + EXPECT_TRUE(test_safe_browsing_factory_->test_safe_browsing_service()
|
| + ->serilized_download_report()
|
| + .empty());
|
| }
|
| + testing::Mock::VerifyAndClearExpectations(&download_);
|
| + test_safe_browsing_factory_->test_safe_browsing_service()
|
| + ->ClearDownloadReport();
|
| }
|
|
|
| void SimulatePromptAction(DownloadDangerPrompt::Action action) {
|
| prompt_->InvokeActionForTesting(action);
|
| - report_sent_ = true;
|
| }
|
|
|
| content::MockDownloadItem& download() { return download_; }
|
| @@ -181,9 +147,9 @@ class DownloadDangerPromptTest : public InProcessBrowserTest {
|
| DownloadDangerPrompt* prompt_;
|
| DownloadDangerPrompt::Action expected_action_;
|
| bool did_receive_callback_;
|
| - std::unique_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
|
| + std::unique_ptr<safe_browsing::TestSafeBrowsingServiceFactory>
|
| + test_safe_browsing_factory_;
|
| std::string expected_serialized_report_;
|
| - bool report_sent_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(DownloadDangerPromptTest);
|
| };
|
| @@ -212,45 +178,55 @@ IN_PROC_BROWSER_TEST_F(DownloadDangerPromptTest, MAYBE_TestAll) {
|
| SetUpExpectations(DownloadDangerPrompt::ACCEPT,
|
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL,
|
| ClientDownloadResponse::DANGEROUS);
|
| + EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
|
| SimulatePromptAction(DownloadDangerPrompt::ACCEPT);
|
| - VerifyExpectations();
|
| + VerifyExpectations(true);
|
|
|
| // Clicking the Cancel button should invoke the CANCEL action.
|
| SetUpExpectations(DownloadDangerPrompt::CANCEL,
|
| content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT,
|
| ClientDownloadResponse::UNCOMMON);
|
| + EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
|
| SimulatePromptAction(DownloadDangerPrompt::CANCEL);
|
| - VerifyExpectations();
|
| + VerifyExpectations(true);
|
|
|
| // If the download is no longer dangerous (because it was accepted), the
|
| // dialog should DISMISS itself.
|
| SetUpExpectations(DownloadDangerPrompt::DISMISS,
|
| content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED,
|
| ClientDownloadResponse::POTENTIALLY_UNWANTED);
|
| - EXPECT_CALL(download(), IsDangerous()).WillOnce(Return(false));
|
| + EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(false));
|
| download().NotifyObserversDownloadUpdated();
|
| - VerifyExpectations();
|
| + VerifyExpectations(false);
|
|
|
| // If the download is in a terminal state then the dialog should DISMISS
|
| // itself.
|
| SetUpExpectations(DownloadDangerPrompt::DISMISS,
|
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST,
|
| ClientDownloadResponse::DANGEROUS_HOST);
|
| - EXPECT_CALL(download(), IsDangerous()).WillOnce(Return(true));
|
| - EXPECT_CALL(download(), IsDone()).WillOnce(Return(true));
|
| + EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
|
| + EXPECT_CALL(download(), IsDone()).WillRepeatedly(Return(true));
|
| download().NotifyObserversDownloadUpdated();
|
| - VerifyExpectations();
|
| + VerifyExpectations(false);
|
|
|
| // If the download is dangerous and is not in a terminal state, don't dismiss
|
| // the dialog.
|
| SetUpExpectations(DownloadDangerPrompt::ACCEPT,
|
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT,
|
| ClientDownloadResponse::DANGEROUS);
|
| - EXPECT_CALL(download(), IsDangerous()).WillOnce(Return(true));
|
| - EXPECT_CALL(download(), IsDone()).WillOnce(Return(false));
|
| + EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
|
| + EXPECT_CALL(download(), IsDone()).WillRepeatedly(Return(false));
|
| download().NotifyObserversDownloadUpdated();
|
| + EXPECT_TRUE(prompt());
|
| + SimulatePromptAction(DownloadDangerPrompt::ACCEPT);
|
| + VerifyExpectations(true);
|
| +
|
| + // If the download is not dangerous, no report will be sent.
|
| + SetUpExpectations(DownloadDangerPrompt::ACCEPT,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + ClientDownloadResponse::SAFE);
|
| SimulatePromptAction(DownloadDangerPrompt::ACCEPT);
|
| - VerifyExpectations();
|
| + VerifyExpectations(false);
|
|
|
| // If the containing tab is closed, the dialog should DISMISS itself.
|
| OpenNewTab();
|
| @@ -258,5 +234,5 @@ IN_PROC_BROWSER_TEST_F(DownloadDangerPromptTest, MAYBE_TestAll) {
|
| content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL,
|
| ClientDownloadResponse::DANGEROUS);
|
| chrome::CloseTab(browser());
|
| - VerifyExpectations();
|
| + VerifyExpectations(false);
|
| }
|
|
|