OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/signin/signin_promo.h" | 5 #include "chrome/browser/signin/signin_promo.h" |
6 | 6 |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 27 matching lines...) Expand all Loading... | |
38 #include "net/base/network_change_notifier.h" | 38 #include "net/base/network_change_notifier.h" |
39 #include "net/base/url_util.h" | 39 #include "net/base/url_util.h" |
40 #include "ui/base/l10n/l10n_util.h" | 40 #include "ui/base/l10n/l10n_util.h" |
41 | 41 |
42 using content::WebContents; | 42 using content::WebContents; |
43 | 43 |
44 namespace { | 44 namespace { |
45 | 45 |
46 const char kSignInPromoQueryKeyAutoClose[] = "auto_close"; | 46 const char kSignInPromoQueryKeyAutoClose[] = "auto_close"; |
47 const char kSignInPromoQueryKeyContinue[] = "continue"; | 47 const char kSignInPromoQueryKeyContinue[] = "continue"; |
48 const char kSignInPromoQueryKeyContinueUrl[] = "continueUrl"; | |
guohui
2014/03/24 20:55:58
for better consistency with other param names such
Ilya Sherman
2014/03/26 08:21:39
Done.
| |
48 const char kSignInPromoQueryKeySource[] = "source"; | 49 const char kSignInPromoQueryKeySource[] = "source"; |
49 const char kSignInPromoQueryKeyConstrained[] = "constrained"; | 50 const char kSignInPromoQueryKeyConstrained[] = "constrained"; |
50 | 51 |
51 // Gaia cannot support about:blank as a continue URL, so using a hosted blank | 52 // Gaia cannot support about:blank as a continue URL, so using a hosted blank |
52 // page instead. | 53 // page instead. |
53 const char kSignInLandingUrlPrefix[] = | 54 const char kSignInLandingUrlPrefix[] = |
54 "https://www.google.com/intl/%s/chrome/blank.html"; | 55 "https://www.google.com/intl/%s/chrome/blank.html"; |
55 | 56 |
56 // The maximum number of times we want to show the sign in promo at startup. | 57 // The maximum number of times we want to show the sign in promo at startup. |
57 const int kSignInPromoShowAtStartupMaximum = 10; | 58 const int kSignInPromoShowAtStartupMaximum = 10; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
171 std::string url = base::StringPrintf(kSignInLandingUrlPrefix, locale.c_str()); | 172 std::string url = base::StringPrintf(kSignInLandingUrlPrefix, locale.c_str()); |
172 base::StringAppendF(&url, "?%s=%d", option, value); | 173 base::StringAppendF(&url, "?%s=%d", option, value); |
173 return GURL(url); | 174 return GURL(url); |
174 } | 175 } |
175 | 176 |
176 GURL GetPromoURL(Source source, bool auto_close) { | 177 GURL GetPromoURL(Source source, bool auto_close) { |
177 return GetPromoURL(source, auto_close, false /* is_constrained */); | 178 return GetPromoURL(source, auto_close, false /* is_constrained */); |
178 } | 179 } |
179 | 180 |
180 GURL GetPromoURL(Source source, bool auto_close, bool is_constrained) { | 181 GURL GetPromoURL(Source source, bool auto_close, bool is_constrained) { |
182 return GetPromoURLWithContinueURL(source, auto_close, is_constrained, GURL()); | |
183 } | |
184 | |
185 GURL GetPromoURLWithContinueURL(Source source, | |
186 bool auto_close, | |
187 bool is_constrained, | |
188 GURL continue_url) { | |
181 DCHECK_NE(SOURCE_UNKNOWN, source); | 189 DCHECK_NE(SOURCE_UNKNOWN, source); |
182 | 190 |
183 if (!switches::IsEnableWebBasedSignin()) { | 191 if (!switches::IsEnableWebBasedSignin()) { |
184 std::string url(chrome::kChromeUIChromeSigninURL); | 192 std::string url(chrome::kChromeUIChromeSigninURL); |
185 base::StringAppendF(&url, "?%s=%d", kSignInPromoQueryKeySource, source); | 193 base::StringAppendF(&url, "?%s=%d", kSignInPromoQueryKeySource, source); |
186 if (auto_close) | 194 if (auto_close) |
187 base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyAutoClose); | 195 base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyAutoClose); |
188 if (is_constrained) | 196 if (is_constrained) |
189 base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyConstrained); | 197 base::StringAppendF(&url, "&%s=1", kSignInPromoQueryKeyConstrained); |
198 if (!continue_url.is_empty()) { | |
199 DCHECK(continue_url.is_valid()); | |
200 std::string escaped_continue_url = | |
201 net::EscapeQueryParamValue(continue_url.spec(), false); | |
202 base::StringAppendF(&url, | |
203 "&%s=%s", | |
204 kSignInPromoQueryKeyContinueUrl, | |
205 escaped_continue_url.c_str()); | |
206 } | |
190 return GURL(url); | 207 return GURL(url); |
191 } | 208 } |
192 | 209 |
193 // Build a Gaia-based URL that can be used to sign the user into chrome. | 210 // Build a Gaia-based URL that can be used to sign the user into chrome. |
194 // There are required request parameters: | 211 // There are required request parameters: |
195 // | 212 // |
196 // - tell Gaia which service the user is signing into. In this case, | 213 // - tell Gaia which service the user is signing into. In this case, |
197 // a chrome sign in uses the service "chromiumsync" | 214 // a chrome sign in uses the service "chromiumsync" |
198 // - provide a continue URL. This is the URL that Gaia will redirect to | 215 // - provide a continue URL. This is the URL that Gaia will redirect to |
199 // once the sign is complete. | 216 // once the sign is complete. |
200 // | 217 // |
201 // The continue URL includes a source parameter that can be extracted using | 218 // The continue URL includes a source parameter that can be extracted using |
202 // the function GetSourceForSignInPromoURL() below. This is used to know | 219 // the function GetSourceForSignInPromoURL() below. This is used to know |
203 // which of the chrome sign in access points was used to sign the user in. | 220 // which of the chrome sign in access points was used to sign the user in. |
204 // It is also parsed for the |auto_close| flag, which indicates that the tab | 221 // It is also parsed for the |auto_close| flag, which indicates that the tab |
205 // must be closed after sync setup is successful. | 222 // must be closed after sync setup is successful. |
206 // See OneClickSigninHelper for details. | 223 // See OneClickSigninHelper for details. |
207 std::string query_string = "?service=chromiumsync&sarp=1"; | 224 std::string query_string = "?service=chromiumsync&sarp=1"; |
208 | 225 |
209 std::string continue_url = GetLandingURL(kSignInPromoQueryKeySource, | 226 DCHECK(continue_url.is_empty()); |
210 static_cast<int>(source)).spec(); | 227 std::string continue_url_str = GetLandingURL(kSignInPromoQueryKeySource, |
211 if (auto_close) | 228 static_cast<int>(source)).spec(); |
212 base::StringAppendF(&continue_url, "&%s=1", kSignInPromoQueryKeyAutoClose); | 229 if (auto_close) { |
230 base::StringAppendF( | |
231 &continue_url_str, "&%s=1", kSignInPromoQueryKeyAutoClose); | |
232 } | |
213 | 233 |
214 base::StringAppendF(&query_string, "&%s=%s", kSignInPromoQueryKeyContinue, | 234 base::StringAppendF( |
215 net::EscapeQueryParamValue( | 235 &query_string, |
216 continue_url, false).c_str()); | 236 "&%s=%s", |
237 kSignInPromoQueryKeyContinue, | |
238 net::EscapeQueryParamValue(continue_url_str, false).c_str()); | |
217 | 239 |
218 return GaiaUrls::GetInstance()->service_login_url().Resolve(query_string); | 240 return GaiaUrls::GetInstance()->service_login_url().Resolve(query_string); |
219 } | 241 } |
220 | 242 |
221 GURL GetReauthURL(Profile* profile, const std::string& account_id) { | 243 GURL GetReauthURL(Profile* profile, const std::string& account_id) { |
222 if (switches::IsEnableWebBasedSignin()) { | 244 if (switches::IsEnableWebBasedSignin()) { |
223 return net::AppendQueryParameter( | 245 return net::AppendQueryParameter( |
224 signin::GetPromoURL(signin::SOURCE_SETTINGS, true), | 246 signin::GetPromoURL(signin::SOURCE_SETTINGS, true), |
225 "Email", | 247 "Email", |
226 account_id); | 248 account_id); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 prefs::kSignInPromoShowOnFirstRunAllowed, | 323 prefs::kSignInPromoShowOnFirstRunAllowed, |
302 true, | 324 true, |
303 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 325 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
304 registry->RegisterBooleanPref( | 326 registry->RegisterBooleanPref( |
305 prefs::kSignInPromoShowNTPBubble, | 327 prefs::kSignInPromoShowNTPBubble, |
306 false, | 328 false, |
307 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 329 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
308 } | 330 } |
309 | 331 |
310 } // namespace signin | 332 } // namespace signin |
OLD | NEW |