Index: chrome/browser/captive_portal/captive_portal_tab_helper.cc |
diff --git a/chrome/browser/captive_portal/captive_portal_tab_helper.cc b/chrome/browser/captive_portal/captive_portal_tab_helper.cc |
index bd4895ba17342cc89d57e098a669ab17a8d0c978..5fcc06f474dc94b6983cb9b2d2521d3014637fdf 100644 |
--- a/chrome/browser/captive_portal/captive_portal_tab_helper.cc |
+++ b/chrome/browser/captive_portal/captive_portal_tab_helper.cc |
@@ -31,6 +31,12 @@ using content::ResourceType; |
DEFINE_WEB_CONTENTS_USER_DATA_KEY(CaptivePortalTabHelper); |
+// The delay before displaying the SSL interstitial for cert errors. |
+// - If a "captive portal detected" result arrives in this many seconds, |
+// a captive portal interstitial is displayed. |
+// - Otherwise, an SSL interstitial is displayed. |
+const int kDefaultSSLInterstitialDisplayDelay = 2; |
+ |
CaptivePortalTabHelper::CaptivePortalTabHelper( |
content::WebContents* web_contents) |
: content::WebContentsObserver(web_contents), |
@@ -42,11 +48,13 @@ CaptivePortalTabHelper::CaptivePortalTabHelper( |
new CaptivePortalTabReloader( |
profile_, |
web_contents, |
- base::Bind(&CaptivePortalTabHelper::OpenLoginTab, |
- base::Unretained(this)))), |
+ base::Bind(&CaptivePortalTabHelper::OpenLoginTabForWebContents, |
+ web_contents, false))), |
login_detector_(new CaptivePortalLoginDetector(profile_)), |
web_contents_(web_contents), |
pending_error_code_(net::OK), |
+ ssl_error_delay_( |
+ base::TimeDelta::FromSeconds(kDefaultSSLInterstitialDisplayDelay)), |
mmenke
2014/10/30 19:28:01
I don't think this value makes any sense here - th
meacer
2014/11/06 21:21:55
Yes, for example SSLCertErrorLogin will fail if it
mmenke
2014/11/06 22:12:40
I want to play around with this locally to better
|
provisional_render_view_host_(NULL) { |
registrar_.Add(this, |
chrome::NOTIFICATION_CAPTIVE_PORTAL_CHECK_RESULT, |
@@ -59,6 +67,15 @@ CaptivePortalTabHelper::CaptivePortalTabHelper( |
CaptivePortalTabHelper::~CaptivePortalTabHelper() { |
} |
+base::TimeDelta CaptivePortalTabHelper::GetSSLErrorDelay() const { |
+ return ssl_error_delay_; |
+} |
+ |
+void CaptivePortalTabHelper::SetSSLErrorDelayForTest( |
+ base::TimeDelta ssl_error_delay) { |
+ ssl_error_delay_ = ssl_error_delay; |
+} |
+ |
void CaptivePortalTabHelper::RenderViewDeleted( |
content::RenderViewHost* render_view_host) { |
// This can happen when a cross-process navigation is aborted, either by |
@@ -235,8 +252,11 @@ CaptivePortalTabReloader* CaptivePortalTabHelper::GetTabReloaderForTest() { |
return tab_reloader_.get(); |
} |
-void CaptivePortalTabHelper::OpenLoginTab() { |
- Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); |
+// static |
+void CaptivePortalTabHelper::OpenLoginTabForWebContents( |
mmenke
2014/10/30 19:28:01
Definition order should match declaration order.
meacer
2014/11/06 21:21:55
Done.
|
+ content::WebContents* web_contents, |
+ bool focus) { |
+ Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
// If the Profile doesn't have a tabbed browser window open, do nothing. |
if (!browser) |
@@ -247,21 +267,25 @@ void CaptivePortalTabHelper::OpenLoginTab() { |
// TODO(mmenke): Consider focusing that tab, at least if this is the tab |
// helper for the currently active tab for the profile. |
for (int i = 0; i < browser->tab_strip_model()->count(); ++i) { |
- content::WebContents* web_contents = |
+ content::WebContents* contents = |
browser->tab_strip_model()->GetWebContentsAt(i); |
CaptivePortalTabHelper* captive_portal_tab_helper = |
- CaptivePortalTabHelper::FromWebContents(web_contents); |
- if (captive_portal_tab_helper->IsLoginTab()) |
+ CaptivePortalTabHelper::FromWebContents(contents); |
+ if (captive_portal_tab_helper->IsLoginTab()) { |
+ if (focus) |
+ browser->tab_strip_model()->ActivateTabAt(i, false); |
return; |
+ } |
} |
// Otherwise, open a login tab. Only end up here when a captive portal result |
- // was received, so it's safe to assume |profile_| has a CaptivePortalService. |
- content::WebContents* web_contents = chrome::AddSelectedTabWithURL( |
- browser, |
- CaptivePortalServiceFactory::GetForProfile(profile_)->test_url(), |
- ui::PAGE_TRANSITION_TYPED); |
+ // was received, so it's safe to assume profile has a CaptivePortalService. |
+ content::WebContents* new_contents = chrome::AddSelectedTabWithURL( |
+ browser, |
+ CaptivePortalServiceFactory::GetForProfile( |
+ browser->profile())->test_url(), |
+ ui::PAGE_TRANSITION_TYPED); |
CaptivePortalTabHelper* captive_portal_tab_helper = |
- CaptivePortalTabHelper::FromWebContents(web_contents); |
+ CaptivePortalTabHelper::FromWebContents(new_contents); |
captive_portal_tab_helper->SetIsLoginTab(); |
} |