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 cfbc90427bca1257770040557be3e8c792b5bb6b..7360388398399b9c5e8eef8058328b0589b4c492 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
@@ -160,9 +160,13 @@ class FakeSafeBrowsingDatabaseManager : public TestSafeBrowsingDatabaseManager { |
class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { |
public: |
FakeSafeBrowsingUIManager() |
- : TestSafeBrowsingUIManager(), threat_details_done_(false) {} |
+ : TestSafeBrowsingUIManager(), |
+ threat_details_done_(false), |
+ hit_report_sent_(false) {} |
explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) |
- : TestSafeBrowsingUIManager(service), threat_details_done_(false) {} |
+ : TestSafeBrowsingUIManager(service), |
+ threat_details_done_(false), |
+ hit_report_sent_(false) {} |
// Overrides SafeBrowsingUIManager |
void SendSerializedThreatDetails(const std::string& serialized) override { |
@@ -188,6 +192,15 @@ class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { |
threat_details_done_ = true; |
} |
+ void MaybeReportSafeBrowsingHit(const HitReport& hit_report, |
+ WebContents* web_contents) override { |
+ if (SafeBrowsingUIManager::ShouldSendHitReport(hit_report, web_contents)) { |
+ hit_report_sent_ = true; |
+ } |
+ } |
+ |
+ bool hit_report_sent() { return hit_report_sent_; } |
+ |
void set_threat_details_done_callback(const base::Closure& callback) { |
EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
EXPECT_TRUE(threat_details_done_callback_.is_null()); |
@@ -206,6 +219,7 @@ class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { |
std::string report_; |
base::Closure threat_details_done_callback_; |
bool threat_details_done_; |
+ bool hit_report_sent_; |
DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingUIManager); |
}; |
@@ -379,10 +393,10 @@ class SafeBrowsingBlockingPageBrowserTest |
->ClearBadURL(url); |
} |
- // The basic version of this method, which uses a HTTP test URL. |
- GURL SetupWarningAndNavigate() { |
+ // The basic version of this method, which uses an HTTP test URL. |
+ GURL SetupWarningAndNavigate(Browser* browser) { |
return SetupWarningAndNavigateToURL( |
- net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage)); |
+ net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage), browser); |
} |
// Navigates to a warning on a valid HTTPS website. |
@@ -395,7 +409,7 @@ class SafeBrowsingBlockingPageBrowserTest |
verify_result.cert_status = 0; |
mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK); |
GURL url = https_server_.GetURL(kHTTPSPage); |
- return SetupWarningAndNavigateToURL(url); |
+ return SetupWarningAndNavigateToURL(url, browser()); |
} |
// Navigates through an HTTPS interstitial, then opens up a SB warning on that |
@@ -407,7 +421,7 @@ class SafeBrowsingBlockingPageBrowserTest |
// Proceed through the HTTPS interstitial. |
ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_TRUE(WaitForReady()); |
+ EXPECT_TRUE(WaitForReady(browser())); |
InterstitialPage* https_warning = browser() |
->tab_strip_model() |
->GetActiveWebContents() |
@@ -418,7 +432,7 @@ class SafeBrowsingBlockingPageBrowserTest |
content::WaitForInterstitialDetach( |
browser()->tab_strip_model()->GetActiveWebContents()); |
- return SetupWarningAndNavigateToURL(url); |
+ return SetupWarningAndNavigateToURL(url, browser()); |
} |
// Adds a safebrowsing threat results to the fake safebrowsing service, |
@@ -430,7 +444,7 @@ class SafeBrowsingBlockingPageBrowserTest |
SetURLThreatType(iframe_url, testing::get<0>(GetParam())); |
ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_TRUE(WaitForReady()); |
+ EXPECT_TRUE(WaitForReady(browser())); |
return url; |
} |
@@ -451,7 +465,7 @@ class SafeBrowsingBlockingPageBrowserTest |
SetURLThreatType(*iframe_url, testing::get<0>(GetParam())); |
ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_TRUE(WaitForReady()); |
+ EXPECT_TRUE(WaitForReady(browser())); |
return url; |
} |
@@ -550,9 +564,9 @@ class SafeBrowsingBlockingPageBrowserTest |
return interstitial->GetMainFrame(); |
} |
- bool WaitForReady() { |
+ bool WaitForReady(Browser* browser) { |
InterstitialPage* interstitial = InterstitialPage::GetInterstitialPage( |
- browser()->tab_strip_model()->GetActiveWebContents()); |
+ browser->tab_strip_model()->GetActiveWebContents()); |
if (!interstitial) |
return false; |
return content::WaitForRenderFrameReady(interstitial->GetMainFrame()); |
@@ -619,7 +633,7 @@ class SafeBrowsingBlockingPageBrowserTest |
void TestReportingDisabledAndDontProceed(const GURL& url) { |
SetURLThreatType(url, testing::get<0>(GetParam())); |
ui_test_utils::NavigateToURL(browser(), url); |
- ASSERT_TRUE(WaitForReady()); |
+ ASSERT_TRUE(WaitForReady(browser())); |
EXPECT_EQ(HIDDEN, GetVisibility("extended-reporting-opt-in")); |
EXPECT_EQ(HIDDEN, GetVisibility("opt-in-checkbox")); |
@@ -698,6 +712,12 @@ class SafeBrowsingBlockingPageBrowserTest |
security_info.malicious_content_status); |
} |
+ bool hit_report_sent() { |
+ return static_cast<FakeSafeBrowsingUIManager*>( |
+ factory_.test_safe_browsing_service()->ui_manager().get()) |
+ ->hit_report_sent(); |
+ } |
+ |
protected: |
TestThreatDetailsFactory details_factory_; |
@@ -705,10 +725,10 @@ class SafeBrowsingBlockingPageBrowserTest |
// Adds a safebrowsing result of the current test threat to the fake |
// safebrowsing service, navigates to that page, and returns the url. |
// The various wrappers supply different URLs. |
- GURL SetupWarningAndNavigateToURL(GURL url) { |
+ GURL SetupWarningAndNavigateToURL(GURL url, Browser* browser) { |
SetURLThreatType(url, testing::get<0>(GetParam())); |
- ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_TRUE(WaitForReady()); |
+ ui_test_utils::NavigateToURL(browser, url); |
+ EXPECT_TRUE(WaitForReady(browser)); |
return url; |
} |
@@ -744,7 +764,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, RedirectCanceled) { |
} |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, DontProceed) { |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); |
EXPECT_EQ(HIDDEN, GetVisibility("details")); |
@@ -762,7 +782,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, DontProceed) { |
} |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, Proceed) { |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
AssertNoInterstitial(true); // Assert the interstitial is gone. |
@@ -908,7 +928,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
// Start navigation to bad page (kEmptyPage), which will be blocked before it |
// is committed. |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
ThreatDetails* threat_details = details_factory_.get_details(); |
EXPECT_EQ(expect_threat_details, threat_details != nullptr); |
@@ -959,7 +979,7 @@ IN_PROC_BROWSER_TEST_P( |
// Start navigation to bad page (kEmptyPage), which will be blocked before it |
// is committed. |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
ThreatDetails* threat_details = details_factory_.get_details(); |
EXPECT_EQ(expect_threat_details, threat_details != nullptr); |
@@ -996,7 +1016,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, ProceedDisabled) { |
browser()->profile()->GetPrefs()->SetBoolean( |
prefs::kSafeBrowsingProceedAnywayDisabled, true); |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); |
EXPECT_EQ(HIDDEN, GetVisibility("details")); |
@@ -1031,7 +1051,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
ReloadWhileInterstitialShowing) { |
// Start navigation to bad page (kEmptyPage), which will be blocked before it |
// is committed. |
- const GURL url = SetupWarningAndNavigate(); |
+ const GURL url = SetupWarningAndNavigate(browser()); |
// Checkbox should be showing. |
EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
@@ -1049,7 +1069,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); |
// "Reload" the tab. |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
// Checkbox should be showing. |
EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
@@ -1066,7 +1086,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
} |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, LearnMore) { |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
EXPECT_TRUE(ClickAndWaitForDetach("learn-more-link")); |
AssertNoInterstitial(false); // Assert the interstitial is gone |
@@ -1104,7 +1124,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
histograms.ExpectTotalCount(interaction_histogram, 0); |
// After navigating to the page, the totals should be set. |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
histograms.ExpectTotalCount(decision_histogram, 1); |
histograms.ExpectBucketCount(decision_histogram, |
security_interstitials::MetricsHelper::SHOW, 1); |
@@ -1148,7 +1168,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
histograms.ExpectTotalCount(interaction_histogram, 0); |
// After navigating to the page, the totals should be set. |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
histograms.ExpectTotalCount(decision_histogram, 1); |
histograms.ExpectBucketCount(decision_histogram, |
security_interstitials::MetricsHelper::SHOW, 1); |
@@ -1170,7 +1190,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
} |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistRevisit) { |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
AssertNoInterstitial(true); // Assert the interstitial is gone. |
@@ -1205,7 +1225,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
} |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistUnsaved) { |
- GURL url = SetupWarningAndNavigate(); |
+ GURL url = SetupWarningAndNavigate(browser()); |
// Navigate without making a decision. |
ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); |
@@ -1213,11 +1233,69 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistUnsaved) { |
// The non-whitelisted page should now show an interstitial. |
ui_test_utils::NavigateToURL(browser(), url); |
- EXPECT_TRUE(WaitForReady()); |
+ EXPECT_TRUE(WaitForReady(browser())); |
EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
AssertNoInterstitial(true); |
} |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
+ VerifyHitReportSentOnSBERAndNotIncognito) { |
+ // The extended reporting opt-in is presented in the interstitial for malware, |
+ // phishing, and UwS threats. |
+ const bool expect_threat_details = |
+ SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
+ testing::get<0>(GetParam())); |
+ |
+ scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
+ new content::MessageLoopRunner); |
+ if (expect_threat_details) |
+ SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
+ |
+ browser()->profile()->GetPrefs()->SetBoolean( |
+ prefs::kSafeBrowsingExtendedReportingEnabled, true); // set up SBER |
+ GURL url = SetupWarningAndNavigate(browser()); // not incognito |
+ EXPECT_TRUE(hit_report_sent()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
+ VerifyHitReportNotSentOnIncognito) { |
+ // The extended reporting opt-in is presented in the interstitial for malware, |
+ // phishing, and UwS threats. |
+ const bool expect_threat_details = |
+ SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
+ testing::get<0>(GetParam())); |
+ |
+ scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
+ new content::MessageLoopRunner); |
+ if (expect_threat_details) |
+ SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
+ |
+ Browser* incognito_browser = CreateIncognitoBrowser(); |
+ incognito_browser->profile()->GetPrefs()->SetBoolean( |
+ prefs::kSafeBrowsingExtendedReportingEnabled, true); // set up SBER |
+ GURL url = SetupWarningAndNavigate(incognito_browser); // not incognito |
Jialiu Lin
2017/05/19 20:14:02
nit: comment "// not incognito" -> "// incognito"
mortonm
2017/05/19 20:21:03
Done.
|
+ EXPECT_FALSE(hit_report_sent()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
+ VerifyHitReportNotSentWithoutSBER) { |
+ // The extended reporting opt-in is presented in the interstitial for malware, |
+ // phishing, and UwS threats. |
+ const bool expect_threat_details = |
+ SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
+ testing::get<0>(GetParam())); |
+ |
+ scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
+ new content::MessageLoopRunner); |
+ if (expect_threat_details) |
+ SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
+ |
+ browser()->profile()->GetPrefs()->SetBoolean( |
+ prefs::kSafeBrowsingExtendedReportingEnabled, false); // set up SBER |
+ GURL url = SetupWarningAndNavigate(browser()); // not incognito |
+ EXPECT_FALSE(hit_report_sent()); |
+} |
+ |
namespace { |
class SecurityStyleTestObserver : public content::WebContentsObserver { |
@@ -1286,7 +1364,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
// The security indicator should be downgraded while the interstitial shows. |
GURL bad_url = net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage); |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(error_tab); |
ExpectSecurityIndicatorDowngrade(error_tab, 0u); |
@@ -1377,7 +1455,7 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
SecurityState_HTTP) { |
// The security indicator should be downgraded while the interstitial shows. |
- SetupWarningAndNavigate(); |
+ SetupWarningAndNavigate(browser()); |
WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(error_tab); |
ExpectSecurityIndicatorDowngrade(error_tab, 0u); |