Index: chrome/browser/ui/webui/interstitials/interstitial_ui.cc |
diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc |
index f71f025747404ed21965cd4bf4d3ea24f05d87ff..fa8a0894763d0e109d847910b8728b71e8f018f5 100644 |
--- a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc |
+++ b/chrome/browser/ui/webui/interstitials/interstitial_ui.cc |
@@ -7,9 +7,11 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/captive_portal/captive_portal_service.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
+#include "chrome/browser/ssl/captive_portal_blocking_page.h" |
#include "chrome/browser/ssl/ssl_blocking_page.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/grit/browser_resources.h" |
@@ -46,6 +48,22 @@ class InterstitialHTMLSource : public content::URLDataSource { |
DISALLOW_COPY_AND_ASSIGN(InterstitialHTMLSource); |
}; |
+class FakeConnectionInfoDelegate : public CaptivePortalBlockingPage::Delegate { |
+ public: |
+ FakeConnectionInfoDelegate(bool is_wifi_connection, std::string wifi_ssid) |
+ : is_wifi_connection_(is_wifi_connection), wifi_ssid_(wifi_ssid) {} |
+ ~FakeConnectionInfoDelegate() override {} |
+ |
+ bool IsWifiConnection() const override { return is_wifi_connection_; } |
+ std::string GetWiFiSSID() const override { return wifi_ssid_; } |
+ |
+ private: |
+ const bool is_wifi_connection_; |
meacer
2015/06/19 21:23:18
no need for const for bool.
Bhanu Dev
2015/06/19 22:35:51
Done.
|
+ const std::string wifi_ssid_; |
meacer
2015/06/19 21:23:18
Use a reference here: |const std::string& wifi_ssi
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeConnectionInfoDelegate); |
+}; |
Bhanu Dev
2015/06/19 21:09:03
I am not sure if this is the correct place to plac
meacer
2015/06/19 21:23:18
Looks okay, it's obvious from the base class name
Bhanu Dev
2015/06/19 22:35:51
Done.
|
+ |
SSLBlockingPage* CreateSSLBlockingPage(content::WebContents* web_contents) { |
// Random parameters for SSL blocking page. |
int cert_error = net::ERR_CERT_CONTAINS_ERRORS; |
@@ -139,6 +157,47 @@ SafeBrowsingBlockingPage* CreateSafeBrowsingBlockingPage( |
resource); |
} |
+CaptivePortalBlockingPage* CreateCaptivePortalBlockingPage( |
+ content::WebContents* web_contents) { |
+ bool is_wifi_connection = 0; |
meacer
2015/06/19 21:23:19
false instead of 0.
Bhanu Dev
2015/06/19 22:35:51
Done.
|
+ GURL landing_url("https://captive.portal/login"); |
+ GURL request_url("https://google.com"); |
+ std::string wifi_ssid; |
meacer
2015/06/19 21:23:18
If no "wifi_name" query param is passed this will
|
+ |
+ std::string request_url_param; |
+ if (net::GetValueForKeyInQuery(web_contents->GetURL(), "url", |
+ &request_url_param)) { |
+ if (GURL(request_url_param).is_valid()) |
+ request_url = GURL(request_url_param); |
+ } |
+ std::string landing_url_param; |
+ if (net::GetValueForKeyInQuery(web_contents->GetURL(), "landing_page", |
+ &landing_url_param)) { |
+ if (GURL(landing_url_param).is_valid()) |
+ landing_url = GURL(landing_url_param); |
+ } |
+ std::string wifi_connection_param; |
+ if (net::GetValueForKeyInQuery(web_contents->GetURL(), "is_wifi", |
+ &wifi_connection_param)) { |
+ is_wifi_connection = wifi_connection_param == "1"; |
+ } |
+ std::string wifi_ssid_param; |
+ if (net::GetValueForKeyInQuery(web_contents->GetURL(), "wifi_name", |
+ &wifi_ssid_param)) { |
+ wifi_ssid = wifi_ssid_param; |
+ } |
+ FakeConnectionInfoDelegate* delegate = |
+ new FakeConnectionInfoDelegate(is_wifi_connection, wifi_ssid); |
+ net::SSLInfo ssl_info; |
+ ssl_info.cert = new net::X509Certificate( |
+ request_url.host(), "CA", base::Time::Max(), base::Time::Max()); |
+ CaptivePortalBlockingPage* blocking_page = new CaptivePortalBlockingPage( |
+ web_contents, request_url, landing_url, nullptr, ssl_info, |
+ base::Callback<void(bool)>()); |
+ blocking_page->SetDelegateForTesting(delegate); |
Bhanu Dev
2015/06/19 21:09:03
This is a testing function. I am not sure if can I
meacer
2015/06/19 21:23:19
Oh, right :( Let's make it a non-test method and a
|
+ return blocking_page; |
+} |
+ |
} // namespace |
InterstitialUI::InterstitialUI(content::WebUI* web_ui) |
@@ -186,6 +245,8 @@ void InterstitialHTMLSource::StartDataRequest( |
interstitial_delegate.reset(CreateSSLBlockingPage(web_contents_)); |
} else if (StartsWithASCII(path, "safebrowsing", true)) { |
interstitial_delegate.reset(CreateSafeBrowsingBlockingPage(web_contents_)); |
+ } else if (StartsWithASCII(path, "captiveportal", true)) { |
+ interstitial_delegate.reset(CreateCaptivePortalBlockingPage(web_contents_)); |
} |
std::string html; |