| Index: chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| index e88dfe1b49f67bb568ae01be81ab9c81564d7ded..9ec2fca980c8eb65a603c8590a6ec405d8553fc1 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| @@ -6,6 +6,8 @@
|
| // threat urls. It then uses a real browser to go to these urls, and sends
|
| // "goback" or "proceed" commands and verifies they work.
|
|
|
| +#include <algorithm>
|
| +
|
| #include "base/bind.h"
|
| #include "base/command_line.h"
|
| #include "base/prefs/pref_service.h"
|
| @@ -59,6 +61,7 @@ namespace {
|
|
|
| const char kEmptyPage[] = "empty.html";
|
| const char kMalwarePage[] = "safe_browsing/malware.html";
|
| +const char kMalwarePage2[] = "safe_browsing/malware2.html";
|
| const char kMalwareIframe[] = "safe_browsing/malware_iframe.html";
|
| const char kUnrelatedUrl[] = "https://www.google.com";
|
|
|
| @@ -420,7 +423,7 @@ class SafeBrowsingBlockingPageBrowserTest
|
| // navigates to a page with an iframe containing the threat site, and returns
|
| // the url of the parent page.
|
| GURL SetupThreatIframeWarningAndNavigate() {
|
| - GURL url = net::URLRequestMockHTTPJob::GetMockUrl(kMalwarePage);
|
| + GURL url = net::URLRequestMockHTTPJob::GetMockUrl(kMalwarePage2);
|
| GURL iframe_url = net::URLRequestMockHTTPJob::GetMockUrl(kMalwareIframe);
|
| SetURLThreatType(iframe_url, GetParam());
|
|
|
| @@ -448,24 +451,6 @@ class SafeBrowsingBlockingPageBrowserTest
|
| interstitial_page->CommandReceived(base::IntToString(command));
|
| }
|
|
|
| - void DontProceedThroughInterstitial() {
|
| - WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage(
|
| - contents);
|
| - ASSERT_TRUE(interstitial_page);
|
| - interstitial_page->DontProceed();
|
| - }
|
| -
|
| - void ProceedThroughInterstitial() {
|
| - WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage(
|
| - contents);
|
| - ASSERT_TRUE(interstitial_page);
|
| - interstitial_page->Proceed();
|
| - }
|
| -
|
| void AssertNoInterstitial(bool wait_for_delete) {
|
| WebContents* contents =
|
| browser()->tab_strip_model()->GetActiveWebContents();
|
| @@ -756,6 +741,120 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest,
|
| ASSERT_TRUE(report.ParseFromString(serialized));
|
| // Verify the report is complete.
|
| EXPECT_TRUE(report.complete());
|
| + // Do some basic verification of report contents.
|
| + EXPECT_EQ(url.spec(), report.page_url());
|
| + EXPECT_EQ(net::URLRequestMockHTTPJob::GetMockUrl(kMalwareIframe).spec(),
|
| + report.url());
|
| + std::vector<std::string> report_urls;
|
| + for (int i = 0; i < report.resources_size(); ++i)
|
| + report_urls.push_back(report.resources(i).url());
|
| + ASSERT_EQ(3U, report_urls.size());
|
| + std::sort(report_urls.begin(), report_urls.end());
|
| + EXPECT_EQ("http://example.com/cross_site_iframe.html", report_urls[0]);
|
| + EXPECT_EQ(url.spec(), report_urls[1]);
|
| + EXPECT_EQ(net::URLRequestMockHTTPJob::GetMockUrl(kMalwareIframe).spec(),
|
| + report_urls[2]);
|
| + }
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest,
|
| + MainFrameBlockedShouldHaveNoDOMDetailsWhenDontProceed) {
|
| + const bool expect_threat_details =
|
| + SafeBrowsingBlockingPage::ShouldReportThreatDetails(GetParam());
|
| +
|
| + scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner(
|
| + new content::MessageLoopRunner);
|
| + if (expect_threat_details)
|
| + SetReportSentCallback(threat_report_sent_runner->QuitClosure());
|
| +
|
| + // Navigate to a safe page which contains multiple potential DOM details.
|
| + // (Despite the name, kMalwarePage is not the page flagged as malware in this
|
| + // test.)
|
| + GURL safe_url(net::URLRequestMockHTTPJob::GetMockUrl(kMalwarePage));
|
| + ui_test_utils::NavigateToURL(browser(), safe_url);
|
| +
|
| + EXPECT_EQ(nullptr, details_factory_.get_details());
|
| +
|
| + // Start navigation to bad page (kEmptyPage), which will be blocked before it
|
| + // is committed.
|
| + GURL url = SetupWarningAndNavigate();
|
| +
|
| + FakeThreatDetails* fake_threat_details = details_factory_.get_details();
|
| + EXPECT_EQ(expect_threat_details, fake_threat_details != nullptr);
|
| +
|
| + // Go back.
|
| + EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in"));
|
| + EXPECT_TRUE(Click("opt-in-checkbox"));
|
| + EXPECT_TRUE(ClickAndWaitForDetach("primary-button"));
|
| + AssertNoInterstitial(true); // Assert the interstitial is gone
|
| +
|
| + EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
|
| + prefs::kSafeBrowsingExtendedReportingEnabled));
|
| + EXPECT_EQ(safe_url,
|
| + browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
|
| +
|
| + if (expect_threat_details) {
|
| + threat_report_sent_runner->Run();
|
| + std::string serialized = GetReportSent();
|
| + ClientSafeBrowsingReportRequest report;
|
| + ASSERT_TRUE(report.ParseFromString(serialized));
|
| + // Verify the report is complete.
|
| + EXPECT_TRUE(report.complete());
|
| + EXPECT_EQ(url.spec(), report.page_url());
|
| + EXPECT_EQ(url.spec(), report.url());
|
| + ASSERT_EQ(1, report.resources_size());
|
| + EXPECT_EQ(url.spec(), report.resources(0).url());
|
| + }
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_P(
|
| + SafeBrowsingBlockingPageBrowserTest,
|
| + MainFrameBlockedShouldHaveNoDOMDetailsWhenProceeding) {
|
| + const bool expect_threat_details =
|
| + SafeBrowsingBlockingPage::ShouldReportThreatDetails(GetParam());
|
| +
|
| + scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner(
|
| + new content::MessageLoopRunner);
|
| + if (expect_threat_details)
|
| + SetReportSentCallback(threat_report_sent_runner->QuitClosure());
|
| +
|
| + // Navigate to a safe page which contains multiple potential DOM details.
|
| + // (Despite the name, kMalwarePage is not the page flagged as malware in this
|
| + // test.)
|
| + ui_test_utils::NavigateToURL(
|
| + browser(), net::URLRequestMockHTTPJob::GetMockUrl(kMalwarePage));
|
| +
|
| + EXPECT_EQ(nullptr, details_factory_.get_details());
|
| +
|
| + // Start navigation to bad page (kEmptyPage), which will be blocked before it
|
| + // is committed.
|
| + GURL url = SetupWarningAndNavigate();
|
| +
|
| + FakeThreatDetails* fake_threat_details = details_factory_.get_details();
|
| + EXPECT_EQ(expect_threat_details, fake_threat_details != nullptr);
|
| +
|
| + // Proceed through the warning.
|
| + EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in"));
|
| + EXPECT_TRUE(Click("opt-in-checkbox"));
|
| + EXPECT_TRUE(ClickAndWaitForDetach("proceed-link"));
|
| + AssertNoInterstitial(true); // Assert the interstitial is gone
|
| +
|
| + EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
|
| + prefs::kSafeBrowsingExtendedReportingEnabled));
|
| + EXPECT_EQ(url,
|
| + browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
|
| +
|
| + if (expect_threat_details) {
|
| + threat_report_sent_runner->Run();
|
| + std::string serialized = GetReportSent();
|
| + ClientSafeBrowsingReportRequest report;
|
| + ASSERT_TRUE(report.ParseFromString(serialized));
|
| + // Verify the report is complete.
|
| + EXPECT_TRUE(report.complete());
|
| + EXPECT_EQ(url.spec(), report.page_url());
|
| + EXPECT_EQ(url.spec(), report.url());
|
| + ASSERT_EQ(1, report.resources_size());
|
| + EXPECT_EQ(url.spec(), report.resources(0).url());
|
| }
|
| }
|
|
|
|
|