| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // This test creates a fake safebrowsing service, where we can inject known- | 5 // This test creates a fake safebrowsing service, where we can inject known- |
| 6 // threat urls. It then uses a real browser to go to these urls, and sends | 6 // threat urls. It then uses a real browser to go to these urls, and sends |
| 7 // "goback" or "proceed" commands and verifies they work. | 7 // "goback" or "proceed" commands and verifies they work. |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 public: | 237 public: |
| 238 FakeThreatDetails( | 238 FakeThreatDetails( |
| 239 SafeBrowsingUIManager* delegate, | 239 SafeBrowsingUIManager* delegate, |
| 240 WebContents* web_contents, | 240 WebContents* web_contents, |
| 241 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) | 241 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) |
| 242 : ThreatDetails(delegate, web_contents, unsafe_resource), | 242 : ThreatDetails(delegate, web_contents, unsafe_resource), |
| 243 got_dom_(false), | 243 got_dom_(false), |
| 244 waiting_(false) {} | 244 waiting_(false) {} |
| 245 | 245 |
| 246 void AddDOMDetails( | 246 void AddDOMDetails( |
| 247 const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params) | 247 const std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>& params) |
| 248 override { | 248 override { |
| 249 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 249 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 250 ThreatDetails::AddDOMDetails(params); | 250 ThreatDetails::AddDOMDetails(params); |
| 251 | 251 |
| 252 // Notify the UI thread that we got the dom details. | 252 // Notify the UI thread that we got the dom details. |
| 253 BrowserThread::PostTask( | 253 BrowserThread::PostTask( |
| 254 BrowserThread::UI, FROM_HERE, | 254 BrowserThread::UI, FROM_HERE, |
| 255 base::Bind(&FakeThreatDetails::OnDOMDetailsDone, this)); | 255 base::Bind(&FakeThreatDetails::OnDOMDetailsDone, this)); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void WaitForDOM() { | 258 void WaitForDOM() { |
| 259 if (got_dom_) { | 259 if (got_dom_) { |
| 260 return; | 260 return; |
| 261 } | 261 } |
| 262 // This condition might not trigger normally, but if you add a | 262 // This condition might not trigger normally, but if you add a |
| 263 // sleep(1) in malware_dom_details it triggers :). | 263 // sleep(1) in threat_dom_details it triggers :). |
| 264 waiting_ = true; | 264 waiting_ = true; |
| 265 content::RunMessageLoop(); | 265 content::RunMessageLoop(); |
| 266 EXPECT_TRUE(got_dom_); | 266 EXPECT_TRUE(got_dom_); |
| 267 } | 267 } |
| 268 | 268 |
| 269 private: | 269 private: |
| 270 ~FakeThreatDetails() override {} | 270 ~FakeThreatDetails() override {} |
| 271 | 271 |
| 272 void OnDOMDetailsDone() { | 272 void OnDOMDetailsDone() { |
| 273 got_dom_ = true; | 273 got_dom_ = true; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 public: | 343 public: |
| 344 TestSafeBrowsingBlockingPageFactory() { } | 344 TestSafeBrowsingBlockingPageFactory() { } |
| 345 ~TestSafeBrowsingBlockingPageFactory() override {} | 345 ~TestSafeBrowsingBlockingPageFactory() override {} |
| 346 | 346 |
| 347 SafeBrowsingBlockingPage* CreateSafeBrowsingPage( | 347 SafeBrowsingBlockingPage* CreateSafeBrowsingPage( |
| 348 SafeBrowsingUIManager* delegate, | 348 SafeBrowsingUIManager* delegate, |
| 349 WebContents* web_contents, | 349 WebContents* web_contents, |
| 350 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) | 350 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) |
| 351 override { | 351 override { |
| 352 return new TestSafeBrowsingBlockingPage(delegate, web_contents, | 352 return new TestSafeBrowsingBlockingPage(delegate, web_contents, |
| 353 unsafe_resources); | 353 unsafe_resources); |
| 354 } | 354 } |
| 355 }; | 355 }; |
| 356 | 356 |
| 357 } // namespace | 357 } // namespace |
| 358 | 358 |
| 359 // Tests the safe browsing blocking page in a browser. | 359 // Tests the safe browsing blocking page in a browser. |
| 360 class SafeBrowsingBlockingPageBrowserTest | 360 class SafeBrowsingBlockingPageBrowserTest |
| 361 : public InProcessBrowserTest, | 361 : public InProcessBrowserTest, |
| 362 public testing::WithParamInterface<SBThreatType> { | 362 public testing::WithParamInterface<SBThreatType> { |
| 363 public: | 363 public: |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 GURL url = SetupThreatIframeWarningAndNavigate(); | 703 GURL url = SetupThreatIframeWarningAndNavigate(); |
| 704 | 704 |
| 705 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 705 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 706 AssertNoInterstitial(true); // Assert the interstitial is gone | 706 AssertNoInterstitial(true); // Assert the interstitial is gone |
| 707 | 707 |
| 708 EXPECT_EQ(url, | 708 EXPECT_EQ(url, |
| 709 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 709 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 710 } | 710 } |
| 711 | 711 |
| 712 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, | 712 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 713 IframeOptInAndReportMalwareDetails) { | 713 IframeOptInAndReportThreatDetails) { |
| 714 // The extended reporting opt-in is presented in the interstitial for malware, | 714 // The extended reporting opt-in is presented in the interstitial for malware, |
| 715 // phishing, and UwS threats. It however only results in uploading further | 715 // phishing, and UwS threats. This test uses malware as an example to verify |
| 716 // details about the immediate threat when facing malware threats. | 716 // this reporting functionality. |
| 717 const bool expect_malware_details = GetParam() == SB_THREAT_TYPE_URL_MALWARE; | 717 const bool expect_threat_details = |
| 718 SafeBrowsingBlockingPage::ShouldReportThreatDetails(GetParam()); |
| 718 | 719 |
| 719 scoped_refptr<content::MessageLoopRunner> malware_report_sent_runner( | 720 scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
| 720 new content::MessageLoopRunner); | 721 new content::MessageLoopRunner); |
| 721 if (expect_malware_details) | 722 if (expect_threat_details) |
| 722 SetReportSentCallback(malware_report_sent_runner->QuitClosure()); | 723 SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
| 723 | 724 |
| 724 GURL url = SetupThreatIframeWarningAndNavigate(); | 725 GURL url = SetupThreatIframeWarningAndNavigate(); |
| 725 | 726 |
| 726 FakeThreatDetails* fake_malware_details = details_factory_.get_details(); | 727 FakeThreatDetails* fake_threat_details = details_factory_.get_details(); |
| 727 EXPECT_EQ(expect_malware_details, fake_malware_details != nullptr); | 728 EXPECT_EQ(expect_threat_details, fake_threat_details != nullptr); |
| 728 | 729 |
| 729 // If the DOM details from renderer did not already return when they are | 730 // If the DOM details from renderer did not already return when they are |
| 730 // expected, wait for them. | 731 // expected, wait for them. |
| 731 if (expect_malware_details) | 732 if (expect_threat_details) |
| 732 fake_malware_details->WaitForDOM(); | 733 fake_threat_details->WaitForDOM(); |
| 733 | 734 |
| 734 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); | 735 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
| 735 EXPECT_TRUE(Click("opt-in-checkbox")); | 736 EXPECT_TRUE(Click("opt-in-checkbox")); |
| 736 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 737 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 737 AssertNoInterstitial(true); // Assert the interstitial is gone | 738 AssertNoInterstitial(true); // Assert the interstitial is gone |
| 738 | 739 |
| 739 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( | 740 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( |
| 740 prefs::kSafeBrowsingExtendedReportingEnabled)); | 741 prefs::kSafeBrowsingExtendedReportingEnabled)); |
| 741 EXPECT_EQ(url, | 742 EXPECT_EQ(url, |
| 742 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 743 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 743 | 744 |
| 744 if (expect_malware_details) { | 745 if (expect_threat_details) { |
| 745 malware_report_sent_runner->Run(); | 746 threat_report_sent_runner->Run(); |
| 746 std::string serialized = GetReportSent(); | 747 std::string serialized = GetReportSent(); |
| 747 safe_browsing::ClientMalwareReportRequest report; | 748 safe_browsing::ClientSafeBrowsingReportRequest report; |
| 748 ASSERT_TRUE(report.ParseFromString(serialized)); | 749 ASSERT_TRUE(report.ParseFromString(serialized)); |
| 749 // Verify the report is complete. | 750 // Verify the report is complete. |
| 750 EXPECT_TRUE(report.complete()); | 751 EXPECT_TRUE(report.complete()); |
| 751 } | 752 } |
| 752 } | 753 } |
| 753 | 754 |
| 754 // Verifies that the "proceed anyway" link isn't available when it is disabled | 755 // Verifies that the "proceed anyway" link isn't available when it is disabled |
| 755 // by the corresponding policy. Also verifies that sending the "proceed" | 756 // by the corresponding policy. Also verifies that sending the "proceed" |
| 756 // command anyway doesn't advance to the unsafe site. | 757 // command anyway doesn't advance to the unsafe site. |
| 757 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, ProceedDisabled) { | 758 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, ProceedDisabled) { |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1016 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageIDNTest, | 1017 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageIDNTest, |
| 1017 SafeBrowsingBlockingPageDecodesIDN) { | 1018 SafeBrowsingBlockingPageDecodesIDN) { |
| 1018 EXPECT_TRUE(VerifyIDNDecoded()); | 1019 EXPECT_TRUE(VerifyIDNDecoded()); |
| 1019 } | 1020 } |
| 1020 | 1021 |
| 1021 INSTANTIATE_TEST_CASE_P(SafeBrowsingBlockingPageIDNTestWithThreatType, | 1022 INSTANTIATE_TEST_CASE_P(SafeBrowsingBlockingPageIDNTestWithThreatType, |
| 1022 SafeBrowsingBlockingPageIDNTest, | 1023 SafeBrowsingBlockingPageIDNTest, |
| 1023 testing::Values(SB_THREAT_TYPE_URL_MALWARE, | 1024 testing::Values(SB_THREAT_TYPE_URL_MALWARE, |
| 1024 SB_THREAT_TYPE_URL_PHISHING, | 1025 SB_THREAT_TYPE_URL_PHISHING, |
| 1025 SB_THREAT_TYPE_URL_UNWANTED)); | 1026 SB_THREAT_TYPE_URL_UNWANTED)); |
| OLD | NEW |