| 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 1920c94cd95e3f5e7028a15231f8800014202752..4107743f3f54f61d2322b57e25f73759e2ad0c75 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
|
| @@ -43,6 +43,7 @@
|
| #include "components/safe_browsing_db/test_database_manager.h"
|
| #include "components/safe_browsing_db/util.h"
|
| #include "components/safe_browsing_db/v4_protocol_manager_util.h"
|
| +#include "components/security_interstitials/content/security_interstitial_controller_client.h"
|
| #include "components/security_interstitials/core/controller_client.h"
|
| #include "components/security_interstitials/core/metrics_helper.h"
|
| #include "components/security_interstitials/core/urls.h"
|
| @@ -58,6 +59,7 @@
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/test_browser_thread.h"
|
| +#include "content/public/test/test_navigation_observer.h"
|
| #include "content/public/test/test_utils.h"
|
| #include "net/cert/cert_verify_result.h"
|
| #include "net/cert/mock_cert_verifier.h"
|
| @@ -732,6 +734,28 @@ class SafeBrowsingBlockingPageBrowserTest
|
| ->hit_report_sent();
|
| }
|
|
|
| + // Helper method for LearnMore test below. Implemented as a test fixture
|
| + // method instead of in the test below because the whole test fixture class
|
| + // is friended by SafeBrowsingBlockingPage.
|
| + void MockHelpCenterUrl(InterstitialPage* interstitial_page) {
|
| + ASSERT_TRUE(https_server_.Start());
|
| + scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate());
|
| + net::CertVerifyResult verify_result;
|
| + verify_result.is_issued_by_known_root = true;
|
| + verify_result.verified_cert = cert;
|
| + verify_result.cert_status = 0;
|
| + mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK);
|
| +
|
| + SafeBrowsingBlockingPage* sb_interstitial =
|
| + static_cast<SafeBrowsingBlockingPage*>(
|
| + interstitial_page->GetDelegateForTesting());
|
| + security_interstitials::SecurityInterstitialControllerClient* client =
|
| + sb_interstitial->controller();
|
| +
|
| + client->SetBaseHelpCenterUrlForTesting(
|
| + https_server_.GetURL("/title1.html"));
|
| + }
|
| +
|
| protected:
|
| TestThreatDetailsFactory details_factory_;
|
|
|
| @@ -798,12 +822,35 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, DontProceed) {
|
| IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, VisitWhitePaper) {
|
| SetupWarningAndNavigate(browser());
|
|
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
| + WebContents* interstitial_tab =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ASSERT_TRUE(interstitial_tab);
|
| +
|
| EXPECT_EQ(VISIBLE, GetVisibility("whitepaper-link"));
|
| - EXPECT_TRUE(ClickAndWaitForDetach("whitepaper-link"));
|
| + content::TestNavigationObserver nav_observer(nullptr);
|
| + nav_observer.StartWatchingNewWebContents();
|
| + EXPECT_TRUE(Click("whitepaper-link"));
|
|
|
| - AssertNoInterstitial(false); // Assert the interstitial is gone
|
| - EXPECT_EQ(GetWhitePaperUrl(),
|
| - browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
|
| + nav_observer.Wait();
|
| +
|
| + EXPECT_EQ(2, browser()->tab_strip_model()->count());
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
|
| +
|
| + // Assert the interstitial is not present in the foreground tab.
|
| + AssertNoInterstitial(false);
|
| +
|
| + // Foreground tab displays the help center.
|
| + WebContents* new_tab = browser()->tab_strip_model()->GetActiveWebContents();
|
| + ASSERT_TRUE(new_tab);
|
| + EXPECT_EQ(GetWhitePaperUrl(), new_tab->GetURL());
|
| +
|
| + // Interstitial should still display in the background tab.
|
| + browser()->tab_strip_model()->ActivateTabAt(0, true);
|
| + EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
|
| + EXPECT_EQ(interstitial_tab,
|
| + browser()->tab_strip_model()->GetActiveWebContents());
|
| + EXPECT_TRUE(YesInterstitial());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, Proceed) {
|
| @@ -1112,17 +1159,35 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest,
|
|
|
| IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, LearnMore) {
|
| SetupWarningAndNavigate(browser());
|
| - EXPECT_TRUE(ClickAndWaitForDetach("learn-more-link"));
|
| - AssertNoInterstitial(false); // Assert the interstitial is gone
|
|
|
| - // We are in the help page.
|
| - EXPECT_EQ(
|
| - GURL("https://support.google.com/chrome/answer/99020").GetWithEmptyPath(),
|
| - browser()
|
| - ->tab_strip_model()
|
| - ->GetActiveWebContents()
|
| - ->GetURL()
|
| - .GetWithEmptyPath());
|
| + WebContents* interstitial_tab =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ASSERT_TRUE(interstitial_tab);
|
| +
|
| + MockHelpCenterUrl(interstitial_tab->GetInterstitialPage());
|
| +
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
| +
|
| + content::TestNavigationObserver nav_observer(nullptr);
|
| + nav_observer.StartWatchingNewWebContents();
|
| + SendCommand(security_interstitials::CMD_OPEN_HELP_CENTER);
|
| + nav_observer.Wait();
|
| +
|
| + // A new tab has been opened.
|
| + EXPECT_EQ(2, browser()->tab_strip_model()->count());
|
| +
|
| + // Interstitial does not display in the foreground tab.
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
|
| + WebContents* new_tab = browser()->tab_strip_model()->GetWebContentsAt(1);
|
| + ASSERT_TRUE(new_tab);
|
| + EXPECT_FALSE(new_tab->ShowingInterstitialPage());
|
| +
|
| + // Interstitial still displays in the background tab.
|
| + browser()->tab_strip_model()->ActivateTabAt(0, true);
|
| + EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
|
| + EXPECT_EQ(interstitial_tab,
|
| + browser()->tab_strip_model()->GetActiveWebContents());
|
| + EXPECT_TRUE(YesInterstitial());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest,
|
|
|