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

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

Issue 14914003: Move post-signin confirmation bubble to OneClickSigninSyncStarter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleaned up extraneous whitespace. Created 7 years, 7 months 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 <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 #include "ui/base/resource/resource_bundle.h" 75 #include "ui/base/resource/resource_bundle.h"
76 76
77 77
78 namespace { 78 namespace {
79 79
80 // StartSyncArgs -------------------------------------------------------------- 80 // StartSyncArgs --------------------------------------------------------------
81 81
82 // Arguments used with StartSync function. base::Bind() cannot support too 82 // Arguments used with StartSync function. base::Bind() cannot support too
83 // many args for performance reasons, so they are packaged up into a struct. 83 // many args for performance reasons, so they are packaged up into a struct.
84 struct StartSyncArgs { 84 struct StartSyncArgs {
85 StartSyncArgs(Profile* profile, 85 StartSyncArgs(
86 Browser* browser, 86 Profile* profile,
87 OneClickSigninHelper::AutoAccept auto_accept, 87 Browser* browser,
88 const std::string& session_index, 88 OneClickSigninHelper::AutoAccept auto_accept,
89 const std::string& email, 89 const std::string& session_index,
90 const std::string& password, 90 const std::string& email,
91 bool force_same_tab_navigation, 91 const std::string& password,
92 bool confirmation_required); 92 bool force_same_tab_navigation,
93 bool saml_confirmation_required,
Roger Tawa OOO till Jul 10th 2013/05/03 15:16:47 Is this really saml related? I think my suggestio
Andrew T Wilson (Slow) 2013/05/03 19:16:11 I only set this if confirmation_required_ is set,
Roger Tawa OOO till Jul 10th 2013/05/06 15:46:39 Thanks Drew. The non-saml "untrusted" flow is the
94 SyncPromoUI::Source source);
93 95
94 Profile* profile; 96 Profile* profile;
95 Browser* browser; 97 Browser* browser;
96 OneClickSigninHelper::AutoAccept auto_accept; 98 OneClickSigninHelper::AutoAccept auto_accept;
97 std::string session_index; 99 std::string session_index;
98 std::string email; 100 std::string email;
99 std::string password; 101 std::string password;
100 bool force_same_tab_navigation; 102 bool force_same_tab_navigation;
101 bool confirmation_required; 103 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
102 }; 104 };
103 105
104 StartSyncArgs::StartSyncArgs(Profile* profile, 106 StartSyncArgs::StartSyncArgs(
105 Browser* browser, 107 Profile* profile,
106 OneClickSigninHelper::AutoAccept auto_accept, 108 Browser* browser,
107 const std::string& session_index, 109 OneClickSigninHelper::AutoAccept auto_accept,
108 const std::string& email, 110 const std::string& session_index,
109 const std::string& password, 111 const std::string& email,
110 bool force_same_tab_navigation, 112 const std::string& password,
111 bool confirmation_required) 113 bool force_same_tab_navigation,
114 bool saml_confirmation_required,
115 SyncPromoUI::Source source)
112 : profile(profile), 116 : profile(profile),
113 browser(browser), 117 browser(browser),
114 auto_accept(auto_accept), 118 auto_accept(auto_accept),
115 session_index(session_index), 119 session_index(session_index),
116 email(email), 120 email(email),
117 password(password), 121 password(password),
118 force_same_tab_navigation(force_same_tab_navigation), 122 force_same_tab_navigation(force_same_tab_navigation) {
119 confirmation_required(confirmation_required) { 123 if (saml_confirmation_required) {
124 confirmation_required = OneClickSigninSyncStarter::CONFIRM_SAML_SIGNIN;
125 } else if (source == SyncPromoUI::SOURCE_SETTINGS ||
126 source == SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
127 // Do not display a status confirmation for webstore installs or re-auth.
128 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
129 } else {
130 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
131 }
120 } 132 }
121 133
122 134
123 // Helpers -------------------------------------------------------------------- 135 // Helpers --------------------------------------------------------------------
124 136
125 // Add a specific email to the list of emails rejected for one-click 137 // Add a specific email to the list of emails rejected for one-click
126 // sign-in, for this profile. 138 // sign-in, for this profile.
127 void AddEmailToOneClickRejectedList(Profile* profile, 139 void AddEmailToOneClickRejectedList(Profile* profile,
128 const std::string& email) { 140 const std::string& email) {
129 PrefService* pref_service = profile->GetPrefs(); 141 PrefService* pref_service = profile->GetPrefs();
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper); 476 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper);
465 477
466 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents) 478 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
467 : content::WebContentsObserver(web_contents), 479 : content::WebContentsObserver(web_contents),
468 showing_signin_(false), 480 showing_signin_(false),
469 auto_accept_(AUTO_ACCEPT_NONE), 481 auto_accept_(AUTO_ACCEPT_NONE),
470 source_(SyncPromoUI::SOURCE_UNKNOWN), 482 source_(SyncPromoUI::SOURCE_UNKNOWN),
471 switched_to_advanced_(false), 483 switched_to_advanced_(false),
472 original_source_(SyncPromoUI::SOURCE_UNKNOWN), 484 original_source_(SyncPromoUI::SOURCE_UNKNOWN),
473 untrusted_navigations_since_signin_visit_(0), 485 untrusted_navigations_since_signin_visit_(0),
474 confirmation_required_(false) { 486 saml_confirmation_required_(false) {
475 } 487 }
476 488
477 OneClickSigninHelper::~OneClickSigninHelper() { 489 OneClickSigninHelper::~OneClickSigninHelper() {
478 content::WebContents* contents = web_contents(); 490 content::WebContents* contents = web_contents();
479 if (contents) { 491 if (contents) {
480 Profile* profile = 492 Profile* profile =
481 Profile::FromBrowserContext(contents->GetBrowserContext()); 493 Profile::FromBrowserContext(contents->GetBrowserContext());
482 ProfileSyncService* sync_service = 494 ProfileSyncService* sync_service =
483 ProfileSyncServiceFactory::GetForProfile(profile); 495 ProfileSyncServiceFactory::GetForProfile(profile);
484 if (sync_service && sync_service->HasObserver(this)) 496 if (sync_service && sync_service->HasObserver(this))
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 CanOfferFor can_offer_for = 829 CanOfferFor can_offer_for =
818 (auto_accept != AUTO_ACCEPT_EXPLICIT && 830 (auto_accept != AUTO_ACCEPT_EXPLICIT &&
819 helper->auto_accept_ != AUTO_ACCEPT_EXPLICIT) ? 831 helper->auto_accept_ != AUTO_ACCEPT_EXPLICIT) ?
820 CAN_OFFER_FOR_INTERSTITAL_ONLY : CAN_OFFER_FOR_ALL; 832 CAN_OFFER_FOR_INTERSTITAL_ONLY : CAN_OFFER_FOR_ALL;
821 833
822 std::string error_message; 834 std::string error_message;
823 835
824 if (!web_contents || !CanOffer(web_contents, can_offer_for, email, 836 if (!web_contents || !CanOffer(web_contents, can_offer_for, email,
825 &error_message)) { 837 &error_message)) {
826 VLOG(1) << "OneClickSigninHelper::ShowInfoBarUIThread: not offering"; 838 VLOG(1) << "OneClickSigninHelper::ShowInfoBarUIThread: not offering";
839 // TODO(rogerta): Can we just display our error now instead of keeping it
840 // around and doing it later?
827 if (helper && helper->error_message_.empty() && !error_message.empty()) 841 if (helper && helper->error_message_.empty() && !error_message.empty())
828 helper->error_message_ = error_message; 842 helper->error_message_ = error_message;
829 843
830 return; 844 return;
831 } 845 }
832 846
833 // Only allow the dedicated signin process to sign the user into 847 // Only allow the dedicated signin process to sign the user into
834 // Chrome without intervention, because it doesn't load any untrusted 848 // Chrome without intervention, because it doesn't load any untrusted
835 // pages. If at any point an untrusted page is detected, chrome will 849 // pages. If at any point an untrusted page is detected, chrome will
836 // show a modal dialog asking the user to confirm. 850 // show a modal dialog asking the user to confirm.
837 Profile* profile = 851 Profile* profile =
838 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 852 Profile::FromBrowserContext(web_contents->GetBrowserContext());
839 SigninManager* manager = profile ? 853 SigninManager* manager = profile ?
840 SigninManagerFactory::GetForProfile(profile) : NULL; 854 SigninManagerFactory::GetForProfile(profile) : NULL;
841 helper->confirmation_required_ |= (manager && 855 helper->saml_confirmation_required_ |= (manager &&
842 !manager->IsSigninProcess(child_id)); 856 !manager->IsSigninProcess(child_id));
843 857
844 // Save the email in the one-click signin manager. The manager may 858 // Save the email in the one-click signin manager. The manager may
845 // not exist if the contents is incognito or if the profile is already 859 // not exist if the contents is incognito or if the profile is already
846 // connected to a Google account. 860 // connected to a Google account.
847 if (!session_index.empty()) 861 if (!session_index.empty())
848 helper->session_index_ = session_index; 862 helper->session_index_ = session_index;
849 863
850 if (!email.empty()) 864 if (!email.empty())
851 helper->email_ = email; 865 helper->email_ = email;
852 866
853 if (continue_url.is_valid()) 867 if (continue_url.is_valid())
854 helper->continue_url_ = continue_url; 868 helper->continue_url_ = continue_url;
855 } 869 }
856 870
857 // static 871 // static
858 void OneClickSigninHelper::RemoveCurrentHistoryItem( 872 void OneClickSigninHelper::RemoveCurrentHistoryItem(
859 content::WebContents* web_contents) { 873 content::WebContents* web_contents) {
860 new CurrentHistoryCleaner(web_contents); // will self-destruct when finished 874 new CurrentHistoryCleaner(web_contents); // will self-destruct when finished
861 } 875 }
862 876
863 void OneClickSigninHelper::ShowSyncConfirmationBubble(bool show_bubble) { 877 void OneClickSigninHelper::ShowSigninErrorBubble(const std::string& error) {
864 if (show_bubble) { 878 DCHECK(!error.empty());
865 content::WebContents* contents = web_contents(); 879 content::WebContents* contents = web_contents();
866 Profile* profile = 880 Profile* profile =
867 Profile::FromBrowserContext(contents->GetBrowserContext()); 881 Profile::FromBrowserContext(contents->GetBrowserContext());
868 Browser* browser = chrome::FindBrowserWithWebContents(contents); 882 Browser* browser = chrome::FindBrowserWithWebContents(contents);
869 883
870 browser->window()->ShowOneClickSigninBubble( 884 browser->window()->ShowOneClickSigninBubble(
871 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 885 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
872 string16(), /* no SAML email */ 886 string16(), /* no SAML email */
873 UTF8ToUTF16(error_message_), 887 UTF8ToUTF16(error),
874 base::Bind(&StartSync, 888 // This callback is never invoked.
875 StartSyncArgs(profile, browser, AUTO_ACCEPT_ACCEPTED, 889 // TODO(rogerta): Separate out the bubble API so we don't have to pass
876 session_index_, email_, password_, 890 // ignored |email| and |callback| params.
877 false, confirmation_required_))); 891 base::Bind(&StartSync,
878 } 892 StartSyncArgs(profile, browser, AUTO_ACCEPT_ACCEPTED,
879 error_message_.clear(); 893 session_index_, email_, password_,
894 false, saml_confirmation_required_, source_)));
880 } 895 }
881 896
882 void OneClickSigninHelper::RedirectToNtpOrAppsPage(bool show_bubble) { 897 void OneClickSigninHelper::RedirectToNtpOrAppsPage() {
883 VLOG(1) << "OneClickSigninHelper::RedirectToNtpOrAppsPage"; 898 VLOG(1) << "OneClickSigninHelper::RedirectToNtpOrAppsPage";
884
885 // Redirect to NTP/Apps page and display a confirmation bubble 899 // Redirect to NTP/Apps page and display a confirmation bubble
886 content::WebContents* contents = web_contents(); 900 content::WebContents* contents = web_contents();
887 GURL url(chrome::IsInstantExtendedAPIEnabled() ? 901 GURL url(chrome::IsInstantExtendedAPIEnabled() ?
888 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL); 902 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL);
889 content::OpenURLParams params(url, 903 content::OpenURLParams params(url,
890 content::Referrer(), 904 content::Referrer(),
891 CURRENT_TAB, 905 CURRENT_TAB,
892 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 906 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
893 false); 907 false);
894 contents->OpenURL(params); 908 contents->OpenURL(params);
895
896 ShowSyncConfirmationBubble(show_bubble);
897 } 909 }
898 910
899 void OneClickSigninHelper::RedirectToSignin() { 911 void OneClickSigninHelper::RedirectToSignin() {
900 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; 912 VLOG(1) << "OneClickSigninHelper::RedirectToSignin";
901 913
902 // Extract the existing sounce=X value. Default to "2" if missing. 914 // Extract the existing sounce=X value. Default to "2" if missing.
903 SyncPromoUI::Source source = 915 SyncPromoUI::Source source =
904 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_); 916 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_);
905 if (source == SyncPromoUI::SOURCE_UNKNOWN) 917 if (source == SyncPromoUI::SOURCE_UNKNOWN)
906 source = SyncPromoUI::SOURCE_MENU; 918 source = SyncPromoUI::SOURCE_MENU;
(...skipping 10 matching lines...) Expand all
917 VLOG(1) << "OneClickSigninHelper::CleanTransientState"; 929 VLOG(1) << "OneClickSigninHelper::CleanTransientState";
918 showing_signin_ = false; 930 showing_signin_ = false;
919 email_.clear(); 931 email_.clear();
920 password_.clear(); 932 password_.clear();
921 auto_accept_ = AUTO_ACCEPT_NONE; 933 auto_accept_ = AUTO_ACCEPT_NONE;
922 source_ = SyncPromoUI::SOURCE_UNKNOWN; 934 source_ = SyncPromoUI::SOURCE_UNKNOWN;
923 switched_to_advanced_ = false; 935 switched_to_advanced_ = false;
924 original_source_ = SyncPromoUI::SOURCE_UNKNOWN; 936 original_source_ = SyncPromoUI::SOURCE_UNKNOWN;
925 continue_url_ = GURL(); 937 continue_url_ = GURL();
926 untrusted_navigations_since_signin_visit_ = 0; 938 untrusted_navigations_since_signin_visit_ = 0;
927 confirmation_required_ = false; 939 saml_confirmation_required_ = false;
940 error_message_.clear();
928 941
929 // Post to IO thread to clear pending email. 942 // Post to IO thread to clear pending email.
930 Profile* profile = 943 Profile* profile =
931 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 944 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
932 content::BrowserThread::PostTask( 945 content::BrowserThread::PostTask(
933 content::BrowserThread::IO, FROM_HERE, 946 content::BrowserThread::IO, FROM_HERE,
934 base::Bind(&ClearPendingEmailOnIOThread, 947 base::Bind(&ClearPendingEmailOnIOThread,
935 base::Unretained(profile->GetResourceContext()))); 948 base::Unretained(profile->GetResourceContext())));
936 } 949 }
937 950
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 // TODO(rogerta): might need to allow some youtube URLs. 1005 // TODO(rogerta): might need to allow some youtube URLs.
993 content::WebContents* contents = web_contents(); 1006 content::WebContents* contents = web_contents();
994 const GURL url = contents->GetURL(); 1007 const GURL url = contents->GetURL();
995 Profile* profile = 1008 Profile* profile =
996 Profile::FromBrowserContext(contents->GetBrowserContext()); 1009 Profile::FromBrowserContext(contents->GetBrowserContext());
997 VLOG(1) << "OneClickSigninHelper::DidStopLoading: url=" << url.spec(); 1010 VLOG(1) << "OneClickSigninHelper::DidStopLoading: url=" << url.spec();
998 1011
999 // If an error has already occured during the sign in flow, make sure to 1012 // If an error has already occured during the sign in flow, make sure to
1000 // display it to the user and abort the process. Do this only for 1013 // display it to the user and abort the process. Do this only for
1001 // explicit sign ins. 1014 // explicit sign ins.
1015 // TODO(rogerta): Could we move this code back up to ShowInfoBarUIThread()?
1002 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) { 1016 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) {
1003 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_; 1017 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_;
1004 RemoveCurrentHistoryItem(contents); 1018 RemoveCurrentHistoryItem(contents);
1005 RedirectToNtpOrAppsPage(true); 1019 // Redirect to the landing page and display an error popup.
1020 RedirectToNtpOrAppsPage();
1021 ShowSigninErrorBubble(error_message_);
1022 CleanTransientState();
1006 return; 1023 return;
1007 } 1024 }
1008 1025
1009 if (AreWeShowingSignin(url, source_, email_)) { 1026 if (AreWeShowingSignin(url, source_, email_)) {
1010 if (!showing_signin_) { 1027 if (!showing_signin_) {
1011 if (source_ == SyncPromoUI::SOURCE_UNKNOWN) 1028 if (source_ == SyncPromoUI::SOURCE_UNKNOWN)
1012 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN); 1029 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN);
1013 else 1030 else
1014 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN); 1031 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN);
1015 } 1032 }
(...skipping 14 matching lines...) Expand all
1030 // password is allowed to be empty, since its no longer required to setup 1047 // password is allowed to be empty, since its no longer required to setup
1031 // sync. 1048 // sync.
1032 if (email_.empty()) { 1049 if (email_.empty()) {
1033 VLOG(1) << "OneClickSigninHelper::DidStopLoading: nothing to do"; 1050 VLOG(1) << "OneClickSigninHelper::DidStopLoading: nothing to do";
1034 if (continue_url_match && auto_accept_ == AUTO_ACCEPT_EXPLICIT) 1051 if (continue_url_match && auto_accept_ == AUTO_ACCEPT_EXPLICIT)
1035 RedirectToSignin(); 1052 RedirectToSignin();
1036 std::string unused_value; 1053 std::string unused_value;
1037 if (net::GetValueForKeyInQuery(url, "ntp", &unused_value)) { 1054 if (net::GetValueForKeyInQuery(url, "ntp", &unused_value)) {
1038 SyncPromoUI::SetUserSkippedSyncPromo(profile); 1055 SyncPromoUI::SetUserSkippedSyncPromo(profile);
1039 RemoveCurrentHistoryItem(contents); 1056 RemoveCurrentHistoryItem(contents);
1040 RedirectToNtpOrAppsPage(false); 1057 RedirectToNtpOrAppsPage();
1041 } 1058 }
1042 1059
1043 if (!continue_url_match && !IsValidGaiaSigninRedirectOrResponseURL(url) && 1060 if (!continue_url_match && !IsValidGaiaSigninRedirectOrResponseURL(url) &&
1044 ++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince) { 1061 ++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince) {
1045 CleanTransientState(); 1062 CleanTransientState();
1046 } 1063 }
1047 1064
1048 return; 1065 return;
1049 } 1066 }
1050 1067
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1144 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1128 SigninManager::DisableOneClickSignIn(profile); 1145 SigninManager::DisableOneClickSignIn(profile);
1129 browser->window()->ShowOneClickSigninBubble( 1146 browser->window()->ShowOneClickSigninBubble(
1130 bubble_type, 1147 bubble_type,
1131 UTF8ToUTF16(email_), 1148 UTF8ToUTF16(email_),
1132 string16(), /* no error message to display */ 1149 string16(), /* no error message to display */
1133 base::Bind(&StartSync, 1150 base::Bind(&StartSync,
1134 StartSyncArgs(profile, browser, auto_accept_, 1151 StartSyncArgs(profile, browser, auto_accept_,
1135 session_index_, email_, password_, 1152 session_index_, email_, password_,
1136 false /* force_same_tab_navigation */, 1153 false /* force_same_tab_navigation */,
1137 confirmation_required_))); 1154 saml_confirmation_required_, source_)));
Roger Tawa OOO till Jul 10th 2013/05/03 15:16:47 Hmm, this is actually broken. Not your CL Drew, b
Andrew T Wilson (Slow) 2013/05/03 19:16:11 Do you mean that I should pass |false| as the conf
Roger Tawa OOO till Jul 10th 2013/05/06 15:46:39 I was actually suggesting passing |true| instead o
Andrew T Wilson (Slow) 2013/05/06 17:00:13 Done.
1138 break; 1155 break;
1139 case AUTO_ACCEPT_CONFIGURE: 1156 case AUTO_ACCEPT_CONFIGURE:
1140 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1157 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1141 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1158 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1142 SigninManager::DisableOneClickSignIn(profile); 1159 SigninManager::DisableOneClickSignIn(profile);
1143 StartSync( 1160 StartSync(
1144 StartSyncArgs(profile, browser, auto_accept_, session_index_, email_, 1161 StartSyncArgs(profile, browser, auto_accept_, session_index_, email_,
1145 password_, false /* force_same_tab_navigation */, 1162 password_, false /* force_same_tab_navigation */,
1146 confirmation_required_), 1163 saml_confirmation_required_, source_),
1147 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1164 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1148 break; 1165 break;
1149 case AUTO_ACCEPT_EXPLICIT: { 1166 case AUTO_ACCEPT_EXPLICIT: {
1150 if (switched_to_advanced_) { 1167 if (switched_to_advanced_) {
1151 LogHistogramValue(original_source_, 1168 LogHistogramValue(original_source_,
1152 one_click_signin::HISTOGRAM_WITH_ADVANCED); 1169 one_click_signin::HISTOGRAM_WITH_ADVANCED);
1153 LogHistogramValue(original_source_, 1170 LogHistogramValue(original_source_,
1154 one_click_signin::HISTOGRAM_ACCEPTED); 1171 one_click_signin::HISTOGRAM_ACCEPTED);
1155 } else { 1172 } else {
1156 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); 1173 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED);
1157 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1174 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1158 } 1175 }
1159 OneClickSigninSyncStarter::StartSyncMode start_mode = 1176 OneClickSigninSyncStarter::StartSyncMode start_mode =
1160 source_ == SyncPromoUI::SOURCE_SETTINGS ? 1177 source_ == SyncPromoUI::SOURCE_SETTINGS ?
1161 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1178 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1162 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1179 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1163 1180
1164 std::string last_email = 1181 std::string last_email =
1165 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1182 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1166 1183
1167 if (!last_email.empty() && last_email != email_) { 1184 if (!last_email.empty() && last_email != email_) {
1168 // If the new email address is different from the email address that 1185 // If the new email address is different from the email address that
1169 // just signed in, show a confirmation dialog. 1186 // just signed in, show a confirmation dialog.
1170 1187
1171 // No need to display a second confirmation. 1188 // No need to display a second confirmation.
1172 confirmation_required_ = false; 1189 saml_confirmation_required_ = false;
1173 ConfirmEmailDialogDelegate::AskForConfirmation( 1190 ConfirmEmailDialogDelegate::AskForConfirmation(
1174 contents, 1191 contents,
1175 last_email, 1192 last_email,
1176 email_, 1193 email_,
1177 base::Bind( 1194 base::Bind(
1178 &StartExplicitSync, 1195 &StartExplicitSync,
1179 StartSyncArgs(profile, browser, auto_accept_, 1196 StartSyncArgs(profile, browser, auto_accept_,
1180 session_index_, email_, password_, 1197 session_index_, email_, password_,
1181 force_same_tab_navigation, 1198 force_same_tab_navigation,
1182 confirmation_required_), 1199 saml_confirmation_required_, source_),
1183 contents, 1200 contents,
1184 start_mode)); 1201 start_mode));
Roger Tawa OOO till Jul 10th 2013/05/03 15:16:47 Can we move this confirmation dialog into the star
Andrew T Wilson (Slow) 2013/05/03 19:16:11 Maybe as a separate CL? I wasn't really doing this
Roger Tawa OOO till Jul 10th 2013/05/06 15:46:39 Sure.
Andrew T Wilson (Slow) 2013/05/06 17:00:13 Done.
1185 } else { 1202 } else {
1186 StartExplicitSync( 1203 StartExplicitSync(
1187 StartSyncArgs(profile, browser, auto_accept_, session_index_, 1204 StartSyncArgs(profile, browser, auto_accept_, session_index_,
1188 email_, password_, force_same_tab_navigation, 1205 email_, password_, force_same_tab_navigation,
1189 confirmation_required_), 1206 saml_confirmation_required_, source_),
1190 contents, 1207 contents,
1191 start_mode, 1208 start_mode,
1192 IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_CANCEL_BUTTON); 1209 IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_CANCEL_BUTTON);
1193 } 1210 }
1194 1211
1195 if (source_ == SyncPromoUI::SOURCE_SETTINGS && 1212 if (source_ == SyncPromoUI::SOURCE_SETTINGS &&
1196 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) == 1213 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) ==
1197 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { 1214 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
1198 redirect_url_ = continue_url_; 1215 redirect_url_ = continue_url_;
1199 ProfileSyncService* sync_service = 1216 ProfileSyncService* sync_service =
1200 ProfileSyncServiceFactory::GetForProfile(profile); 1217 ProfileSyncServiceFactory::GetForProfile(profile);
1201 if (sync_service) 1218 if (sync_service)
1202 sync_service->AddObserver(this); 1219 sync_service->AddObserver(this);
1203 } 1220 }
1204 1221
1205 // If this explicit sign in is not from settings page/webstore, show the 1222 // If this explicit sign in is not from settings page/webstore, show the
1206 // NTP/Apps page after sign in completes. In the case of the settings 1223 // NTP/Apps page after sign in completes. In the case of the settings
1207 // page, it will get closed by SyncSetupHandler. In the case of webstore, 1224 // page, it will get closed by SyncSetupHandler. In the case of webstore,
1208 // it will redirect back to webstore. 1225 // it will redirect back to webstore.
1209 if (source_ != SyncPromoUI::SOURCE_SETTINGS && 1226 if (source_ != SyncPromoUI::SOURCE_SETTINGS &&
1210 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { 1227 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
1211 signin_tracker_.reset(new SigninTracker(profile, this));
1212 RemoveCurrentHistoryItem(contents); 1228 RemoveCurrentHistoryItem(contents);
1213 RedirectToNtpOrAppsPage(false); 1229 RedirectToNtpOrAppsPage();
1214 } 1230 }
1215 break; 1231 break;
1216 } 1232 }
1217 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: 1233 case AUTO_ACCEPT_REJECTED_FOR_PROFILE:
1218 AddEmailToOneClickRejectedList(profile, email_); 1234 AddEmailToOneClickRejectedList(profile, email_);
1219 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); 1235 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED);
1220 break; 1236 break;
1221 default: 1237 default:
1222 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; 1238 NOTREACHED() << "Invalid auto_accept=" << auto_accept_;
1223 break; 1239 break;
1224 } 1240 }
1225 1241
1226 CleanTransientState(); 1242 CleanTransientState();
1227 } 1243 }
1228 1244
1229 void OneClickSigninHelper::GaiaCredentialsValid() {
1230 }
1231
1232 void OneClickSigninHelper::OnStateChanged() { 1245 void OneClickSigninHelper::OnStateChanged() {
1233 // No redirect url after sync setup is set, thus no need to watch for sync 1246 // No redirect url after sync setup is set, thus no need to watch for sync
1234 // state changes. 1247 // state changes.
1235 if (redirect_url_.is_empty()) 1248 if (redirect_url_.is_empty())
1236 return; 1249 return;
1237 1250
1238 content::WebContents* contents = web_contents(); 1251 content::WebContents* contents = web_contents();
1239 Profile* profile = 1252 Profile* profile =
1240 Profile::FromBrowserContext(contents->GetBrowserContext()); 1253 Profile::FromBrowserContext(contents->GetBrowserContext());
1241 ProfileSyncService* sync_service = 1254 ProfileSyncService* sync_service =
1242 ProfileSyncServiceFactory::GetForProfile(profile); 1255 ProfileSyncServiceFactory::GetForProfile(profile);
1243 1256
1244 // Sync setup not completed yet. 1257 // Sync setup not completed yet.
1245 if (sync_service->FirstSetupInProgress()) 1258 if (sync_service->FirstSetupInProgress())
1246 return; 1259 return;
1247 1260
1248 if (sync_service->sync_initialized()) { 1261 if (sync_service->sync_initialized()) {
1249 contents->GetController().LoadURL(redirect_url_, 1262 contents->GetController().LoadURL(redirect_url_,
1250 content::Referrer(), 1263 content::Referrer(),
1251 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 1264 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
1252 std::string()); 1265 std::string());
1253 } 1266 }
1254 1267
1255 // Clear the redirect URL. 1268 // Clear the redirect URL.
1256 redirect_url_ = GURL(); 1269 redirect_url_ = GURL();
1257 sync_service->RemoveObserver(this); 1270 sync_service->RemoveObserver(this);
1258 } 1271 }
1259
1260 void OneClickSigninHelper::SigninFailed(const GoogleServiceAuthError& error) {
1261 if (error_message_.empty() && !error.error_message().empty())
1262 error_message_ = error.error_message();
1263
1264 bool display_bubble = true;
1265 if (error_message_.empty()) {
1266 switch (error.state()) {
1267 case GoogleServiceAuthError::NONE:
1268 error_message_.clear();
1269 break;
1270 case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
1271 error_message_ = l10n_util::GetStringUTF8(IDS_SYNC_UNRECOVERABLE_ERROR);
1272 break;
1273 case GoogleServiceAuthError::REQUEST_CANCELED:
1274 // If the user cancelled signin, then no need to display any error
1275 // messages or anything - just go back to the NTP.
1276 error_message_.clear();
1277 display_bubble = false;
1278 break;
1279 default:
1280 error_message_ = l10n_util::GetStringUTF8(IDS_SYNC_ERROR_SIGNING_IN);
1281 break;
1282 }
1283 }
1284 ShowSyncConfirmationBubble(display_bubble);
1285 signin_tracker_.reset();
1286 }
1287
1288 void OneClickSigninHelper::SigninSuccess() {
1289 ShowSyncConfirmationBubble(true);
1290 signin_tracker_.reset();
1291 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698