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

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

Issue 11316299: Enable web-based sign in flow by default. Can use command line argument (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix BiDi tests and indent Created 8 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 | Annotate | Revision Log
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 break; 102 break;
103 default: 103 default:
104 NOTREACHED() << "Invalid auto_accept: " << auto_accept; 104 NOTREACHED() << "Invalid auto_accept: " << auto_accept;
105 break; 105 break;
106 } 106 }
107 107
108 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action, 108 UMA_HISTOGRAM_ENUMERATION("AutoLogin.Reverse", action,
109 one_click_signin::HISTOGRAM_MAX); 109 one_click_signin::HISTOGRAM_MAX);
110 } 110 }
111 111
112 bool UseWebBasedSigninFlow() {
113 return CommandLine::ForCurrentProcess()->HasSwitch(
114 switches::kUseWebBasedSigninFlow);
115 }
116
117 // Determines the source of the sign in. Its either one of the known sign in 112 // Determines the source of the sign in. Its either one of the known sign in
118 // access point (first run, NTP, menu, settings) or its an implicit sign in 113 // access point (first run, NTP, menu, settings) or its an implicit sign in
119 // via another Google property. In the former case, "service" is also 114 // via another Google property. In the former case, "service" is also
120 // checked to make sure its "chromiumsync". 115 // checked to make sure its "chromiumsync".
121 SyncPromoUI::Source GetSigninSource(const GURL& url) { 116 SyncPromoUI::Source GetSigninSource(const GURL& url) {
122 std::string value; 117 std::string value;
123 chrome_common_net::GetValueForKeyInQuery(url, "service", &value); 118 chrome_common_net::GetValueForKeyInQuery(url, "service", &value);
124 bool is_explicit_signin = value == "chromiumsync"; 119 bool is_explicit_signin = value == "chromiumsync";
125 120
126 chrome_common_net::GetValueForKeyInQuery(url, "continue", &value); 121 chrome_common_net::GetValueForKeyInQuery(url, "continue", &value);
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 const ListValue* rejected_emails = profile->GetPrefs()->GetList( 433 const ListValue* rejected_emails = profile->GetPrefs()->GetList(
439 prefs::kReverseAutologinRejectedEmailList); 434 prefs::kReverseAutologinRejectedEmailList);
440 if (!rejected_emails->empty()) { 435 if (!rejected_emails->empty()) {
441 base::ListValue::const_iterator iter = rejected_emails->Find( 436 base::ListValue::const_iterator iter = rejected_emails->Find(
442 base::StringValue(email)); 437 base::StringValue(email));
443 if (iter != rejected_emails->end()) 438 if (iter != rejected_emails->end())
444 return false; 439 return false;
445 } 440 }
446 } 441 }
447 442
448 if (!UseWebBasedSigninFlow()) { 443 if (!SyncPromoUI::UseWebBasedSigninFlow()) {
449 // If we're about to show a one-click infobar but the user has started 444 // If we're about to show a one-click infobar but the user has started
450 // a concurrent signin flow (perhaps via the promo), we may not have yet 445 // a concurrent signin flow (perhaps via the promo), we may not have yet
451 // established an authenticated username but we still shouldn't move 446 // established an authenticated username but we still shouldn't move
452 // forward with two simultaneous signin processes. This is a bit 447 // forward with two simultaneous signin processes. This is a bit
453 // contentious as the one-click flow is a much smoother flow from the user 448 // contentious as the one-click flow is a much smoother flow from the user
454 // perspective, but it's much more difficult to hijack the other flow from 449 // perspective, but it's much more difficult to hijack the other flow from
455 // here as it is to bail. 450 // here as it is to bail.
456 ProfileSyncService* service = 451 ProfileSyncService* service =
457 ProfileSyncServiceFactory::GetForProfile(profile); 452 ProfileSyncServiceFactory::GetForProfile(profile);
458 if (!service) 453 if (!service)
(...skipping 20 matching lines...) Expand all
479 const GURL& url, 474 const GURL& url,
480 const std::string& referrer, 475 const std::string& referrer,
481 base::SupportsUserData* request, 476 base::SupportsUserData* request,
482 ProfileIOData* io_data) { 477 ProfileIOData* io_data) {
483 if (!gaia::IsGaiaSignonRealm(url.GetOrigin())) 478 if (!gaia::IsGaiaSignonRealm(url.GetOrigin()))
484 return IGNORE_REQUEST; 479 return IGNORE_REQUEST;
485 480
486 if (!io_data) 481 if (!io_data)
487 return DONT_OFFER; 482 return DONT_OFFER;
488 483
489 if (!UseWebBasedSigninFlow()) 484 if (!SyncPromoUI::UseWebBasedSigninFlow())
490 return DONT_OFFER; 485 return DONT_OFFER;
491 486
492 // Don't offer if the source is known, as that means it's an explicit sign 487 // Don't offer if the source is known, as that means it's an explicit sign
493 // in request. 488 // in request.
494 if (GetSigninSource(url) != SyncPromoUI::SOURCE_UNKNOWN || 489 if (GetSigninSource(url) != SyncPromoUI::SOURCE_UNKNOWN ||
495 GetSigninSource(GURL(referrer)) != SyncPromoUI::SOURCE_UNKNOWN) { 490 GetSigninSource(GURL(referrer)) != SyncPromoUI::SOURCE_UNKNOWN) {
496 return DONT_OFFER; 491 return DONT_OFFER;
497 } 492 }
498 493
499 if (!ProfileSyncService::IsSyncEnabled()) 494 if (!ProfileSyncService::IsSyncEnabled())
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 std::string google_accounts_signin_value; 565 std::string google_accounts_signin_value;
571 request->GetResponseHeaderByName("Google-Chrome-SignIn", 566 request->GetResponseHeaderByName("Google-Chrome-SignIn",
572 &google_chrome_signin_value); 567 &google_chrome_signin_value);
573 request->GetResponseHeaderByName("Google-Accounts-SignIn", 568 request->GetResponseHeaderByName("Google-Accounts-SignIn",
574 &google_accounts_signin_value); 569 &google_accounts_signin_value);
575 570
576 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 571 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
577 << " g-a-s='" << google_accounts_signin_value << "'" 572 << " g-a-s='" << google_accounts_signin_value << "'"
578 << " g-c-s='" << google_chrome_signin_value << "'"; 573 << " g-c-s='" << google_chrome_signin_value << "'";
579 574
580 if (!UseWebBasedSigninFlow() && google_accounts_signin_value.empty()) 575 if (!SyncPromoUI::UseWebBasedSigninFlow() &&
576 google_accounts_signin_value.empty()) {
581 return; 577 return;
578 }
582 579
583 if (!gaia::IsGaiaSignonRealm(request->original_url().GetOrigin())) 580 if (!gaia::IsGaiaSignonRealm(request->original_url().GetOrigin()))
584 return; 581 return;
585 582
586 // Parse Google-Accounts-SignIn. 583 // Parse Google-Accounts-SignIn.
587 std::vector<std::pair<std::string, std::string> > pairs; 584 std::vector<std::pair<std::string, std::string> > pairs;
588 base::SplitStringIntoKeyValuePairs(google_accounts_signin_value, '=', ',', 585 base::SplitStringIntoKeyValuePairs(google_accounts_signin_value, '=', ',',
589 &pairs); 586 &pairs);
590 std::string session_index; 587 std::string session_index;
591 std::string email; 588 std::string email;
592 for (size_t i = 0; i < pairs.size(); ++i) { 589 for (size_t i = 0; i < pairs.size(); ++i) {
593 const std::pair<std::string, std::string>& pair = pairs[i]; 590 const std::pair<std::string, std::string>& pair = pairs[i];
594 const std::string& key = pair.first; 591 const std::string& key = pair.first;
595 const std::string& value = pair.second; 592 const std::string& value = pair.second;
596 if (key == "email") { 593 if (key == "email") {
597 TrimString(value, "\"", &email); 594 TrimString(value, "\"", &email);
598 } else if (key == "sessionindex") { 595 } else if (key == "sessionindex") {
599 session_index = value; 596 session_index = value;
600 } 597 }
601 } 598 }
602 599
603 // Later in the chain of this request, we'll need to check the email address 600 // Later in the chain of this request, we'll need to check the email address
604 // in the IO thread (see CanOfferOnIOThread). So save the email address as 601 // in the IO thread (see CanOfferOnIOThread). So save the email address as
605 // user data on the request (only for web-based flow). 602 // user data on the request (only for web-based flow).
606 if (UseWebBasedSigninFlow() && !email.empty()) 603 if (SyncPromoUI::UseWebBasedSigninFlow() && !email.empty())
607 OneClickSigninRequestUserData::AssociateWithRequest(request, email); 604 OneClickSigninRequestUserData::AssociateWithRequest(request, email);
608 605
609 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:" 606 VLOG(1) << "OneClickSigninHelper::ShowInfoBarIfPossible:"
610 << " email=" << email 607 << " email=" << email
611 << " sessionindex=" << session_index; 608 << " sessionindex=" << session_index;
612 609
613 // Parse Google-Chrome-SignIn. 610 // Parse Google-Chrome-SignIn.
614 AutoAccept auto_accept = NO_AUTO_ACCEPT; 611 AutoAccept auto_accept = NO_AUTO_ACCEPT;
615 SyncPromoUI::Source source = SyncPromoUI::SOURCE_UNKNOWN; 612 SyncPromoUI::Source source = SyncPromoUI::SOURCE_UNKNOWN;
616 if (UseWebBasedSigninFlow()) { 613 if (SyncPromoUI::UseWebBasedSigninFlow()) {
617 std::vector<std::string> tokens; 614 std::vector<std::string> tokens;
618 base::SplitString(google_chrome_signin_value, ',', &tokens); 615 base::SplitString(google_chrome_signin_value, ',', &tokens);
619 for (size_t i = 0; i < tokens.size(); ++i) { 616 for (size_t i = 0; i < tokens.size(); ++i) {
620 const std::string& token = tokens[i]; 617 const std::string& token = tokens[i];
621 if (token == "accepted") { 618 if (token == "accepted") {
622 auto_accept = AUTO_ACCEPT; 619 auto_accept = AUTO_ACCEPT;
623 } else if (token == "configure") { 620 } else if (token == "configure") {
624 auto_accept = AUTO_ACCEPT_CONFIGURE; 621 auto_accept = AUTO_ACCEPT_CONFIGURE;
625 } else if (token == "rejected-for-profile") { 622 } else if (token == "rejected-for-profile") {
626 auto_accept = REJECTED_FOR_PROFILE; 623 auto_accept = REJECTED_FOR_PROFILE;
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 break; 827 break;
831 } 828 }
832 } 829 }
833 830
834 RedirectToNTP(); 831 RedirectToNTP();
835 } 832 }
836 833
837 void OneClickSigninHelper::SigninSuccess() { 834 void OneClickSigninHelper::SigninSuccess() {
838 RedirectToNTP(); 835 RedirectToNTP();
839 } 836 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/startup/startup_browser_creator_impl.cc ('k') | chrome/browser/ui/sync/one_click_signin_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698