| Index: chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc
|
| diff --git a/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc b/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc
|
| index 73de3c8843e4f1438e9b024c3a7bef841ece6c12..857d469ab9015cc94a465a259ca2bb5d4749f8c8 100644
|
| --- a/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc
|
| +++ b/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc
|
| @@ -23,10 +23,12 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
|
|
| +namespace {
|
| // Partial text in the captive portal interstitial's main paragraph when the
|
| // login domain isn't displayed.
|
| const char kGenericLoginURLText[] = "its login page";
|
| const char kBrokenSSL[] = "https://broken.ssl";
|
| +const char kWiFiSSID[] = "WiFiSSID";
|
|
|
| // Returns true if the interstitial contains |text| in its body.
|
| bool IsInterstitialDisplayingText(content::InterstitialPage* interstitial,
|
| @@ -45,107 +47,146 @@ bool IsInterstitialDisplayingText(content::InterstitialPage* interstitial,
|
| return result;
|
| }
|
|
|
| +enum ExpectWiFi {
|
| + EXPECT_WIFI_NO,
|
| + EXPECT_WIFI_YES
|
| +};
|
| +
|
| +enum ExpectWiFiSSID {
|
| + EXPECT_WIFI_SSID_NO,
|
| + EXPECT_WIFI_SSID_YES
|
| +};
|
| +
|
| +enum ExpectLoginURL {
|
| + EXPECT_LOGIN_URL_NO,
|
| + EXPECT_LOGIN_URL_YES
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| class CaptivePortalBlockingPageTest : public InProcessBrowserTest {
|
| public:
|
| CaptivePortalBlockingPageTest() {}
|
|
|
| + void TestInterstitial(bool is_wifi_connection,
|
| + const std::string& wifi_ssid,
|
| + const GURL& login_url,
|
| + ExpectWiFi expect_wifi,
|
| + ExpectWiFiSSID expect_wifi_ssid,
|
| + ExpectLoginURL expect_login_url,
|
| + const std::string& expected_login_hostname);
|
| +
|
| + void TestInterstitial(bool is_wifi_connection,
|
| + const std::string& wifi_ssid,
|
| + const GURL& login_url,
|
| + ExpectWiFi expect_wifi,
|
| + ExpectWiFiSSID expect_wifi_ssid,
|
| + ExpectLoginURL expect_login_url);
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(CaptivePortalBlockingPageTest);
|
| };
|
|
|
| -// If the connection is not a Wi-Fi connection, the wired network version of the
|
| -// captive portal interstitial should be displayed.
|
| -IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| - ShowWiredNetworkInterstitial) {
|
| - const GURL kLandingUrl("http://captive.portal/landing_url");
|
| +void CaptivePortalBlockingPageTest::TestInterstitial(
|
| + bool is_wifi_connection,
|
| + const std::string& wifi_ssid,
|
| + const GURL& login_url,
|
| + ExpectWiFi expect_wifi,
|
| + ExpectWiFiSSID expect_wifi_ssid,
|
| + ExpectLoginURL expect_login_url,
|
| + const std::string& expected_login_hostname) {
|
| content::WebContents* contents =
|
| browser()->tab_strip_model()->GetActiveWebContents();
|
| DCHECK(contents);
|
| // Blocking page is owned by the interstitial.
|
| CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage(
|
| - contents, GURL(kBrokenSSL), kLandingUrl, base::Callback<void(bool)>());
|
| - blocking_page->SetWiFiConnectionForTesting(false);
|
| + contents, GURL(kBrokenSSL), login_url, base::Callback<void(bool)>());
|
| + blocking_page->SetWiFiConnectionForTesting(is_wifi_connection);
|
| + blocking_page->SetWiFiSSIDForTesting(wifi_ssid);
|
| blocking_page->Show();
|
|
|
| WaitForInterstitialAttach(contents);
|
| EXPECT_TRUE(
|
| WaitForRenderFrameReady(contents->GetInterstitialPage()->GetMainFrame()));
|
| - EXPECT_FALSE(
|
| - IsInterstitialDisplayingText(contents->GetInterstitialPage(), "Wi-Fi"));
|
| + EXPECT_EQ(expect_wifi == EXPECT_WIFI_YES,
|
| + IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| + "Wi-Fi"));
|
| + if (!wifi_ssid.empty()) {
|
| + EXPECT_EQ(expect_wifi_ssid == EXPECT_WIFI_SSID_YES,
|
| + IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| + wifi_ssid));
|
| + }
|
| + EXPECT_EQ(expect_login_url == EXPECT_LOGIN_URL_YES,
|
| + IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| + expected_login_hostname));
|
| + EXPECT_EQ(expect_login_url == EXPECT_LOGIN_URL_NO,
|
| + IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| + kGenericLoginURLText));
|
| }
|
|
|
| -// If the connection is a Wi-Fi connection, the Wi-Fi version of the captive
|
| -// portal interstitial should be displayed.
|
| +void CaptivePortalBlockingPageTest::TestInterstitial(
|
| + bool is_wifi_connection,
|
| + const std::string& wifi_ssid,
|
| + const GURL& login_url,
|
| + ExpectWiFi expect_wifi,
|
| + ExpectWiFiSSID expect_wifi_ssid,
|
| + ExpectLoginURL expect_login_url) {
|
| + TestInterstitial(is_wifi_connection, wifi_ssid, login_url,
|
| + expect_wifi, expect_wifi_ssid, expect_login_url,
|
| + login_url.host());
|
| +}
|
| +
|
| +// If the connection is not a Wi-Fi connection, the wired network version of the
|
| +// captive portal interstitial should be displayed.
|
| IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| - ShowWiFiInterstitial) {
|
| - const GURL kLandingUrl("http://captive.portal/landing_url");
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - DCHECK(contents);
|
| - // Blocking page is owned by the interstitial.
|
| - CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage(
|
| - contents, GURL(kBrokenSSL), kLandingUrl, base::Callback<void(bool)>());
|
| - blocking_page->SetWiFiConnectionForTesting(true);
|
| - blocking_page->Show();
|
| + WiredNetwork_LoginURL) {
|
| + TestInterstitial(false, kWiFiSSID, GURL("http://captive.portal/landing_url"),
|
| + EXPECT_WIFI_NO, EXPECT_WIFI_SSID_NO, EXPECT_LOGIN_URL_YES);
|
|
|
| - WaitForInterstitialAttach(contents);
|
| - EXPECT_TRUE(
|
| - WaitForRenderFrameReady(contents->GetInterstitialPage()->GetMainFrame()));
|
| - EXPECT_TRUE(
|
| - IsInterstitialDisplayingText(contents->GetInterstitialPage(), "Wi-Fi"));
|
| }
|
|
|
| -// The captive portal interstitial should show the login url if the login url
|
| -// is different than the captive portal ping url (i.e. the portal intercepts
|
| -// requests via HTTP redirects).
|
| +// Same as above, expect the login URL is the same as the captive portal ping
|
| +// url (i.e. the portal intercepts requests without using HTTP redirects), in
|
| +// which case the login URL shouldn't be displayed.
|
| IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| - ShowLoginDomainIfPortalRedirectsDetectionURL) {
|
| - const GURL kLandingUrl("http://captive.portal/landing_url");
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - DCHECK(contents);
|
| - // Blocking page is owned by the interstitial.
|
| - CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage(
|
| - contents, GURL(kBrokenSSL), kLandingUrl, base::Callback<void(bool)>());
|
| - blocking_page->SetWiFiConnectionForTesting(false);
|
| - blocking_page->Show();
|
| + WiredNetwork_NoLoginURL) {
|
| + const GURL kLandingUrl(captive_portal::CaptivePortalDetector::kDefaultURL);
|
| + TestInterstitial(false, kWiFiSSID, kLandingUrl,
|
| + EXPECT_WIFI_NO, EXPECT_WIFI_SSID_NO, EXPECT_LOGIN_URL_NO);
|
| +}
|
|
|
| - WaitForInterstitialAttach(contents);
|
| - EXPECT_TRUE(
|
| - WaitForRenderFrameReady(contents->GetInterstitialPage()->GetMainFrame()));
|
| +// If the connection is a Wi-Fi connection, the Wi-Fi version of the captive
|
| +// portal interstitial should be displayed.
|
| +IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| + WiFi_SSID_LoginURL) {
|
| + TestInterstitial(true, kWiFiSSID, GURL("http://captive.portal/landing_url"),
|
| + EXPECT_WIFI_YES, EXPECT_WIFI_SSID_YES, EXPECT_LOGIN_URL_YES);
|
| +}
|
|
|
| - EXPECT_TRUE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kLandingUrl.host()));
|
| - EXPECT_FALSE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kGenericLoginURLText));
|
| +// Same as above, with login URL but no SSID.
|
| +IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| + WiFi_NoSSID_LoginURL) {
|
| + TestInterstitial(true, "", GURL("http://captive.portal/landing_url"),
|
| + EXPECT_WIFI_YES, EXPECT_WIFI_SSID_NO, EXPECT_LOGIN_URL_YES);
|
| }
|
|
|
| -// The captive portal interstitial should show a generic text if the login url
|
| -// is the same as the captive portal ping url (i.e. the portal intercepts
|
| -// requests without using HTTP redirects).
|
| +// Same as above, with SSID but no login URL.
|
| IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| - DontShowLoginDomainIfPortalDoesntRedirectDetectionURL) {
|
| + WiFi_SSID_NoLoginURL) {
|
| const GURL kLandingUrl(captive_portal::CaptivePortalDetector::kDefaultURL);
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - DCHECK(contents);
|
| - // Blocking page is owned by the interstitial.
|
| - CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage(
|
| - contents, GURL(kBrokenSSL), kLandingUrl, base::Callback<void(bool)>());
|
| - blocking_page->SetWiFiConnectionForTesting(false);
|
| - blocking_page->Show();
|
| -
|
| - WaitForInterstitialAttach(contents);
|
| - EXPECT_TRUE(
|
| - WaitForRenderFrameReady(contents->GetInterstitialPage()->GetMainFrame()));
|
| + TestInterstitial(true, kWiFiSSID, kLandingUrl,
|
| + EXPECT_WIFI_YES, EXPECT_WIFI_SSID_YES, EXPECT_LOGIN_URL_NO);
|
| +}
|
|
|
| - EXPECT_FALSE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kLandingUrl.host()));
|
| - EXPECT_TRUE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kGenericLoginURLText));
|
| +// Same as above, with no SSID and no login URL.
|
| +IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageTest,
|
| + WiFi_NoSSID_NoLoginURL) {
|
| + const GURL kLandingUrl(captive_portal::CaptivePortalDetector::kDefaultURL);
|
| + TestInterstitial(true, "", kLandingUrl,
|
| + EXPECT_WIFI_YES, EXPECT_WIFI_SSID_NO, EXPECT_LOGIN_URL_NO);
|
| }
|
|
|
| -class CaptivePortalBlockingPageIDNTest : public InProcessBrowserTest {
|
| +class CaptivePortalBlockingPageIDNTest : public CaptivePortalBlockingPageTest {
|
| public:
|
| // InProcessBrowserTest:
|
| void SetUpOnMainThread() override {
|
| @@ -155,7 +196,7 @@ public:
|
| }
|
| };
|
|
|
| -// Same as ShowLoginDomainIfPortalRedirectsDetectionURL, except the login
|
| +// Same as CaptivePortalBlockingPageTest.WiredNetwork_LoginURL, except the login
|
| // domain is an IDN.
|
| IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageIDNTest,
|
| ShowLoginIDNIfPortalRedirectsDetectionURL) {
|
| @@ -168,21 +209,7 @@ IN_PROC_BROWSER_TEST_F(CaptivePortalBlockingPageIDNTest,
|
| base::StringPrintf("http://%s/landing_url", kHostname);
|
| GURL landing_url(landing_url_spec);
|
|
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - DCHECK(contents);
|
| - // Blocking page is owned by the interstitial.
|
| - CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage(
|
| - contents, GURL(kBrokenSSL), landing_url, base::Callback<void(bool)>());
|
| - blocking_page->SetWiFiConnectionForTesting(false);
|
| - blocking_page->Show();
|
| -
|
| - WaitForInterstitialAttach(contents);
|
| - EXPECT_TRUE(
|
| - WaitForRenderFrameReady(contents->GetInterstitialPage()->GetMainFrame()));
|
| -
|
| - EXPECT_TRUE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kHostnameJSUnicode));
|
| - EXPECT_FALSE(IsInterstitialDisplayingText(contents->GetInterstitialPage(),
|
| - kGenericLoginURLText));
|
| + TestInterstitial(false, kWiFiSSID, landing_url,
|
| + EXPECT_WIFI_NO, EXPECT_WIFI_SSID_NO, EXPECT_LOGIN_URL_YES,
|
| + kHostnameJSUnicode);
|
| }
|
|
|