Index: chrome/browser/signin/signin_promo.cc |
diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc |
index be633aca22a9e59eab23075232c91d18422a8444..82faab613b838696b149ff1ed377b0b4a0cd4851 100644 |
--- a/chrome/browser/signin/signin_promo.cc |
+++ b/chrome/browser/signin/signin_promo.cc |
@@ -45,6 +45,7 @@ namespace { |
const char kSignInPromoQueryKeyAutoClose[] = "auto_close"; |
const char kSignInPromoQueryKeyContinue[] = "continue"; |
+const char kSignInPromoQueryKeyContinueUrl[] = "continueUrl"; |
const char kSignInPromoQueryKeySource[] = "source"; |
const char kSignInPromoQueryKeyConstrained[] = "constrained"; |
@@ -178,6 +179,13 @@ GURL GetPromoURL(Source source, bool auto_close) { |
} |
GURL GetPromoURL(Source source, bool auto_close, bool is_constrained) { |
+ return GetPromoURLWithContinueURL(source, auto_close, is_constrained, GURL()); |
+} |
+ |
+GURL GetPromoURLWithContinueURL(Source source, |
+ bool auto_close, |
+ bool is_constrained, |
+ GURL continue_url) { |
DCHECK_NE(SOURCE_UNKNOWN, source); |
if (!switches::IsEnableWebBasedSignin()) { |
@@ -187,6 +195,15 @@ GURL GetPromoURL(Source source, bool auto_close, bool is_constrained) { |
base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyAutoClose); |
if (is_constrained) |
base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyConstrained); |
+ if (!continue_url.is_empty()) { |
+ DCHECK(continue_url.is_valid()); |
+ std::string escaped_continue_url = |
+ net::EscapeQueryParamValue(continue_url.spec(), false); |
+ base::StringAppendF(&url, |
+ "&%s=%s", |
+ kSignInPromoQueryKeyContinueUrl, |
+ escaped_continue_url.c_str()); |
+ } |
return GURL(url); |
} |
@@ -206,14 +223,19 @@ GURL GetPromoURL(Source source, bool auto_close, bool is_constrained) { |
// See OneClickSigninHelper for details. |
std::string query_string = "?service=chromiumsync&sarp=1"; |
- std::string continue_url = GetLandingURL(kSignInPromoQueryKeySource, |
- static_cast<int>(source)).spec(); |
- if (auto_close) |
- base::StringAppendF(&continue_url, "&%s=1", kSignInPromoQueryKeyAutoClose); |
+ DCHECK(continue_url.is_empty()); |
+ std::string continue_url_str = GetLandingURL(kSignInPromoQueryKeySource, |
+ static_cast<int>(source)).spec(); |
+ if (auto_close) { |
+ base::StringAppendF( |
+ &continue_url_str, "&%s=1", kSignInPromoQueryKeyAutoClose); |
+ } |
- base::StringAppendF(&query_string, "&%s=%s", kSignInPromoQueryKeyContinue, |
- net::EscapeQueryParamValue( |
- continue_url, false).c_str()); |
+ base::StringAppendF( |
+ &query_string, |
+ "&%s=%s", |
+ kSignInPromoQueryKeyContinue, |
+ net::EscapeQueryParamValue(continue_url_str, false).c_str()); |
return GaiaUrls::GetInstance()->service_login_url().Resolve(query_string); |
} |