| 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 <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 ~FakeSafeBrowsingDatabaseManager() override {} | 153 ~FakeSafeBrowsingDatabaseManager() override {} |
| 154 | 154 |
| 155 base::hash_map<std::string, SBThreatType> badurls; | 155 base::hash_map<std::string, SBThreatType> badurls; |
| 156 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager); | 156 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager); |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 // A SafeBrowingUIManager class that allows intercepting malware details. | 159 // A SafeBrowingUIManager class that allows intercepting malware details. |
| 160 class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { | 160 class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { |
| 161 public: | 161 public: |
| 162 FakeSafeBrowsingUIManager() | 162 FakeSafeBrowsingUIManager() |
| 163 : TestSafeBrowsingUIManager(), threat_details_done_(false) {} | 163 : TestSafeBrowsingUIManager(), |
| 164 threat_details_done_(false), |
| 165 hit_report_sent_(false) {} |
| 164 explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) | 166 explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) |
| 165 : TestSafeBrowsingUIManager(service), threat_details_done_(false) {} | 167 : TestSafeBrowsingUIManager(service), |
| 168 threat_details_done_(false), |
| 169 hit_report_sent_(false) {} |
| 166 | 170 |
| 167 // Overrides SafeBrowsingUIManager | 171 // Overrides SafeBrowsingUIManager |
| 168 void SendSerializedThreatDetails(const std::string& serialized) override { | 172 void SendSerializedThreatDetails(const std::string& serialized) override { |
| 169 // Notify the UI thread that we got a report. | 173 // Notify the UI thread that we got a report. |
| 170 BrowserThread::PostTask( | 174 BrowserThread::PostTask( |
| 171 BrowserThread::UI, FROM_HERE, | 175 BrowserThread::UI, FROM_HERE, |
| 172 base::BindOnce(&FakeSafeBrowsingUIManager::OnThreatDetailsDone, this, | 176 base::BindOnce(&FakeSafeBrowsingUIManager::OnThreatDetailsDone, this, |
| 173 serialized)); | 177 serialized)); |
| 174 } | 178 } |
| 175 | 179 |
| 176 void OnThreatDetailsDone(const std::string& serialized) { | 180 void OnThreatDetailsDone(const std::string& serialized) { |
| 177 if (threat_details_done_) { | 181 if (threat_details_done_) { |
| 178 return; | 182 return; |
| 179 } | 183 } |
| 180 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 184 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 181 report_ = serialized; | 185 report_ = serialized; |
| 182 | 186 |
| 183 EXPECT_FALSE(threat_details_done_callback_.is_null()); | 187 EXPECT_FALSE(threat_details_done_callback_.is_null()); |
| 184 if (!threat_details_done_callback_.is_null()) { | 188 if (!threat_details_done_callback_.is_null()) { |
| 185 threat_details_done_callback_.Run(); | 189 threat_details_done_callback_.Run(); |
| 186 threat_details_done_callback_ = base::Closure(); | 190 threat_details_done_callback_ = base::Closure(); |
| 187 } | 191 } |
| 188 threat_details_done_ = true; | 192 threat_details_done_ = true; |
| 189 } | 193 } |
| 190 | 194 |
| 195 void MaybeReportSafeBrowsingHit(const HitReport& hit_report, |
| 196 WebContents* web_contents) override { |
| 197 if (SafeBrowsingUIManager::ShouldSendHitReport(hit_report, web_contents)) { |
| 198 hit_report_sent_ = true; |
| 199 } |
| 200 } |
| 201 |
| 202 bool hit_report_sent() { return hit_report_sent_; } |
| 203 |
| 191 void set_threat_details_done_callback(const base::Closure& callback) { | 204 void set_threat_details_done_callback(const base::Closure& callback) { |
| 192 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 205 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 193 EXPECT_TRUE(threat_details_done_callback_.is_null()); | 206 EXPECT_TRUE(threat_details_done_callback_.is_null()); |
| 194 threat_details_done_callback_ = callback; | 207 threat_details_done_callback_ = callback; |
| 195 } | 208 } |
| 196 | 209 |
| 197 std::string GetReport() { | 210 std::string GetReport() { |
| 198 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 211 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 199 return report_; | 212 return report_; |
| 200 } | 213 } |
| 201 | 214 |
| 202 protected: | 215 protected: |
| 203 ~FakeSafeBrowsingUIManager() override {} | 216 ~FakeSafeBrowsingUIManager() override {} |
| 204 | 217 |
| 205 private: | 218 private: |
| 206 std::string report_; | 219 std::string report_; |
| 207 base::Closure threat_details_done_callback_; | 220 base::Closure threat_details_done_callback_; |
| 208 bool threat_details_done_; | 221 bool threat_details_done_; |
| 222 bool hit_report_sent_; |
| 209 | 223 |
| 210 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingUIManager); | 224 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingUIManager); |
| 211 }; | 225 }; |
| 212 | 226 |
| 213 } // namespace | 227 } // namespace |
| 214 | 228 |
| 215 class TestThreatDetailsFactory : public ThreatDetailsFactory { | 229 class TestThreatDetailsFactory : public ThreatDetailsFactory { |
| 216 public: | 230 public: |
| 217 TestThreatDetailsFactory() : details_() {} | 231 TestThreatDetailsFactory() : details_() {} |
| 218 ~TestThreatDetailsFactory() override {} | 232 ~TestThreatDetailsFactory() override {} |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 | 386 |
| 373 void ClearBadURL(const GURL& url) { | 387 void ClearBadURL(const GURL& url) { |
| 374 TestSafeBrowsingService* service = factory_.test_safe_browsing_service(); | 388 TestSafeBrowsingService* service = factory_.test_safe_browsing_service(); |
| 375 ASSERT_TRUE(service); | 389 ASSERT_TRUE(service); |
| 376 | 390 |
| 377 static_cast<FakeSafeBrowsingDatabaseManager*>( | 391 static_cast<FakeSafeBrowsingDatabaseManager*>( |
| 378 service->database_manager().get()) | 392 service->database_manager().get()) |
| 379 ->ClearBadURL(url); | 393 ->ClearBadURL(url); |
| 380 } | 394 } |
| 381 | 395 |
| 382 // The basic version of this method, which uses a HTTP test URL. | 396 // The basic version of this method, which uses an HTTP test URL. |
| 383 GURL SetupWarningAndNavigate() { | 397 GURL SetupWarningAndNavigate(Browser* browser) { |
| 384 return SetupWarningAndNavigateToURL( | 398 return SetupWarningAndNavigateToURL( |
| 385 net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage)); | 399 net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage), browser); |
| 386 } | 400 } |
| 387 | 401 |
| 388 // Navigates to a warning on a valid HTTPS website. | 402 // Navigates to a warning on a valid HTTPS website. |
| 389 GURL SetupWarningAndNavigateToValidHTTPS() { | 403 GURL SetupWarningAndNavigateToValidHTTPS() { |
| 390 EXPECT_TRUE(https_server_.Start()); | 404 EXPECT_TRUE(https_server_.Start()); |
| 391 scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate()); | 405 scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate()); |
| 392 net::CertVerifyResult verify_result; | 406 net::CertVerifyResult verify_result; |
| 393 verify_result.is_issued_by_known_root = true; | 407 verify_result.is_issued_by_known_root = true; |
| 394 verify_result.verified_cert = cert; | 408 verify_result.verified_cert = cert; |
| 395 verify_result.cert_status = 0; | 409 verify_result.cert_status = 0; |
| 396 mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK); | 410 mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK); |
| 397 GURL url = https_server_.GetURL(kHTTPSPage); | 411 GURL url = https_server_.GetURL(kHTTPSPage); |
| 398 return SetupWarningAndNavigateToURL(url); | 412 return SetupWarningAndNavigateToURL(url, browser()); |
| 399 } | 413 } |
| 400 | 414 |
| 401 // Navigates through an HTTPS interstitial, then opens up a SB warning on that | 415 // Navigates through an HTTPS interstitial, then opens up a SB warning on that |
| 402 // same URL. | 416 // same URL. |
| 403 GURL SetupWarningAndNavigateToInvalidHTTPS() { | 417 GURL SetupWarningAndNavigateToInvalidHTTPS() { |
| 404 https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); | 418 https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |
| 405 EXPECT_TRUE(https_server_.Start()); | 419 EXPECT_TRUE(https_server_.Start()); |
| 406 GURL url = https_server_.GetURL(kHTTPSPage); | 420 GURL url = https_server_.GetURL(kHTTPSPage); |
| 407 | 421 |
| 408 // Proceed through the HTTPS interstitial. | 422 // Proceed through the HTTPS interstitial. |
| 409 ui_test_utils::NavigateToURL(browser(), url); | 423 ui_test_utils::NavigateToURL(browser(), url); |
| 410 EXPECT_TRUE(WaitForReady()); | 424 EXPECT_TRUE(WaitForReady(browser())); |
| 411 InterstitialPage* https_warning = browser() | 425 InterstitialPage* https_warning = browser() |
| 412 ->tab_strip_model() | 426 ->tab_strip_model() |
| 413 ->GetActiveWebContents() | 427 ->GetActiveWebContents() |
| 414 ->GetInterstitialPage(); | 428 ->GetInterstitialPage(); |
| 415 EXPECT_EQ(SSLBlockingPage::kTypeForTesting, | 429 EXPECT_EQ(SSLBlockingPage::kTypeForTesting, |
| 416 https_warning->GetDelegateForTesting()->GetTypeForTesting()); | 430 https_warning->GetDelegateForTesting()->GetTypeForTesting()); |
| 417 https_warning->Proceed(); | 431 https_warning->Proceed(); |
| 418 content::WaitForInterstitialDetach( | 432 content::WaitForInterstitialDetach( |
| 419 browser()->tab_strip_model()->GetActiveWebContents()); | 433 browser()->tab_strip_model()->GetActiveWebContents()); |
| 420 | 434 |
| 421 return SetupWarningAndNavigateToURL(url); | 435 return SetupWarningAndNavigateToURL(url, browser()); |
| 422 } | 436 } |
| 423 | 437 |
| 424 // Adds a safebrowsing threat results to the fake safebrowsing service, | 438 // Adds a safebrowsing threat results to the fake safebrowsing service, |
| 425 // navigates to a page with an iframe containing the threat site, and returns | 439 // navigates to a page with an iframe containing the threat site, and returns |
| 426 // the url of the parent page. | 440 // the url of the parent page. |
| 427 GURL SetupThreatIframeWarningAndNavigate() { | 441 GURL SetupThreatIframeWarningAndNavigate() { |
| 428 GURL url = net::URLRequestMockHTTPJob::GetMockUrl(kCrossSiteMaliciousPage); | 442 GURL url = net::URLRequestMockHTTPJob::GetMockUrl(kCrossSiteMaliciousPage); |
| 429 GURL iframe_url = net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousIframe); | 443 GURL iframe_url = net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousIframe); |
| 430 SetURLThreatType(iframe_url, testing::get<0>(GetParam())); | 444 SetURLThreatType(iframe_url, testing::get<0>(GetParam())); |
| 431 | 445 |
| 432 ui_test_utils::NavigateToURL(browser(), url); | 446 ui_test_utils::NavigateToURL(browser(), url); |
| 433 EXPECT_TRUE(WaitForReady()); | 447 EXPECT_TRUE(WaitForReady(browser())); |
| 434 return url; | 448 return url; |
| 435 } | 449 } |
| 436 | 450 |
| 437 // Adds a safebrowsing threat results to the fake safebrowsing service, and | 451 // Adds a safebrowsing threat results to the fake safebrowsing service, and |
| 438 // navigates to a page with a cross-origin iframe containing the threat site. | 452 // navigates to a page with a cross-origin iframe containing the threat site. |
| 439 // Returns the url of the parent page and sets |iframe_url| to the malicious | 453 // Returns the url of the parent page and sets |iframe_url| to the malicious |
| 440 // cross-origin iframe. | 454 // cross-origin iframe. |
| 441 GURL SetupCrossOriginThreatIframeWarningAndNavigate(GURL* iframe_url) { | 455 GURL SetupCrossOriginThreatIframeWarningAndNavigate(GURL* iframe_url) { |
| 442 content::SetupCrossSiteRedirector(embedded_test_server()); | 456 content::SetupCrossSiteRedirector(embedded_test_server()); |
| 443 EXPECT_TRUE(embedded_test_server()->Start()); | 457 EXPECT_TRUE(embedded_test_server()->Start()); |
| 444 GURL url = embedded_test_server()->GetURL( | 458 GURL url = embedded_test_server()->GetURL( |
| 445 std::string("/") + kPageWithCrossOriginMaliciousIframe); | 459 std::string("/") + kPageWithCrossOriginMaliciousIframe); |
| 446 *iframe_url = | 460 *iframe_url = |
| 447 embedded_test_server()->GetURL(std::string("/") + kMaliciousIframe); | 461 embedded_test_server()->GetURL(std::string("/") + kMaliciousIframe); |
| 448 GURL::Replacements replace_host; | 462 GURL::Replacements replace_host; |
| 449 replace_host.SetHostStr(kCrossOriginMaliciousIframeHost); | 463 replace_host.SetHostStr(kCrossOriginMaliciousIframeHost); |
| 450 *iframe_url = iframe_url->ReplaceComponents(replace_host); | 464 *iframe_url = iframe_url->ReplaceComponents(replace_host); |
| 451 SetURLThreatType(*iframe_url, testing::get<0>(GetParam())); | 465 SetURLThreatType(*iframe_url, testing::get<0>(GetParam())); |
| 452 | 466 |
| 453 ui_test_utils::NavigateToURL(browser(), url); | 467 ui_test_utils::NavigateToURL(browser(), url); |
| 454 EXPECT_TRUE(WaitForReady()); | 468 EXPECT_TRUE(WaitForReady(browser())); |
| 455 return url; | 469 return url; |
| 456 } | 470 } |
| 457 | 471 |
| 458 void SendCommand( | 472 void SendCommand( |
| 459 security_interstitials::SecurityInterstitialCommands command) { | 473 security_interstitials::SecurityInterstitialCommands command) { |
| 460 WebContents* contents = | 474 WebContents* contents = |
| 461 browser()->tab_strip_model()->GetActiveWebContents(); | 475 browser()->tab_strip_model()->GetActiveWebContents(); |
| 462 // We use InterstitialPage::GetInterstitialPage(tab) instead of | 476 // We use InterstitialPage::GetInterstitialPage(tab) instead of |
| 463 // tab->GetInterstitialPage() because the tab doesn't have a pointer | 477 // tab->GetInterstitialPage() because the tab doesn't have a pointer |
| 464 // to its interstital page until it gets a command from the renderer | 478 // to its interstital page until it gets a command from the renderer |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 } | 557 } |
| 544 | 558 |
| 545 content::RenderFrameHost* GetRenderFrameHost() { | 559 content::RenderFrameHost* GetRenderFrameHost() { |
| 546 InterstitialPage* interstitial = InterstitialPage::GetInterstitialPage( | 560 InterstitialPage* interstitial = InterstitialPage::GetInterstitialPage( |
| 547 browser()->tab_strip_model()->GetActiveWebContents()); | 561 browser()->tab_strip_model()->GetActiveWebContents()); |
| 548 if (!interstitial) | 562 if (!interstitial) |
| 549 return NULL; | 563 return NULL; |
| 550 return interstitial->GetMainFrame(); | 564 return interstitial->GetMainFrame(); |
| 551 } | 565 } |
| 552 | 566 |
| 553 bool WaitForReady() { | 567 bool WaitForReady(Browser* browser) { |
| 554 InterstitialPage* interstitial = InterstitialPage::GetInterstitialPage( | 568 InterstitialPage* interstitial = InterstitialPage::GetInterstitialPage( |
| 555 browser()->tab_strip_model()->GetActiveWebContents()); | 569 browser->tab_strip_model()->GetActiveWebContents()); |
| 556 if (!interstitial) | 570 if (!interstitial) |
| 557 return false; | 571 return false; |
| 558 return content::WaitForRenderFrameReady(interstitial->GetMainFrame()); | 572 return content::WaitForRenderFrameReady(interstitial->GetMainFrame()); |
| 559 } | 573 } |
| 560 | 574 |
| 561 Visibility GetVisibility(const std::string& node_id) { | 575 Visibility GetVisibility(const std::string& node_id) { |
| 562 content::RenderFrameHost* rfh = GetRenderFrameHost(); | 576 content::RenderFrameHost* rfh = GetRenderFrameHost(); |
| 563 if (!rfh) | 577 if (!rfh) |
| 564 return VISIBILITY_ERROR; | 578 return VISIBILITY_ERROR; |
| 565 | 579 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 if (!Click(node_id)) | 626 if (!Click(node_id)) |
| 613 return false; | 627 return false; |
| 614 content::WaitForInterstitialDetach( | 628 content::WaitForInterstitialDetach( |
| 615 browser()->tab_strip_model()->GetActiveWebContents()); | 629 browser()->tab_strip_model()->GetActiveWebContents()); |
| 616 return true; | 630 return true; |
| 617 } | 631 } |
| 618 | 632 |
| 619 void TestReportingDisabledAndDontProceed(const GURL& url) { | 633 void TestReportingDisabledAndDontProceed(const GURL& url) { |
| 620 SetURLThreatType(url, testing::get<0>(GetParam())); | 634 SetURLThreatType(url, testing::get<0>(GetParam())); |
| 621 ui_test_utils::NavigateToURL(browser(), url); | 635 ui_test_utils::NavigateToURL(browser(), url); |
| 622 ASSERT_TRUE(WaitForReady()); | 636 ASSERT_TRUE(WaitForReady(browser())); |
| 623 | 637 |
| 624 EXPECT_EQ(HIDDEN, GetVisibility("extended-reporting-opt-in")); | 638 EXPECT_EQ(HIDDEN, GetVisibility("extended-reporting-opt-in")); |
| 625 EXPECT_EQ(HIDDEN, GetVisibility("opt-in-checkbox")); | 639 EXPECT_EQ(HIDDEN, GetVisibility("opt-in-checkbox")); |
| 626 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); | 640 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); |
| 627 EXPECT_EQ(VISIBLE, GetVisibility("learn-more-link")); | 641 EXPECT_EQ(VISIBLE, GetVisibility("learn-more-link")); |
| 628 EXPECT_TRUE(Click("details-button")); | 642 EXPECT_TRUE(Click("details-button")); |
| 629 EXPECT_EQ(VISIBLE, GetVisibility("proceed-link")); | 643 EXPECT_EQ(VISIBLE, GetVisibility("proceed-link")); |
| 630 | 644 |
| 631 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); | 645 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); |
| 632 AssertNoInterstitial(false); // Assert the interstitial is gone | 646 AssertNoInterstitial(false); // Assert the interstitial is gone |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 SecurityStateTabHelper* helper = | 705 SecurityStateTabHelper* helper = |
| 692 SecurityStateTabHelper::FromWebContents(tab); | 706 SecurityStateTabHelper::FromWebContents(tab); |
| 693 ASSERT_TRUE(helper); | 707 ASSERT_TRUE(helper); |
| 694 security_state::SecurityInfo security_info; | 708 security_state::SecurityInfo security_info; |
| 695 helper->GetSecurityInfo(&security_info); | 709 helper->GetSecurityInfo(&security_info); |
| 696 EXPECT_EQ(security_state::NONE, security_info.security_level); | 710 EXPECT_EQ(security_state::NONE, security_info.security_level); |
| 697 EXPECT_EQ(security_state::MALICIOUS_CONTENT_STATUS_NONE, | 711 EXPECT_EQ(security_state::MALICIOUS_CONTENT_STATUS_NONE, |
| 698 security_info.malicious_content_status); | 712 security_info.malicious_content_status); |
| 699 } | 713 } |
| 700 | 714 |
| 715 bool hit_report_sent() { |
| 716 return static_cast<FakeSafeBrowsingUIManager*>( |
| 717 factory_.test_safe_browsing_service()->ui_manager().get()) |
| 718 ->hit_report_sent(); |
| 719 } |
| 720 |
| 701 protected: | 721 protected: |
| 702 TestThreatDetailsFactory details_factory_; | 722 TestThreatDetailsFactory details_factory_; |
| 703 | 723 |
| 704 private: | 724 private: |
| 705 // Adds a safebrowsing result of the current test threat to the fake | 725 // Adds a safebrowsing result of the current test threat to the fake |
| 706 // safebrowsing service, navigates to that page, and returns the url. | 726 // safebrowsing service, navigates to that page, and returns the url. |
| 707 // The various wrappers supply different URLs. | 727 // The various wrappers supply different URLs. |
| 708 GURL SetupWarningAndNavigateToURL(GURL url) { | 728 GURL SetupWarningAndNavigateToURL(GURL url, Browser* browser) { |
| 709 SetURLThreatType(url, testing::get<0>(GetParam())); | 729 SetURLThreatType(url, testing::get<0>(GetParam())); |
| 710 ui_test_utils::NavigateToURL(browser(), url); | 730 ui_test_utils::NavigateToURL(browser, url); |
| 711 EXPECT_TRUE(WaitForReady()); | 731 EXPECT_TRUE(WaitForReady(browser)); |
| 712 return url; | 732 return url; |
| 713 } | 733 } |
| 714 | 734 |
| 715 TestSafeBrowsingServiceFactory factory_; | 735 TestSafeBrowsingServiceFactory factory_; |
| 716 TestSafeBrowsingBlockingPageFactory blocking_page_factory_; | 736 TestSafeBrowsingBlockingPageFactory blocking_page_factory_; |
| 717 net::EmbeddedTestServer https_server_; | 737 net::EmbeddedTestServer https_server_; |
| 718 | 738 |
| 719 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageBrowserTest); | 739 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageBrowserTest); |
| 720 }; | 740 }; |
| 721 | 741 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 737 | 757 |
| 738 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, RedirectCanceled) { | 758 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, RedirectCanceled) { |
| 739 // 2. Test the case that redirect is the only resource. | 759 // 2. Test the case that redirect is the only resource. |
| 740 MalwareRedirectCancelAndProceed("openWin"); | 760 MalwareRedirectCancelAndProceed("openWin"); |
| 741 // Clicking proceed won't do anything if the main request is cancelled | 761 // Clicking proceed won't do anything if the main request is cancelled |
| 742 // already. See crbug.com/76460. | 762 // already. See crbug.com/76460. |
| 743 EXPECT_TRUE(YesInterstitial()); | 763 EXPECT_TRUE(YesInterstitial()); |
| 744 } | 764 } |
| 745 | 765 |
| 746 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, DontProceed) { | 766 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, DontProceed) { |
| 747 SetupWarningAndNavigate(); | 767 SetupWarningAndNavigate(browser()); |
| 748 | 768 |
| 749 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); | 769 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); |
| 750 EXPECT_EQ(HIDDEN, GetVisibility("details")); | 770 EXPECT_EQ(HIDDEN, GetVisibility("details")); |
| 751 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); | 771 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); |
| 752 EXPECT_EQ(HIDDEN, GetVisibility("error-code")); | 772 EXPECT_EQ(HIDDEN, GetVisibility("error-code")); |
| 753 EXPECT_TRUE(Click("details-button")); | 773 EXPECT_TRUE(Click("details-button")); |
| 754 EXPECT_EQ(VISIBLE, GetVisibility("details")); | 774 EXPECT_EQ(VISIBLE, GetVisibility("details")); |
| 755 EXPECT_EQ(VISIBLE, GetVisibility("proceed-link")); | 775 EXPECT_EQ(VISIBLE, GetVisibility("proceed-link")); |
| 756 EXPECT_EQ(HIDDEN, GetVisibility("error-code")); | 776 EXPECT_EQ(HIDDEN, GetVisibility("error-code")); |
| 757 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); | 777 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); |
| 758 | 778 |
| 759 AssertNoInterstitial(false); // Assert the interstitial is gone | 779 AssertNoInterstitial(false); // Assert the interstitial is gone |
| 760 EXPECT_EQ(GURL(url::kAboutBlankURL), // Back to "about:blank" | 780 EXPECT_EQ(GURL(url::kAboutBlankURL), // Back to "about:blank" |
| 761 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 781 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 762 } | 782 } |
| 763 | 783 |
| 764 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, Proceed) { | 784 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, Proceed) { |
| 765 GURL url = SetupWarningAndNavigate(); | 785 GURL url = SetupWarningAndNavigate(browser()); |
| 766 | 786 |
| 767 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 787 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 768 AssertNoInterstitial(true); // Assert the interstitial is gone. | 788 AssertNoInterstitial(true); // Assert the interstitial is gone. |
| 769 EXPECT_EQ(url, | 789 EXPECT_EQ(url, |
| 770 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 790 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 771 } | 791 } |
| 772 | 792 |
| 773 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, IframeDontProceed) { | 793 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, IframeDontProceed) { |
| 774 SetupThreatIframeWarningAndNavigate(); | 794 SetupThreatIframeWarningAndNavigate(); |
| 775 | 795 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 // Navigate to a safe page which contains multiple potential DOM details. | 921 // Navigate to a safe page which contains multiple potential DOM details. |
| 902 // (Despite the name, kMaliciousPage is not the page flagged as bad in this | 922 // (Despite the name, kMaliciousPage is not the page flagged as bad in this |
| 903 // test.) | 923 // test.) |
| 904 GURL safe_url(net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousPage)); | 924 GURL safe_url(net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousPage)); |
| 905 ui_test_utils::NavigateToURL(browser(), safe_url); | 925 ui_test_utils::NavigateToURL(browser(), safe_url); |
| 906 | 926 |
| 907 EXPECT_EQ(nullptr, details_factory_.get_details()); | 927 EXPECT_EQ(nullptr, details_factory_.get_details()); |
| 908 | 928 |
| 909 // Start navigation to bad page (kEmptyPage), which will be blocked before it | 929 // Start navigation to bad page (kEmptyPage), which will be blocked before it |
| 910 // is committed. | 930 // is committed. |
| 911 GURL url = SetupWarningAndNavigate(); | 931 GURL url = SetupWarningAndNavigate(browser()); |
| 912 | 932 |
| 913 ThreatDetails* threat_details = details_factory_.get_details(); | 933 ThreatDetails* threat_details = details_factory_.get_details(); |
| 914 EXPECT_EQ(expect_threat_details, threat_details != nullptr); | 934 EXPECT_EQ(expect_threat_details, threat_details != nullptr); |
| 915 | 935 |
| 916 // Go back. | 936 // Go back. |
| 917 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); | 937 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
| 918 EXPECT_TRUE(Click("opt-in-checkbox")); | 938 EXPECT_TRUE(Click("opt-in-checkbox")); |
| 919 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); | 939 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); |
| 920 AssertNoInterstitial(true); // Assert the interstitial is gone | 940 AssertNoInterstitial(true); // Assert the interstitial is gone |
| 921 | 941 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 952 // Navigate to a safe page which contains multiple potential DOM details. | 972 // Navigate to a safe page which contains multiple potential DOM details. |
| 953 // (Despite the name, kMaliciousPage is not the page flagged as bad in this | 973 // (Despite the name, kMaliciousPage is not the page flagged as bad in this |
| 954 // test.) | 974 // test.) |
| 955 ui_test_utils::NavigateToURL( | 975 ui_test_utils::NavigateToURL( |
| 956 browser(), net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousPage)); | 976 browser(), net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousPage)); |
| 957 | 977 |
| 958 EXPECT_EQ(nullptr, details_factory_.get_details()); | 978 EXPECT_EQ(nullptr, details_factory_.get_details()); |
| 959 | 979 |
| 960 // Start navigation to bad page (kEmptyPage), which will be blocked before it | 980 // Start navigation to bad page (kEmptyPage), which will be blocked before it |
| 961 // is committed. | 981 // is committed. |
| 962 GURL url = SetupWarningAndNavigate(); | 982 GURL url = SetupWarningAndNavigate(browser()); |
| 963 | 983 |
| 964 ThreatDetails* threat_details = details_factory_.get_details(); | 984 ThreatDetails* threat_details = details_factory_.get_details(); |
| 965 EXPECT_EQ(expect_threat_details, threat_details != nullptr); | 985 EXPECT_EQ(expect_threat_details, threat_details != nullptr); |
| 966 | 986 |
| 967 // Proceed through the warning. | 987 // Proceed through the warning. |
| 968 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); | 988 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
| 969 EXPECT_TRUE(Click("opt-in-checkbox")); | 989 EXPECT_TRUE(Click("opt-in-checkbox")); |
| 970 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 990 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 971 AssertNoInterstitial(true); // Assert the interstitial is gone | 991 AssertNoInterstitial(true); // Assert the interstitial is gone |
| 972 | 992 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 989 } | 1009 } |
| 990 | 1010 |
| 991 // Verifies that the "proceed anyway" link isn't available when it is disabled | 1011 // Verifies that the "proceed anyway" link isn't available when it is disabled |
| 992 // by the corresponding policy. Also verifies that sending the "proceed" | 1012 // by the corresponding policy. Also verifies that sending the "proceed" |
| 993 // command anyway doesn't advance to the unsafe site. | 1013 // command anyway doesn't advance to the unsafe site. |
| 994 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, ProceedDisabled) { | 1014 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, ProceedDisabled) { |
| 995 // Simulate a policy disabling the "proceed anyway" link. | 1015 // Simulate a policy disabling the "proceed anyway" link. |
| 996 browser()->profile()->GetPrefs()->SetBoolean( | 1016 browser()->profile()->GetPrefs()->SetBoolean( |
| 997 prefs::kSafeBrowsingProceedAnywayDisabled, true); | 1017 prefs::kSafeBrowsingProceedAnywayDisabled, true); |
| 998 | 1018 |
| 999 SetupWarningAndNavigate(); | 1019 SetupWarningAndNavigate(browser()); |
| 1000 | 1020 |
| 1001 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); | 1021 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); |
| 1002 EXPECT_EQ(HIDDEN, GetVisibility("details")); | 1022 EXPECT_EQ(HIDDEN, GetVisibility("details")); |
| 1003 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); | 1023 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); |
| 1004 EXPECT_EQ(HIDDEN, GetVisibility("final-paragraph")); | 1024 EXPECT_EQ(HIDDEN, GetVisibility("final-paragraph")); |
| 1005 EXPECT_TRUE(Click("details-button")); | 1025 EXPECT_TRUE(Click("details-button")); |
| 1006 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); | 1026 EXPECT_EQ(HIDDEN, GetVisibility("proceed-link")); |
| 1007 EXPECT_EQ(HIDDEN, GetVisibility("final-paragraph")); | 1027 EXPECT_EQ(HIDDEN, GetVisibility("final-paragraph")); |
| 1008 SendCommand(security_interstitials::CMD_PROCEED); | 1028 SendCommand(security_interstitials::CMD_PROCEED); |
| 1009 | 1029 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1024 TestReportingDisabledAndDontProceed( | 1044 TestReportingDisabledAndDontProceed( |
| 1025 net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage)); | 1045 net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage)); |
| 1026 } | 1046 } |
| 1027 | 1047 |
| 1028 // Verifies that the reporting checkbox is still shown if the page is reloaded | 1048 // Verifies that the reporting checkbox is still shown if the page is reloaded |
| 1029 // while the interstitial is showing. | 1049 // while the interstitial is showing. |
| 1030 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, | 1050 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1031 ReloadWhileInterstitialShowing) { | 1051 ReloadWhileInterstitialShowing) { |
| 1032 // Start navigation to bad page (kEmptyPage), which will be blocked before it | 1052 // Start navigation to bad page (kEmptyPage), which will be blocked before it |
| 1033 // is committed. | 1053 // is committed. |
| 1034 const GURL url = SetupWarningAndNavigate(); | 1054 const GURL url = SetupWarningAndNavigate(browser()); |
| 1035 | 1055 |
| 1036 // Checkbox should be showing. | 1056 // Checkbox should be showing. |
| 1037 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); | 1057 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
| 1038 | 1058 |
| 1039 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); | 1059 WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); |
| 1040 ASSERT_TRUE(tab); | 1060 ASSERT_TRUE(tab); |
| 1041 // Security indicator should be showing. | 1061 // Security indicator should be showing. |
| 1042 ExpectSecurityIndicatorDowngrade(tab, 0u); | 1062 ExpectSecurityIndicatorDowngrade(tab, 0u); |
| 1043 | 1063 |
| 1044 // Check navigation entry state. | 1064 // Check navigation entry state. |
| 1045 const NavigationController& controller = tab->GetController(); | 1065 const NavigationController& controller = tab->GetController(); |
| 1046 ASSERT_TRUE(controller.GetVisibleEntry()); | 1066 ASSERT_TRUE(controller.GetVisibleEntry()); |
| 1047 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); | 1067 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); |
| 1048 ASSERT_TRUE(controller.GetPendingEntry()); | 1068 ASSERT_TRUE(controller.GetPendingEntry()); |
| 1049 EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); | 1069 EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); |
| 1050 | 1070 |
| 1051 // "Reload" the tab. | 1071 // "Reload" the tab. |
| 1052 SetupWarningAndNavigate(); | 1072 SetupWarningAndNavigate(browser()); |
| 1053 | 1073 |
| 1054 // Checkbox should be showing. | 1074 // Checkbox should be showing. |
| 1055 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); | 1075 EXPECT_EQ(VISIBLE, GetVisibility("extended-reporting-opt-in")); |
| 1056 | 1076 |
| 1057 // TODO(crbug.com/666172): Security indicator should be showing. | 1077 // TODO(crbug.com/666172): Security indicator should be showing. |
| 1058 // Call |ExpectSecurityIndicatorDowngrade(tab, 0u);| here once the bug is | 1078 // Call |ExpectSecurityIndicatorDowngrade(tab, 0u);| here once the bug is |
| 1059 // fixed. | 1079 // fixed. |
| 1060 | 1080 |
| 1061 // Check navigation entry state. | 1081 // Check navigation entry state. |
| 1062 ASSERT_TRUE(controller.GetVisibleEntry()); | 1082 ASSERT_TRUE(controller.GetVisibleEntry()); |
| 1063 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); | 1083 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); |
| 1064 ASSERT_TRUE(controller.GetPendingEntry()); | 1084 ASSERT_TRUE(controller.GetPendingEntry()); |
| 1065 EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); | 1085 EXPECT_EQ(url, controller.GetPendingEntry()->GetURL()); |
| 1066 } | 1086 } |
| 1067 | 1087 |
| 1068 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, LearnMore) { | 1088 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, LearnMore) { |
| 1069 SetupWarningAndNavigate(); | 1089 SetupWarningAndNavigate(browser()); |
| 1070 EXPECT_TRUE(ClickAndWaitForDetach("learn-more-link")); | 1090 EXPECT_TRUE(ClickAndWaitForDetach("learn-more-link")); |
| 1071 AssertNoInterstitial(false); // Assert the interstitial is gone | 1091 AssertNoInterstitial(false); // Assert the interstitial is gone |
| 1072 | 1092 |
| 1073 // We are in the help page. | 1093 // We are in the help page. |
| 1074 EXPECT_EQ( | 1094 EXPECT_EQ( |
| 1075 GURL("https://support.google.com/chrome/answer/99020").GetWithEmptyPath(), | 1095 GURL("https://support.google.com/chrome/answer/99020").GetWithEmptyPath(), |
| 1076 browser() | 1096 browser() |
| 1077 ->tab_strip_model() | 1097 ->tab_strip_model() |
| 1078 ->GetActiveWebContents() | 1098 ->GetActiveWebContents() |
| 1079 ->GetURL() | 1099 ->GetURL() |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1097 const std::string interaction_histogram = | 1117 const std::string interaction_histogram = |
| 1098 "interstitial." + prefix + ".interaction"; | 1118 "interstitial." + prefix + ".interaction"; |
| 1099 | 1119 |
| 1100 // TODO(nparker): Check for *.from_device as well. | 1120 // TODO(nparker): Check for *.from_device as well. |
| 1101 | 1121 |
| 1102 // Histograms should start off empty. | 1122 // Histograms should start off empty. |
| 1103 histograms.ExpectTotalCount(decision_histogram, 0); | 1123 histograms.ExpectTotalCount(decision_histogram, 0); |
| 1104 histograms.ExpectTotalCount(interaction_histogram, 0); | 1124 histograms.ExpectTotalCount(interaction_histogram, 0); |
| 1105 | 1125 |
| 1106 // After navigating to the page, the totals should be set. | 1126 // After navigating to the page, the totals should be set. |
| 1107 SetupWarningAndNavigate(); | 1127 SetupWarningAndNavigate(browser()); |
| 1108 histograms.ExpectTotalCount(decision_histogram, 1); | 1128 histograms.ExpectTotalCount(decision_histogram, 1); |
| 1109 histograms.ExpectBucketCount(decision_histogram, | 1129 histograms.ExpectBucketCount(decision_histogram, |
| 1110 security_interstitials::MetricsHelper::SHOW, 1); | 1130 security_interstitials::MetricsHelper::SHOW, 1); |
| 1111 histograms.ExpectTotalCount(interaction_histogram, 1); | 1131 histograms.ExpectTotalCount(interaction_histogram, 1); |
| 1112 histograms.ExpectBucketCount( | 1132 histograms.ExpectBucketCount( |
| 1113 interaction_histogram, | 1133 interaction_histogram, |
| 1114 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); | 1134 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); |
| 1115 | 1135 |
| 1116 // Decision should be recorded. | 1136 // Decision should be recorded. |
| 1117 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); | 1137 EXPECT_TRUE(ClickAndWaitForDetach("primary-button")); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1141 NOTREACHED(); | 1161 NOTREACHED(); |
| 1142 const std::string decision_histogram = "interstitial." + prefix + ".decision"; | 1162 const std::string decision_histogram = "interstitial." + prefix + ".decision"; |
| 1143 const std::string interaction_histogram = | 1163 const std::string interaction_histogram = |
| 1144 "interstitial." + prefix + ".interaction"; | 1164 "interstitial." + prefix + ".interaction"; |
| 1145 | 1165 |
| 1146 // Histograms should start off empty. | 1166 // Histograms should start off empty. |
| 1147 histograms.ExpectTotalCount(decision_histogram, 0); | 1167 histograms.ExpectTotalCount(decision_histogram, 0); |
| 1148 histograms.ExpectTotalCount(interaction_histogram, 0); | 1168 histograms.ExpectTotalCount(interaction_histogram, 0); |
| 1149 | 1169 |
| 1150 // After navigating to the page, the totals should be set. | 1170 // After navigating to the page, the totals should be set. |
| 1151 GURL url = SetupWarningAndNavigate(); | 1171 GURL url = SetupWarningAndNavigate(browser()); |
| 1152 histograms.ExpectTotalCount(decision_histogram, 1); | 1172 histograms.ExpectTotalCount(decision_histogram, 1); |
| 1153 histograms.ExpectBucketCount(decision_histogram, | 1173 histograms.ExpectBucketCount(decision_histogram, |
| 1154 security_interstitials::MetricsHelper::SHOW, 1); | 1174 security_interstitials::MetricsHelper::SHOW, 1); |
| 1155 histograms.ExpectTotalCount(interaction_histogram, 1); | 1175 histograms.ExpectTotalCount(interaction_histogram, 1); |
| 1156 histograms.ExpectBucketCount( | 1176 histograms.ExpectBucketCount( |
| 1157 interaction_histogram, | 1177 interaction_histogram, |
| 1158 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); | 1178 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); |
| 1159 | 1179 |
| 1160 // Decision should be recorded. | 1180 // Decision should be recorded. |
| 1161 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 1181 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 1162 AssertNoInterstitial(true); // Assert the interstitial is gone. | 1182 AssertNoInterstitial(true); // Assert the interstitial is gone. |
| 1163 histograms.ExpectTotalCount(decision_histogram, 2); | 1183 histograms.ExpectTotalCount(decision_histogram, 2); |
| 1164 histograms.ExpectBucketCount( | 1184 histograms.ExpectBucketCount( |
| 1165 decision_histogram, security_interstitials::MetricsHelper::PROCEED, 1); | 1185 decision_histogram, security_interstitials::MetricsHelper::PROCEED, 1); |
| 1166 histograms.ExpectTotalCount(interaction_histogram, 1); | 1186 histograms.ExpectTotalCount(interaction_histogram, 1); |
| 1167 histograms.ExpectBucketCount( | 1187 histograms.ExpectBucketCount( |
| 1168 interaction_histogram, | 1188 interaction_histogram, |
| 1169 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); | 1189 security_interstitials::MetricsHelper::TOTAL_VISITS, 1); |
| 1170 } | 1190 } |
| 1171 | 1191 |
| 1172 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistRevisit) { | 1192 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistRevisit) { |
| 1173 GURL url = SetupWarningAndNavigate(); | 1193 GURL url = SetupWarningAndNavigate(browser()); |
| 1174 | 1194 |
| 1175 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 1195 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 1176 AssertNoInterstitial(true); // Assert the interstitial is gone. | 1196 AssertNoInterstitial(true); // Assert the interstitial is gone. |
| 1177 EXPECT_EQ(url, | 1197 EXPECT_EQ(url, |
| 1178 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); | 1198 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 1179 | 1199 |
| 1180 // Unrelated pages should not be whitelisted now. | 1200 // Unrelated pages should not be whitelisted now. |
| 1181 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); | 1201 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); |
| 1182 AssertNoInterstitial(false); | 1202 AssertNoInterstitial(false); |
| 1183 | 1203 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1198 // Unrelated pages should not be whitelisted now. | 1218 // Unrelated pages should not be whitelisted now. |
| 1199 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); | 1219 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); |
| 1200 AssertNoInterstitial(false); | 1220 AssertNoInterstitial(false); |
| 1201 | 1221 |
| 1202 // The whitelisted page should remain whitelisted. | 1222 // The whitelisted page should remain whitelisted. |
| 1203 ui_test_utils::NavigateToURL(browser(), url); | 1223 ui_test_utils::NavigateToURL(browser(), url); |
| 1204 AssertNoInterstitial(false); | 1224 AssertNoInterstitial(false); |
| 1205 } | 1225 } |
| 1206 | 1226 |
| 1207 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistUnsaved) { | 1227 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, WhitelistUnsaved) { |
| 1208 GURL url = SetupWarningAndNavigate(); | 1228 GURL url = SetupWarningAndNavigate(browser()); |
| 1209 | 1229 |
| 1210 // Navigate without making a decision. | 1230 // Navigate without making a decision. |
| 1211 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); | 1231 ui_test_utils::NavigateToURL(browser(), GURL(kUnrelatedUrl)); |
| 1212 AssertNoInterstitial(false); | 1232 AssertNoInterstitial(false); |
| 1213 | 1233 |
| 1214 // The non-whitelisted page should now show an interstitial. | 1234 // The non-whitelisted page should now show an interstitial. |
| 1215 ui_test_utils::NavigateToURL(browser(), url); | 1235 ui_test_utils::NavigateToURL(browser(), url); |
| 1216 EXPECT_TRUE(WaitForReady()); | 1236 EXPECT_TRUE(WaitForReady(browser())); |
| 1217 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 1237 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 1218 AssertNoInterstitial(true); | 1238 AssertNoInterstitial(true); |
| 1219 } | 1239 } |
| 1220 | 1240 |
| 1241 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1242 VerifyHitReportSentOnSBERAndNotIncognito) { |
| 1243 // The extended reporting opt-in is presented in the interstitial for malware, |
| 1244 // phishing, and UwS threats. |
| 1245 const bool expect_threat_details = |
| 1246 SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
| 1247 testing::get<0>(GetParam())); |
| 1248 |
| 1249 scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
| 1250 new content::MessageLoopRunner); |
| 1251 if (expect_threat_details) |
| 1252 SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
| 1253 |
| 1254 browser()->profile()->GetPrefs()->SetBoolean( |
| 1255 prefs::kSafeBrowsingExtendedReportingEnabled, true); // set up SBER |
| 1256 GURL url = SetupWarningAndNavigate(browser()); // not incognito |
| 1257 EXPECT_TRUE(hit_report_sent()); |
| 1258 } |
| 1259 |
| 1260 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1261 VerifyHitReportNotSentOnIncognito) { |
| 1262 // The extended reporting opt-in is presented in the interstitial for malware, |
| 1263 // phishing, and UwS threats. |
| 1264 const bool expect_threat_details = |
| 1265 SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
| 1266 testing::get<0>(GetParam())); |
| 1267 |
| 1268 scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
| 1269 new content::MessageLoopRunner); |
| 1270 if (expect_threat_details) |
| 1271 SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
| 1272 |
| 1273 Browser* incognito_browser = CreateIncognitoBrowser(); |
| 1274 incognito_browser->profile()->GetPrefs()->SetBoolean( |
| 1275 prefs::kSafeBrowsingExtendedReportingEnabled, true); // set up SBER |
| 1276 GURL url = SetupWarningAndNavigate(incognito_browser); // incognito |
| 1277 EXPECT_FALSE(hit_report_sent()); |
| 1278 } |
| 1279 |
| 1280 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1281 VerifyHitReportNotSentWithoutSBER) { |
| 1282 // The extended reporting opt-in is presented in the interstitial for malware, |
| 1283 // phishing, and UwS threats. |
| 1284 const bool expect_threat_details = |
| 1285 SafeBrowsingBlockingPage::ShouldReportThreatDetails( |
| 1286 testing::get<0>(GetParam())); |
| 1287 |
| 1288 scoped_refptr<content::MessageLoopRunner> threat_report_sent_runner( |
| 1289 new content::MessageLoopRunner); |
| 1290 if (expect_threat_details) |
| 1291 SetReportSentCallback(threat_report_sent_runner->QuitClosure()); |
| 1292 |
| 1293 browser()->profile()->GetPrefs()->SetBoolean( |
| 1294 prefs::kSafeBrowsingExtendedReportingEnabled, false); // set up SBER |
| 1295 GURL url = SetupWarningAndNavigate(browser()); // not incognito |
| 1296 EXPECT_FALSE(hit_report_sent()); |
| 1297 } |
| 1298 |
| 1221 namespace { | 1299 namespace { |
| 1222 | 1300 |
| 1223 class SecurityStyleTestObserver : public content::WebContentsObserver { | 1301 class SecurityStyleTestObserver : public content::WebContentsObserver { |
| 1224 public: | 1302 public: |
| 1225 explicit SecurityStyleTestObserver(content::WebContents* web_contents) | 1303 explicit SecurityStyleTestObserver(content::WebContents* web_contents) |
| 1226 : content::WebContentsObserver(web_contents), | 1304 : content::WebContentsObserver(web_contents), |
| 1227 latest_security_style_(blink::kWebSecurityStyleUnknown), | 1305 latest_security_style_(blink::kWebSecurityStyleUnknown), |
| 1228 latest_security_style_explanations_() {} | 1306 latest_security_style_explanations_() {} |
| 1229 | 1307 |
| 1230 blink::WebSecurityStyle latest_security_style() const { | 1308 blink::WebSecurityStyle latest_security_style() const { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1279 // https://crbug.com/659709. | 1357 // https://crbug.com/659709. |
| 1280 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, | 1358 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1281 SecurityStateGoBack) { | 1359 SecurityStateGoBack) { |
| 1282 // Navigate to a page so that there is somewhere to go back to. | 1360 // Navigate to a page so that there is somewhere to go back to. |
| 1283 GURL start_url = | 1361 GURL start_url = |
| 1284 net::URLRequestMockHTTPJob::GetMockUrl("http://example.test"); | 1362 net::URLRequestMockHTTPJob::GetMockUrl("http://example.test"); |
| 1285 ui_test_utils::NavigateToURL(browser(), start_url); | 1363 ui_test_utils::NavigateToURL(browser(), start_url); |
| 1286 | 1364 |
| 1287 // The security indicator should be downgraded while the interstitial shows. | 1365 // The security indicator should be downgraded while the interstitial shows. |
| 1288 GURL bad_url = net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage); | 1366 GURL bad_url = net::URLRequestMockHTTPJob::GetMockUrl(kEmptyPage); |
| 1289 SetupWarningAndNavigate(); | 1367 SetupWarningAndNavigate(browser()); |
| 1290 WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); | 1368 WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
| 1291 ASSERT_TRUE(error_tab); | 1369 ASSERT_TRUE(error_tab); |
| 1292 ExpectSecurityIndicatorDowngrade(error_tab, 0u); | 1370 ExpectSecurityIndicatorDowngrade(error_tab, 0u); |
| 1293 content::NavigationEntry* entry = | 1371 content::NavigationEntry* entry = |
| 1294 error_tab->GetController().GetVisibleEntry(); | 1372 error_tab->GetController().GetVisibleEntry(); |
| 1295 ASSERT_TRUE(entry); | 1373 ASSERT_TRUE(entry); |
| 1296 ASSERT_EQ(bad_url, entry->GetURL()); | 1374 ASSERT_EQ(bad_url, entry->GetURL()); |
| 1297 | 1375 |
| 1298 // Go back. | 1376 // Go back. |
| 1299 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); | 1377 EXPECT_EQ(VISIBLE, GetVisibility("primary-button")); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1370 ui_test_utils::NavigateToURL(browser(), main_url); | 1448 ui_test_utils::NavigateToURL(browser(), main_url); |
| 1371 ExpectNoSecurityIndicatorDowngrade( | 1449 ExpectNoSecurityIndicatorDowngrade( |
| 1372 browser()->tab_strip_model()->GetActiveWebContents()); | 1450 browser()->tab_strip_model()->GetActiveWebContents()); |
| 1373 } | 1451 } |
| 1374 | 1452 |
| 1375 // Test that the security indicator is downgraded after clicking through a | 1453 // Test that the security indicator is downgraded after clicking through a |
| 1376 // Safe Browsing interstitial. | 1454 // Safe Browsing interstitial. |
| 1377 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, | 1455 IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
| 1378 SecurityState_HTTP) { | 1456 SecurityState_HTTP) { |
| 1379 // The security indicator should be downgraded while the interstitial shows. | 1457 // The security indicator should be downgraded while the interstitial shows. |
| 1380 SetupWarningAndNavigate(); | 1458 SetupWarningAndNavigate(browser()); |
| 1381 WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); | 1459 WebContents* error_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
| 1382 ASSERT_TRUE(error_tab); | 1460 ASSERT_TRUE(error_tab); |
| 1383 ExpectSecurityIndicatorDowngrade(error_tab, 0u); | 1461 ExpectSecurityIndicatorDowngrade(error_tab, 0u); |
| 1384 | 1462 |
| 1385 // The security indicator should still be downgraded post-interstitial. | 1463 // The security indicator should still be downgraded post-interstitial. |
| 1386 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); | 1464 EXPECT_TRUE(ClickAndWaitForDetach("proceed-link")); |
| 1387 AssertNoInterstitial(true); | 1465 AssertNoInterstitial(true); |
| 1388 WebContents* post_tab = browser()->tab_strip_model()->GetActiveWebContents(); | 1466 WebContents* post_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
| 1389 ASSERT_TRUE(post_tab); | 1467 ASSERT_TRUE(post_tab); |
| 1390 ExpectSecurityIndicatorDowngrade(post_tab, 0u); | 1468 ExpectSecurityIndicatorDowngrade(post_tab, 0u); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1487 | 1565 |
| 1488 INSTANTIATE_TEST_CASE_P( | 1566 INSTANTIATE_TEST_CASE_P( |
| 1489 SafeBrowsingBlockingPageIDNTestWithThreatType, | 1567 SafeBrowsingBlockingPageIDNTestWithThreatType, |
| 1490 SafeBrowsingBlockingPageIDNTest, | 1568 SafeBrowsingBlockingPageIDNTest, |
| 1491 testing::Combine(testing::Values(false, true), | 1569 testing::Combine(testing::Values(false, true), |
| 1492 testing::Values(SB_THREAT_TYPE_URL_MALWARE, | 1570 testing::Values(SB_THREAT_TYPE_URL_MALWARE, |
| 1493 SB_THREAT_TYPE_URL_PHISHING, | 1571 SB_THREAT_TYPE_URL_PHISHING, |
| 1494 SB_THREAT_TYPE_URL_UNWANTED))); | 1572 SB_THREAT_TYPE_URL_UNWANTED))); |
| 1495 | 1573 |
| 1496 } // namespace safe_browsing | 1574 } // namespace safe_browsing |
| OLD | NEW |