Index: chrome/browser/ssl/captive_portal_blocking_page.cc |
diff --git a/chrome/browser/ssl/captive_portal_blocking_page.cc b/chrome/browser/ssl/captive_portal_blocking_page.cc |
index 97d6f88c93022db59de6f9e07451e2276bfbc15c..216e6baf6c549a8ff59f9b458809994108df62a1 100644 |
--- a/chrome/browser/ssl/captive_portal_blocking_page.cc |
+++ b/chrome/browser/ssl/captive_portal_blocking_page.cc |
@@ -4,16 +4,22 @@ |
#include "chrome/browser/ssl/captive_portal_blocking_page.h" |
+#include "base/i18n/rtl.h" |
#include "base/metrics/histogram.h" |
+#include "base/prefs/pref_service.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
+#include "chrome/browser/captive_portal/captive_portal_tab_helper.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/pref_names.h" |
+#include "components/captive_portal/captive_portal_detector.h" |
#include "content/public/browser/web_contents.h" |
#include "grit/generated_resources.h" |
+#include "net/base/net_util.h" |
#include "ui/base/l10n/l10n_util.h" |
-#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) |
-#include "chrome/browser/captive_portal/captive_portal_tab_helper.h" |
+#if !defined(ENABLE_CAPTIVE_PORTAL_DETECTION) |
+#error This file must be built with ENABLE_CAPTIVE_PORTAL_DETECTION flag. |
felt
2015/01/22 20:05:25
presumably this is already true in the build files
meacer
2015/01/22 20:22:19
Yes it's already true. Trying to compile without t
|
#endif |
namespace { |
@@ -42,12 +48,12 @@ const void* CaptivePortalBlockingPage::kTypeForTesting = |
CaptivePortalBlockingPage::CaptivePortalBlockingPage( |
content::WebContents* web_contents, |
const GURL& request_url, |
+ const GURL& login_url, |
const base::Callback<void(bool)>& callback) |
: SecurityInterstitialPage(web_contents, request_url), |
+ login_url_(login_url), |
callback_(callback) { |
-#if !defined(ENABLE_CAPTIVE_PORTAL_DETECTION) |
- NOTREACHED(); |
-#endif |
+ DCHECK(login_url_.is_valid()); |
RecordUMA(SHOW_ALL); |
} |
@@ -79,12 +85,33 @@ void CaptivePortalBlockingPage::PopulateInterstitialStrings( |
l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_BUTTON_OPEN_LOGIN_PAGE)); |
load_time_data->SetString("tabTitle", |
l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_TITLE)); |
- load_time_data->SetString( |
- "primaryParagraph", |
- l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH)); |
load_time_data->SetString("heading", |
l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_HEADING)); |
+ if (login_url_.spec() == captive_portal::CaptivePortalDetector::kDefaultURL) { |
+ // Captive portal may intercept requests without HTTP redirects, in which |
+ // case the login url would be the same as the captive portal detection url. |
+ // Don't show the login url in that case. |
+ load_time_data->SetString( |
+ "primaryParagraph", |
+ l10n_util::GetStringUTF16( |
+ IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH_NO_LOGIN_URL)); |
felt
2015/01/22 20:05:25
In the future, could we handle this case by provid
mmenke
2015/01/22 20:10:48
We already have one (Namely captive_portal::Captiv
felt
2015/01/22 20:13:24
Could we link to it even if we don't display the h
mmenke
2015/01/22 20:16:25
There's a login button elsewhere on the page. Not
meacer
2015/01/22 20:22:19
Well the button works in practive too :) We can li
mmenke
2015/01/22 20:26:57
What I was thinking of is that if the user navigat
meacer
2015/01/22 20:54:15
Just checked it, we still keep the tab as login ta
meacer
2015/01/22 20:55:12
(or navigating to an http page for that matter)
mmenke
2015/01/22 21:00:50
Thanks for investigating! Yea, if the user naviga
meacer
2015/01/22 21:26:57
Sure, I'm happy to look at this. I realized I test
|
+ } else { |
+ std::string languages; |
+ Profile* profile = Profile::FromBrowserContext( |
+ web_contents()->GetBrowserContext()); |
+ if (profile) |
+ languages = profile->GetPrefs()->GetString(prefs::kAcceptLanguages); |
+ |
+ base::string16 login_host = net::IDNToUnicode(login_url_.host(), languages); |
felt
2015/01/22 20:05:25
is it ok that |languages| might never be assigned
meacer
2015/01/22 20:22:19
If |languages| is empty, net::IDNToUnicode will de
felt
2015/01/22 22:51:34
k
|
+ if (base::i18n::IsRTL()) |
+ base::i18n::WrapStringWithLTRFormatting(&login_host); |
+ load_time_data->SetString( |
+ "primaryParagraph", |
+ l10n_util::GetStringFUTF16(IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH, |
felt
2015/01/22 20:13:24
It looks like this just sets the login page as tex
meacer
2015/01/22 20:22:19
As I mentioned above, the mocks didn't have the li
meacer
2015/01/22 20:23:13
And yes, the login button does that already.
felt
2015/01/22 22:51:34
ok then nevermind me i was confused, i thought the
|
+ login_host)); |
+ } |
+ |
// Fill the empty strings to avoid getting debug warnings. |
load_time_data->SetString("openDetails", base::string16()); |
load_time_data->SetString("closeDetails", base::string16()); |
@@ -96,8 +123,6 @@ void CaptivePortalBlockingPage::CommandReceived(const std::string& command) { |
// The response has quotes around it. |
if (command == std::string("\"") + kOpenLoginPageCommand + "\"") { |
RecordUMA(OPEN_LOGIN_PAGE); |
-#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) |
CaptivePortalTabHelper::OpenLoginTabForWebContents(web_contents(), true); |
-#endif |
} |
} |