Chromium Code Reviews| 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(); |
| } |