Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: chrome/browser/ui/sync/one_click_signin_helper.cc

Issue 777143003: Clean up straggler classes to use embedded signin in page in the new profiles world. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/sync/one_click_signin_helper.h" 5 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 223
224 // Add a specific email to the list of emails rejected for one-click 224 // Add a specific email to the list of emails rejected for one-click
225 // sign-in, for this profile. 225 // sign-in, for this profile.
226 void AddEmailToOneClickRejectedList(Profile* profile, 226 void AddEmailToOneClickRejectedList(Profile* profile,
227 const std::string& email) { 227 const std::string& email) {
228 ListPrefUpdate updater(profile->GetPrefs(), 228 ListPrefUpdate updater(profile->GetPrefs(),
229 prefs::kReverseAutologinRejectedEmailList); 229 prefs::kReverseAutologinRejectedEmailList);
230 updater->AppendIfNotPresent(new base::StringValue(email)); 230 updater->AppendIfNotPresent(new base::StringValue(email));
231 } 231 }
232 232
233 void LogOneClickHistogramValue(int action) {
234 UMA_HISTOGRAM_ENUMERATION("Signin.OneClickActions", action,
235 one_click_signin::HISTOGRAM_MAX);
236 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action,
237 one_click_signin::HISTOGRAM_MAX);
238 }
239
240 void RedirectToNtpOrAppsPageWithIds(int child_id, 233 void RedirectToNtpOrAppsPageWithIds(int child_id,
241 int route_id, 234 int route_id,
242 signin::Source source) { 235 signin::Source source) {
243 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id, 236 content::WebContents* web_contents = tab_util::GetWebContentsByID(child_id,
244 route_id); 237 route_id);
245 if (!web_contents) 238 if (!web_contents)
246 return; 239 return;
247 240
248 OneClickSigninHelper::RedirectToNtpOrAppsPage(web_contents, source); 241 OneClickSigninHelper::RedirectToNtpOrAppsPage(web_contents, source);
249 } 242 }
250 243
251 // Start syncing with the given user information. 244 // Start syncing with the given user information.
252 void StartSync(const OneClickSigninHelper::StartSyncArgs& args, 245 void StartSync(const OneClickSigninHelper::StartSyncArgs& args,
253 OneClickSigninSyncStarter::StartSyncMode start_mode) { 246 OneClickSigninSyncStarter::StartSyncMode start_mode) {
254 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 247 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
255 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 248 OneClickSigninHelper::LogHistogramValue(one_click_signin::HISTOGRAM_UNDO);
256 return; 249 return;
257 } 250 }
258 251
259 // The wrapper deletes itself once it's done. 252 // The wrapper deletes itself once it's done.
260 OneClickSigninHelper::SyncStarterWrapper* wrapper = 253 OneClickSigninHelper::SyncStarterWrapper* wrapper =
261 new OneClickSigninHelper::SyncStarterWrapper(args, start_mode); 254 new OneClickSigninHelper::SyncStarterWrapper(args, start_mode);
262 wrapper->Start(); 255 wrapper->Start();
263 256
264 int action = one_click_signin::HISTOGRAM_MAX; 257 int action = one_click_signin::HISTOGRAM_MAX;
265 switch (args.auto_accept) { 258 switch (args.auto_accept) {
266 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 259 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
267 break; 260 break;
268 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 261 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
269 action = 262 action =
270 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? 263 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ?
271 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS : 264 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS :
272 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 265 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED;
273 break; 266 break;
274 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE: 267 case OneClickSigninHelper::AUTO_ACCEPT_CONFIGURE:
275 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 268 DCHECK(start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
276 action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 269 action = one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED;
277 break; 270 break;
278 default: 271 default:
279 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept; 272 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept;
280 break; 273 break;
281 } 274 }
282 if (action != one_click_signin::HISTOGRAM_MAX) 275 if (action != one_click_signin::HISTOGRAM_MAX)
283 LogOneClickHistogramValue(action); 276 OneClickSigninHelper::LogHistogramValue(action);
284 } 277 }
285 278
286 void StartExplicitSync(const OneClickSigninHelper::StartSyncArgs& args, 279 void StartExplicitSync(const OneClickSigninHelper::StartSyncArgs& args,
287 content::WebContents* contents, 280 content::WebContents* contents,
288 OneClickSigninSyncStarter::StartSyncMode start_mode, 281 OneClickSigninSyncStarter::StartSyncMode start_mode,
289 ConfirmEmailDialogDelegate::Action action) { 282 ConfirmEmailDialogDelegate::Action action) {
290 bool enable_inline = !switches::IsEnableWebBasedSignin(); 283 bool enable_inline = !switches::IsEnableWebBasedSignin();
291 if (action == ConfirmEmailDialogDelegate::START_SYNC) { 284 if (action == ConfirmEmailDialogDelegate::START_SYNC) {
292 StartSync(args, start_mode); 285 StartSync(args, start_mode);
293 if (!enable_inline) { 286 if (!enable_inline) {
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 if (client) { 683 if (client) {
691 client->GetPasswordManager()->AddSubmissionCallback( 684 client->GetPasswordManager()->AddSubmissionCallback(
692 base::Bind(&OneClickSigninHelper::PasswordSubmitted, 685 base::Bind(&OneClickSigninHelper::PasswordSubmitted,
693 weak_pointer_factory_.GetWeakPtr())); 686 weak_pointer_factory_.GetWeakPtr()));
694 } 687 }
695 } 688 }
696 689
697 OneClickSigninHelper::~OneClickSigninHelper() {} 690 OneClickSigninHelper::~OneClickSigninHelper() {}
698 691
699 // static 692 // static
700 void OneClickSigninHelper::LogHistogramValue( 693 void OneClickSigninHelper::LogHistogramValue(int action) {
701 signin::Source source, int action) {
702 switch (source) {
703 case signin::SOURCE_START_PAGE:
704 UMA_HISTOGRAM_ENUMERATION("Signin.StartPageActions", action,
Alexei Svitkine (slow) 2014/12/12 15:48:55 If you're removing histograms, can you mark them a
noms (inactive) 2014/12/12 15:59:29 These histograms are described with a suffix, and
Alexei Svitkine (slow) 2014/12/12 17:53:05 In that case, I suggest the following: Split the
noms (inactive) 2014/12/16 16:55:50 Done.
705 one_click_signin::HISTOGRAM_MAX);
706 break;
707 case signin::SOURCE_NTP_LINK:
708 UMA_HISTOGRAM_ENUMERATION("Signin.NTPLinkActions", action,
709 one_click_signin::HISTOGRAM_MAX);
710 break;
711 case signin::SOURCE_MENU:
712 UMA_HISTOGRAM_ENUMERATION("Signin.MenuActions", action,
713 one_click_signin::HISTOGRAM_MAX);
714 break;
715 case signin::SOURCE_SETTINGS:
716 UMA_HISTOGRAM_ENUMERATION("Signin.SettingsActions", action,
717 one_click_signin::HISTOGRAM_MAX);
718 break;
719 case signin::SOURCE_EXTENSION_INSTALL_BUBBLE:
720 UMA_HISTOGRAM_ENUMERATION("Signin.ExtensionInstallBubbleActions", action,
721 one_click_signin::HISTOGRAM_MAX);
722 break;
723 case signin::SOURCE_APP_LAUNCHER:
724 UMA_HISTOGRAM_ENUMERATION("Signin.AppLauncherActions", action,
725 one_click_signin::HISTOGRAM_MAX);
726 break;
727 case signin::SOURCE_APPS_PAGE_LINK:
728 UMA_HISTOGRAM_ENUMERATION("Signin.AppsPageLinkActions", action,
729 one_click_signin::HISTOGRAM_MAX);
730 break;
731 case signin::SOURCE_BOOKMARK_BUBBLE:
732 UMA_HISTOGRAM_ENUMERATION("Signin.BookmarkBubbleActions", action,
733 one_click_signin::HISTOGRAM_MAX);
734 break;
735 case signin::SOURCE_AVATAR_BUBBLE_SIGN_IN:
736 UMA_HISTOGRAM_ENUMERATION("Signin.AvatarBubbleActions", action,
737 one_click_signin::HISTOGRAM_MAX);
738 break;
739 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT:
740 UMA_HISTOGRAM_ENUMERATION("Signin.AvatarBubbleActions", action,
741 one_click_signin::HISTOGRAM_MAX);
742 break;
743 case signin::SOURCE_DEVICES_PAGE:
744 UMA_HISTOGRAM_ENUMERATION("Signin.DevicesPageActions", action,
745 one_click_signin::HISTOGRAM_MAX);
746 break;
747 case signin::SOURCE_REAUTH:
748 UMA_HISTOGRAM_ENUMERATION("Signin.ReauthActions", action,
749 one_click_signin::HISTOGRAM_MAX);
750 break;
751 default:
752 // This switch statement needs to be updated when the enum Source changes.
753 COMPILE_ASSERT(signin::SOURCE_UNKNOWN == 12,
754 kSourceEnumHasChangedButNotThisSwitchStatement);
755 UMA_HISTOGRAM_ENUMERATION("Signin.UnknownActions", action,
756 one_click_signin::HISTOGRAM_MAX);
757 }
758 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action, 694 UMA_HISTOGRAM_ENUMERATION("Signin.AllAccessPointActions", action,
759 one_click_signin::HISTOGRAM_MAX); 695 one_click_signin::HISTOGRAM_MAX);
760 } 696 }
761 697
762 // static 698 // static
699 void OneClickSigninHelper::LogHistogramSourceValue(signin::Source source) {
700 UMA_HISTOGRAM_ENUMERATION("Signin.SigninSource", source,
701 one_click_signin::HISTOGRAM_MAX);
702 }
703
704 // static
763 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents, 705 bool OneClickSigninHelper::CanOffer(content::WebContents* web_contents,
764 CanOfferFor can_offer_for, 706 CanOfferFor can_offer_for,
765 const std::string& email, 707 const std::string& email,
766 std::string* error_message) { 708 std::string* error_message) {
767 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 709 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
768 VLOG(1) << "OneClickSigninHelper::CanOffer"; 710 VLOG(1) << "OneClickSigninHelper::CanOffer";
769 711
770 if (error_message) 712 if (error_message)
771 error_message->clear(); 713 error_message->clear();
772 714
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 1274
1333 // Redirect to the landing page and display an error popup. 1275 // Redirect to the landing page and display an error popup.
1334 RedirectToNtpOrAppsPage(web_contents(), source_); 1276 RedirectToNtpOrAppsPage(web_contents(), source_);
1335 LoginUIServiceFactory::GetForProfile(profile)-> 1277 LoginUIServiceFactory::GetForProfile(profile)->
1336 DisplayLoginResult(browser, base::UTF8ToUTF16(error_message_)); 1278 DisplayLoginResult(browser, base::UTF8ToUTF16(error_message_));
1337 CleanTransientState(); 1279 CleanTransientState();
1338 return; 1280 return;
1339 } 1281 }
1340 1282
1341 if (AreWeShowingSignin(url, source_, email_)) { 1283 if (AreWeShowingSignin(url, source_, email_)) {
1342 if (!showing_signin_) { 1284 if (!showing_signin_)
1343 if (source_ == signin::SOURCE_UNKNOWN) 1285 LogHistogramValue(one_click_signin::HISTOGRAM_SHOWN);
1344 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN);
1345 else
1346 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN);
1347 }
1348 showing_signin_ = true; 1286 showing_signin_ = true;
1349 } 1287 }
1350 1288
1351 // When Gaia finally redirects to the continue URL, Gaia will add some 1289 // When Gaia finally redirects to the continue URL, Gaia will add some
1352 // extra query parameters. So ignore the parameters when checking to see 1290 // extra query parameters. So ignore the parameters when checking to see
1353 // if the user has continued. Sometimes locales will redirect to a country- 1291 // if the user has continued. Sometimes locales will redirect to a country-
1354 // specific TLD so just make sure it's a valid domain instead of comparing 1292 // specific TLD so just make sure it's a valid domain instead of comparing
1355 // for an exact match. 1293 // for an exact match.
1356 GURL::Replacements replacements; 1294 GURL::Replacements replacements;
1357 replacements.ClearQuery(); 1295 replacements.ClearQuery();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1439 1377
1440 Browser* browser = chrome::FindBrowserWithWebContents(contents); 1378 Browser* browser = chrome::FindBrowserWithWebContents(contents);
1441 1379
1442 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go." 1380 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go."
1443 << " auto_accept=" << auto_accept_ 1381 << " auto_accept=" << auto_accept_
1444 << " source=" << source_; 1382 << " source=" << source_;
1445 1383
1446 switch (auto_accept_) { 1384 switch (auto_accept_) {
1447 case AUTO_ACCEPT_NONE: 1385 case AUTO_ACCEPT_NONE:
1448 if (showing_signin_) 1386 if (showing_signin_)
1449 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED); 1387 LogHistogramValue(one_click_signin::HISTOGRAM_DISMISSED);
1450 break; 1388 break;
1451 case AUTO_ACCEPT_ACCEPTED: 1389 case AUTO_ACCEPT_ACCEPTED:
1452 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1390 LogHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1453 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1391 LogHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1454 SigninManager::DisableOneClickSignIn(profile->GetPrefs()); 1392 SigninManager::DisableOneClickSignIn(profile->GetPrefs());
1455 // Start syncing with the default settings - prompt the user to sign in 1393 // Start syncing with the default settings - prompt the user to sign in
1456 // first. 1394 // first.
1457 if (!do_not_start_sync_for_testing_) { 1395 if (!do_not_start_sync_for_testing_) {
1458 StartSync( 1396 StartSync(
1459 StartSyncArgs(profile, browser, auto_accept_, 1397 StartSyncArgs(profile, browser, auto_accept_,
1460 session_index_, email_, password_, "", 1398 session_index_, email_, password_, "",
1461 NULL /* don't force sync setup in same tab */, 1399 NULL /* don't force sync setup in same tab */,
1462 true /* confirmation_required */, source_, 1400 true /* confirmation_required */, source_,
1463 CreateSyncStarterCallback()), 1401 CreateSyncStarterCallback()),
1464 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 1402 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1465 } 1403 }
1466 break; 1404 break;
1467 case AUTO_ACCEPT_CONFIGURE: 1405 case AUTO_ACCEPT_CONFIGURE:
1468 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1406 LogHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1469 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1407 LogHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1470 SigninManager::DisableOneClickSignIn(profile->GetPrefs()); 1408 SigninManager::DisableOneClickSignIn(profile->GetPrefs());
1471 // Display the extra confirmation (even in the SAML case) in case this 1409 // Display the extra confirmation (even in the SAML case) in case this
1472 // was an untrusted renderer. 1410 // was an untrusted renderer.
1473 if (!do_not_start_sync_for_testing_) { 1411 if (!do_not_start_sync_for_testing_) {
1474 StartSync( 1412 StartSync(
1475 StartSyncArgs(profile, browser, auto_accept_, 1413 StartSyncArgs(profile, browser, auto_accept_,
1476 session_index_, email_, password_, "", 1414 session_index_, email_, password_, "",
1477 NULL /* don't force sync setup in same tab */, 1415 NULL /* don't force sync setup in same tab */,
1478 true /* confirmation_required */, source_, 1416 true /* confirmation_required */, source_,
1479 CreateSyncStarterCallback()), 1417 CreateSyncStarterCallback()),
1480 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1418 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1481 } 1419 }
1482 break; 1420 break;
1483 case AUTO_ACCEPT_EXPLICIT: { 1421 case AUTO_ACCEPT_EXPLICIT: {
1484 signin::Source original_source = 1422 signin::Source original_source =
1485 signin::GetSourceForPromoURL(original_continue_url_); 1423 signin::GetSourceForPromoURL(original_continue_url_);
1486 if (switched_to_advanced_) { 1424 if (switched_to_advanced_) {
1487 LogHistogramValue(original_source, 1425 LogHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1488 one_click_signin::HISTOGRAM_WITH_ADVANCED); 1426 LogHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1489 LogHistogramValue(original_source,
1490 one_click_signin::HISTOGRAM_ACCEPTED);
1491 } else { 1427 } else {
1492 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); 1428 LogHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1493 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1429 LogHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1494 } 1430 }
1495 1431
1496 // - If sign in was initiated from the NTP or the hotdog menu, sync with 1432 // - If sign in was initiated from the NTP or the hotdog menu, sync with
1497 // default settings. 1433 // default settings.
1498 // - If sign in was initiated from the settings page for first time sync 1434 // - If sign in was initiated from the settings page for first time sync
1499 // set up, show the advanced sync settings dialog. 1435 // set up, show the advanced sync settings dialog.
1500 // - If sign in was initiated from the settings page due to a re-auth when 1436 // - If sign in was initiated from the settings page due to a re-auth when
1501 // sync was already setup, simply navigate back to the settings page. 1437 // sync was already setup, simply navigate back to the settings page.
1502 ProfileSyncService* sync_service = 1438 ProfileSyncService* sync_service =
1503 ProfileSyncServiceFactory::GetForProfile(profile); 1439 ProfileSyncServiceFactory::GetForProfile(profile);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 // so that when sign in and sync setup are successful, we can redirect to 1473 // so that when sign in and sync setup are successful, we can redirect to
1538 // the correct URL, or auto-close the gaia sign in tab. 1474 // the correct URL, or auto-close the gaia sign in tab.
1539 if (original_source == signin::SOURCE_SETTINGS) { 1475 if (original_source == signin::SOURCE_SETTINGS) {
1540 // The observer deletes itself once it's done. 1476 // The observer deletes itself once it's done.
1541 new OneClickSigninSyncObserver(contents, original_continue_url_); 1477 new OneClickSigninSyncObserver(contents, original_continue_url_);
1542 } 1478 }
1543 break; 1479 break;
1544 } 1480 }
1545 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: 1481 case AUTO_ACCEPT_REJECTED_FOR_PROFILE:
1546 AddEmailToOneClickRejectedList(profile, email_); 1482 AddEmailToOneClickRejectedList(profile, email_);
1547 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); 1483 LogHistogramValue(one_click_signin::HISTOGRAM_REJECTED);
1548 break; 1484 break;
1549 default: 1485 default:
1550 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; 1486 NOTREACHED() << "Invalid auto_accept=" << auto_accept_;
1551 break; 1487 break;
1552 } 1488 }
1553 1489
1554 CleanTransientState(); 1490 CleanTransientState();
1555 } 1491 }
1556 1492
1557 OneClickSigninSyncStarter::Callback 1493 OneClickSigninSyncStarter::Callback
(...skipping 14 matching lines...) Expand all
1572 // If the web contents is showing a blank page and not about to be closed, 1508 // If the web contents is showing a blank page and not about to be closed,
1573 // redirect to the NTP or apps page. 1509 // redirect to the NTP or apps page.
1574 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1510 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1575 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1511 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1576 RedirectToNtpOrAppsPage( 1512 RedirectToNtpOrAppsPage(
1577 web_contents(), 1513 web_contents(),
1578 signin::GetSourceForPromoURL(original_continue_url_)); 1514 signin::GetSourceForPromoURL(original_continue_url_));
1579 } 1515 }
1580 } 1516 }
1581 } 1517 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698