| Index: chrome/browser/download/download_browsertest.cc
|
| diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
|
| index 8f986f89a34fe835cbfae63b098d1117774ccf76..316d7e72ef54acf45732a2d6e34580fa604db7a2 100644
|
| --- a/chrome/browser/download/download_browsertest.cc
|
| +++ b/chrome/browser/download/download_browsertest.cc
|
| @@ -47,9 +47,6 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
|
| -#include "chrome/browser/safe_browsing/download_feedback_service.h"
|
| -#include "chrome/browser/safe_browsing/download_protection_service.h"
|
| -#include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/browser_finder.h"
|
| @@ -95,6 +92,13 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| +#if defined(FULL_SAFE_BROWSING)
|
| +#include "chrome/browser/safe_browsing/download_feedback_service.h"
|
| +#include "chrome/browser/safe_browsing/download_protection_service.h"
|
| +#include "chrome/browser/safe_browsing/safe_browsing_database.h"
|
| +#include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| +#endif
|
| +
|
| using content::BrowserContext;
|
| using content::BrowserThread;
|
| using content::DownloadItem;
|
| @@ -572,11 +576,10 @@ class DownloadTest : public InProcessBrowserTest {
|
| Browser* browser,
|
| int num_downloads,
|
| content::DownloadTestObserver::DangerousDownloadAction
|
| - dangerous_download_action) {
|
| + dangerous_download_action) {
|
| DownloadManager* download_manager = DownloadManagerForBrowser(browser);
|
| return new content::DownloadTestObserverTerminal(
|
| - download_manager, num_downloads,
|
| - dangerous_download_action);
|
| + download_manager, num_downloads, dangerous_download_action);
|
| }
|
|
|
| void CheckDownloadStatesForBrowser(Browser* browser,
|
| @@ -1914,6 +1917,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, PRE_DownloadTest_History) {
|
| }
|
|
|
| #if defined(OS_CHROMEOS)
|
| +// Times out on ChromeOS: http://crbug.com/217810
|
| #define MAYBE_DownloadTest_History DISABLED_DownloadTest_History
|
| #else
|
| #define MAYBE_DownloadTest_History DownloadTest_History
|
| @@ -3343,6 +3347,143 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadTest_GZipWithNoContent) {
|
| }
|
|
|
| #if defined(FULL_SAFE_BROWSING)
|
| +
|
| +// The following two tests are only meaningful on OS_WIN since that's the only
|
| +// platform where client download checks are currently performed.
|
| +// TODO(asanka): Relax this restriction as other platforms are added.
|
| +#if defined(OS_WIN)
|
| +namespace {
|
| +
|
| +// This is a custom DownloadTestObserver for
|
| +// DangerousFileWithSBDisabledBeforeCompletion test that disables the
|
| +// SafeBrowsing service when a single download is IN_PROGRESS and has a target
|
| +// path assigned. DownloadItemImpl is expected to call MaybeCompleteDownload
|
| +// soon afterwards and we want to disable the service before then.
|
| +class DisableSafeBrowsingOnInProgressDownload
|
| + : public content::DownloadTestObserver {
|
| + public:
|
| + explicit DisableSafeBrowsingOnInProgressDownload(Browser* browser)
|
| + : DownloadTestObserver(DownloadManagerForBrowser(browser),
|
| + 1,
|
| + ON_DANGEROUS_DOWNLOAD_QUIT),
|
| + browser_(browser),
|
| + final_state_seen_(false) {
|
| + Init();
|
| + }
|
| + virtual ~DisableSafeBrowsingOnInProgressDownload() {}
|
| +
|
| + virtual bool IsDownloadInFinalState(DownloadItem* download) OVERRIDE {
|
| + if (download->GetState() != DownloadItem::IN_PROGRESS ||
|
| + download->GetTargetFilePath().empty())
|
| + return false;
|
| +
|
| + if (final_state_seen_)
|
| + return true;
|
| +
|
| + final_state_seen_ = true;
|
| + browser_->profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
|
| + false);
|
| + EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT,
|
| + download->GetDangerType());
|
| + EXPECT_FALSE(download->IsDangerous());
|
| + EXPECT_TRUE(DownloadItemModel(download).IsDangerousFileBasedOnType());
|
| + return true;
|
| + }
|
| +
|
| + private:
|
| + Browser* browser_;
|
| + bool final_state_seen_;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest,
|
| + DangerousFileWithSBDisabledBeforeCompletion) {
|
| + browser()->profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
|
| + true);
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL download_url(
|
| + test_server()->GetURL("files/downloads/dangerous/dangerous.exe"));
|
| + scoped_ptr<content::DownloadTestObserver> dangerous_observer(
|
| + DangerousDownloadWaiter(
|
| + browser(),
|
| + 1,
|
| + content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
|
| + scoped_ptr<content::DownloadTestObserver> in_progress_observer(
|
| + new DisableSafeBrowsingOnInProgressDownload(browser()));
|
| + ui_test_utils::NavigateToURLWithDisposition(browser(),
|
| + download_url,
|
| + NEW_BACKGROUND_TAB,
|
| + ui_test_utils::BROWSER_TEST_NONE);
|
| + in_progress_observer->WaitForFinished();
|
| +
|
| + // SafeBrowsing should have been disabled by our observer.
|
| + ASSERT_FALSE(browser()->profile()->GetPrefs()->GetBoolean(
|
| + prefs::kSafeBrowsingEnabled));
|
| +
|
| + std::vector<DownloadItem*> downloads;
|
| + DownloadManagerForBrowser(browser())->GetAllDownloads(&downloads);
|
| + ASSERT_EQ(1u, downloads.size());
|
| + DownloadItem* download = downloads[0];
|
| +
|
| + dangerous_observer->WaitForFinished();
|
| +
|
| + EXPECT_TRUE(download->IsDangerous());
|
| + EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE,
|
| + download->GetDangerType());
|
| + download->Cancel(true);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest, DangerousFileWithSBDisabledBeforeStart) {
|
| + // Disable SafeBrowsing
|
| + browser()->profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
|
| + false);
|
| +
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL download_url(
|
| + test_server()->GetURL("files/downloads/dangerous/dangerous.exe"));
|
| + scoped_ptr<content::DownloadTestObserver> dangerous_observer(
|
| + DangerousDownloadWaiter(
|
| + browser(),
|
| + 1,
|
| + content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
|
| + ui_test_utils::NavigateToURLWithDisposition(browser(),
|
| + download_url,
|
| + NEW_BACKGROUND_TAB,
|
| + ui_test_utils::BROWSER_TEST_NONE);
|
| + dangerous_observer->WaitForFinished();
|
| +
|
| + std::vector<DownloadItem*> downloads;
|
| + DownloadManagerForBrowser(browser())->GetAllDownloads(&downloads);
|
| + ASSERT_EQ(1u, downloads.size());
|
| +
|
| + DownloadItem* download = downloads[0];
|
| + EXPECT_TRUE(download->IsDangerous());
|
| + EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE,
|
| + download->GetDangerType());
|
| +
|
| + download->Cancel(true);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest, SafeSupportedFile) {
|
| + ASSERT_TRUE(test_server()->Start());
|
| + GURL download_url(test_server()->GetURL("files/downloads/a_zip_file.zip"));
|
| + DownloadAndWait(browser(), download_url);
|
| +
|
| + std::vector<DownloadItem*> downloads;
|
| + DownloadManagerForBrowser(browser())->GetAllDownloads(&downloads);
|
| + ASSERT_EQ(1u, downloads.size());
|
| +
|
| + DownloadItem* download = downloads[0];
|
| + EXPECT_FALSE(download->IsDangerous());
|
| + EXPECT_EQ(content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT,
|
| + download->GetDangerType());
|
| +
|
| + download->Cancel(true);
|
| +}
|
| +
|
| +#endif // OS_WIN
|
| +
|
| IN_PROC_BROWSER_TEST_F(DownloadTest, FeedbackService) {
|
| // Make a dangerous file.
|
| base::FilePath file(FILE_PATH_LITERAL("downloads/dangerous/dangerous.swf"));
|
|
|