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

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

Issue 14667012: Merge 198866 "Move post-signin confirmation bubble to OneClickSi..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1500/src/
Patch Set: 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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 #include "ui/base/resource/resource_bundle.h" 77 #include "ui/base/resource/resource_bundle.h"
78 78
79 79
80 namespace { 80 namespace {
81 81
82 // StartSyncArgs -------------------------------------------------------------- 82 // StartSyncArgs --------------------------------------------------------------
83 83
84 // Arguments used with StartSync function. base::Bind() cannot support too 84 // Arguments used with StartSync function. base::Bind() cannot support too
85 // many args for performance reasons, so they are packaged up into a struct. 85 // many args for performance reasons, so they are packaged up into a struct.
86 struct StartSyncArgs { 86 struct StartSyncArgs {
87 StartSyncArgs(Profile* profile, 87 StartSyncArgs(
88 Browser* browser, 88 Profile* profile,
89 OneClickSigninHelper::AutoAccept auto_accept, 89 Browser* browser,
90 const std::string& session_index, 90 OneClickSigninHelper::AutoAccept auto_accept,
91 const std::string& email, 91 const std::string& session_index,
92 const std::string& password, 92 const std::string& email,
93 bool force_same_tab_navigation, 93 const std::string& password,
94 bool confirmation_required); 94 bool force_same_tab_navigation,
95 bool untrusted_confirmation_required,
96 SyncPromoUI::Source source);
95 97
96 Profile* profile; 98 Profile* profile;
97 Browser* browser; 99 Browser* browser;
98 OneClickSigninHelper::AutoAccept auto_accept; 100 OneClickSigninHelper::AutoAccept auto_accept;
99 std::string session_index; 101 std::string session_index;
100 std::string email; 102 std::string email;
101 std::string password; 103 std::string password;
102 bool force_same_tab_navigation; 104 bool force_same_tab_navigation;
103 bool confirmation_required; 105 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
104 }; 106 };
105 107
106 StartSyncArgs::StartSyncArgs(Profile* profile, 108 StartSyncArgs::StartSyncArgs(
107 Browser* browser, 109 Profile* profile,
108 OneClickSigninHelper::AutoAccept auto_accept, 110 Browser* browser,
109 const std::string& session_index, 111 OneClickSigninHelper::AutoAccept auto_accept,
110 const std::string& email, 112 const std::string& session_index,
111 const std::string& password, 113 const std::string& email,
112 bool force_same_tab_navigation, 114 const std::string& password,
113 bool confirmation_required) 115 bool force_same_tab_navigation,
116 bool untrusted_confirmation_required,
117 SyncPromoUI::Source source)
114 : profile(profile), 118 : profile(profile),
115 browser(browser), 119 browser(browser),
116 auto_accept(auto_accept), 120 auto_accept(auto_accept),
117 session_index(session_index), 121 session_index(session_index),
118 email(email), 122 email(email),
119 password(password), 123 password(password),
120 force_same_tab_navigation(force_same_tab_navigation), 124 force_same_tab_navigation(force_same_tab_navigation) {
121 confirmation_required(confirmation_required) { 125 if (untrusted_confirmation_required) {
126 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN;
127 } else if (source == SyncPromoUI::SOURCE_SETTINGS ||
128 source == SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
129 // Do not display a status confirmation for webstore installs or re-auth.
130 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
131 } else {
132 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
133 }
122 } 134 }
123 135
124 136
125 // Helpers -------------------------------------------------------------------- 137 // Helpers --------------------------------------------------------------------
126 138
127 // Add a specific email to the list of emails rejected for one-click 139 // Add a specific email to the list of emails rejected for one-click
128 // sign-in, for this profile. 140 // sign-in, for this profile.
129 void AddEmailToOneClickRejectedList(Profile* profile, 141 void AddEmailToOneClickRejectedList(Profile* profile,
130 const std::string& email) { 142 const std::string& email) {
131 PrefService* pref_service = profile->GetPrefs(); 143 PrefService* pref_service = profile->GetPrefs();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 one_click_signin::HISTOGRAM_MAX); 195 one_click_signin::HISTOGRAM_MAX);
184 } 196 }
185 197
186 // Start syncing with the given user information. 198 // Start syncing with the given user information.
187 void StartSync(const StartSyncArgs& args, 199 void StartSync(const StartSyncArgs& args,
188 OneClickSigninSyncStarter::StartSyncMode start_mode) { 200 OneClickSigninSyncStarter::StartSyncMode start_mode) {
189 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 201 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
190 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 202 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO);
191 return; 203 return;
192 } 204 }
205
206 // If we are giving the user the option to configure sync, then that will
207 // suffice as a confirmation.
208 OneClickSigninSyncStarter::ConfirmationRequired confirmation =
209 args.confirmation_required;
210 if (start_mode == OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST &&
211 confirmation == OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN) {
212 confirmation = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
213 }
214
193 // The starter deletes itself once its done. 215 // The starter deletes itself once its done.
194 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index, 216 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index,
195 args.email, args.password, start_mode, 217 args.email, args.password, start_mode,
196 args.force_same_tab_navigation, 218 args.force_same_tab_navigation,
197 args.confirmation_required); 219 confirmation);
198 220
199 int action = one_click_signin::HISTOGRAM_MAX; 221 int action = one_click_signin::HISTOGRAM_MAX;
200 switch (args.auto_accept) { 222 switch (args.auto_accept) {
201 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 223 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
202 break; 224 break;
203 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 225 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
204 action = 226 action =
205 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ? 227 start_mode == OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS ?
206 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS : 228 one_click_signin::HISTOGRAM_AUTO_WITH_DEFAULTS :
207 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED; 229 one_click_signin::HISTOGRAM_AUTO_WITH_ADVANCED;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper); 492 DEFINE_WEB_CONTENTS_USER_DATA_KEY(OneClickSigninHelper);
471 493
472 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents) 494 OneClickSigninHelper::OneClickSigninHelper(content::WebContents* web_contents)
473 : content::WebContentsObserver(web_contents), 495 : content::WebContentsObserver(web_contents),
474 showing_signin_(false), 496 showing_signin_(false),
475 auto_accept_(AUTO_ACCEPT_NONE), 497 auto_accept_(AUTO_ACCEPT_NONE),
476 source_(SyncPromoUI::SOURCE_UNKNOWN), 498 source_(SyncPromoUI::SOURCE_UNKNOWN),
477 switched_to_advanced_(false), 499 switched_to_advanced_(false),
478 original_source_(SyncPromoUI::SOURCE_UNKNOWN), 500 original_source_(SyncPromoUI::SOURCE_UNKNOWN),
479 untrusted_navigations_since_signin_visit_(0), 501 untrusted_navigations_since_signin_visit_(0),
480 confirmation_required_(false) { 502 untrusted_confirmation_required_(false) {
481 } 503 }
482 504
483 OneClickSigninHelper::~OneClickSigninHelper() { 505 OneClickSigninHelper::~OneClickSigninHelper() {
484 content::WebContents* contents = web_contents(); 506 content::WebContents* contents = web_contents();
485 if (contents) { 507 if (contents) {
486 Profile* profile = 508 Profile* profile =
487 Profile::FromBrowserContext(contents->GetBrowserContext()); 509 Profile::FromBrowserContext(contents->GetBrowserContext());
488 ProfileSyncService* sync_service = 510 ProfileSyncService* sync_service =
489 ProfileSyncServiceFactory::GetForProfile(profile); 511 ProfileSyncServiceFactory::GetForProfile(profile);
490 if (sync_service && sync_service->HasObserver(this)) 512 if (sync_service && sync_service->HasObserver(this))
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 CanOfferFor can_offer_for = 846 CanOfferFor can_offer_for =
825 (auto_accept != AUTO_ACCEPT_EXPLICIT && 847 (auto_accept != AUTO_ACCEPT_EXPLICIT &&
826 helper->auto_accept_ != AUTO_ACCEPT_EXPLICIT) ? 848 helper->auto_accept_ != AUTO_ACCEPT_EXPLICIT) ?
827 CAN_OFFER_FOR_INTERSTITAL_ONLY : CAN_OFFER_FOR_ALL; 849 CAN_OFFER_FOR_INTERSTITAL_ONLY : CAN_OFFER_FOR_ALL;
828 850
829 std::string error_message; 851 std::string error_message;
830 852
831 if (!web_contents || !CanOffer(web_contents, can_offer_for, email, 853 if (!web_contents || !CanOffer(web_contents, can_offer_for, email,
832 &error_message)) { 854 &error_message)) {
833 VLOG(1) << "OneClickSigninHelper::ShowInfoBarUIThread: not offering"; 855 VLOG(1) << "OneClickSigninHelper::ShowInfoBarUIThread: not offering";
856 // TODO(rogerta): Can we just display our error now instead of keeping it
857 // around and doing it later?
834 if (helper && helper->error_message_.empty() && !error_message.empty()) 858 if (helper && helper->error_message_.empty() && !error_message.empty())
835 helper->error_message_ = error_message; 859 helper->error_message_ = error_message;
836 860
837 return; 861 return;
838 } 862 }
839 863
840 // Only allow the dedicated signin process to sign the user into 864 // Only allow the dedicated signin process to sign the user into
841 // Chrome without intervention, because it doesn't load any untrusted 865 // Chrome without intervention, because it doesn't load any untrusted
842 // pages. If at any point an untrusted page is detected, chrome will 866 // pages. If at any point an untrusted page is detected, chrome will
843 // show a modal dialog asking the user to confirm. 867 // show a modal dialog asking the user to confirm.
844 Profile* profile = 868 Profile* profile =
845 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 869 Profile::FromBrowserContext(web_contents->GetBrowserContext());
846 SigninManager* manager = profile ? 870 SigninManager* manager = profile ?
847 SigninManagerFactory::GetForProfile(profile) : NULL; 871 SigninManagerFactory::GetForProfile(profile) : NULL;
848 helper->confirmation_required_ |= (manager && 872 helper->untrusted_confirmation_required_ |=
849 !manager->IsSigninProcess(child_id)); 873 (manager && !manager->IsSigninProcess(child_id));
850 874
851 // Save the email in the one-click signin manager. The manager may 875 // Save the email in the one-click signin manager. The manager may
852 // not exist if the contents is incognito or if the profile is already 876 // not exist if the contents is incognito or if the profile is already
853 // connected to a Google account. 877 // connected to a Google account.
854 if (!session_index.empty()) 878 if (!session_index.empty())
855 helper->session_index_ = session_index; 879 helper->session_index_ = session_index;
856 880
857 if (!email.empty()) 881 if (!email.empty())
858 helper->email_ = email; 882 helper->email_ = email;
859 883
860 if (continue_url.is_valid()) 884 if (continue_url.is_valid())
861 helper->continue_url_ = continue_url; 885 helper->continue_url_ = continue_url;
862 } 886 }
863 887
864 // static 888 // static
865 void OneClickSigninHelper::RemoveCurrentHistoryItem( 889 void OneClickSigninHelper::RemoveCurrentHistoryItem(
866 content::WebContents* web_contents) { 890 content::WebContents* web_contents) {
867 new CurrentHistoryCleaner(web_contents); // will self-destruct when finished 891 new CurrentHistoryCleaner(web_contents); // will self-destruct when finished
868 } 892 }
869 893
870 void OneClickSigninHelper::ShowSyncConfirmationBubble(bool show_bubble) { 894 void OneClickSigninHelper::ShowSigninErrorBubble(const std::string& error) {
871 if (show_bubble) { 895 DCHECK(!error.empty());
872 content::WebContents* contents = web_contents(); 896 content::WebContents* contents = web_contents();
873 Profile* profile = 897 Profile* profile =
874 Profile::FromBrowserContext(contents->GetBrowserContext()); 898 Profile::FromBrowserContext(contents->GetBrowserContext());
875 Browser* browser = chrome::FindBrowserWithWebContents(contents); 899 Browser* browser = chrome::FindBrowserWithWebContents(contents);
876 900
877 browser->window()->ShowOneClickSigninBubble( 901 browser->window()->ShowOneClickSigninBubble(
878 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 902 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
879 string16(), /* no SAML email */ 903 string16(), /* no SAML email */
880 UTF8ToUTF16(error_message_), 904 UTF8ToUTF16(error),
881 base::Bind(&StartSync, 905 // This callback is never invoked.
882 StartSyncArgs(profile, browser, AUTO_ACCEPT_ACCEPTED, 906 // TODO(rogerta): Separate out the bubble API so we don't have to pass
883 session_index_, email_, password_, 907 // ignored |email| and |callback| params.
884 false, confirmation_required_))); 908 base::Bind(&StartSync,
885 } 909 StartSyncArgs(profile, browser, AUTO_ACCEPT_ACCEPTED,
886 error_message_.clear(); 910 session_index_, email_, password_,
911 false, untrusted_confirmation_required_,
912 source_)));
887 } 913 }
888 914
889 void OneClickSigninHelper::RedirectToNtpOrAppsPage(bool show_bubble) { 915 void OneClickSigninHelper::RedirectToNtpOrAppsPage() {
890 VLOG(1) << "OneClickSigninHelper::RedirectToNtpOrAppsPage"; 916 VLOG(1) << "OneClickSigninHelper::RedirectToNtpOrAppsPage";
891
892 // Redirect to NTP/Apps page and display a confirmation bubble 917 // Redirect to NTP/Apps page and display a confirmation bubble
893 content::WebContents* contents = web_contents(); 918 content::WebContents* contents = web_contents();
894 GURL url(source_ == SyncPromoUI::SOURCE_APPS_PAGE_LINK ? 919 GURL url(source_ == SyncPromoUI::SOURCE_APPS_PAGE_LINK ?
895 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL); 920 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL);
896 content::OpenURLParams params(url, 921 content::OpenURLParams params(url,
897 content::Referrer(), 922 content::Referrer(),
898 CURRENT_TAB, 923 CURRENT_TAB,
899 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 924 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
900 false); 925 false);
901 contents->OpenURL(params); 926 contents->OpenURL(params);
902
903 ShowSyncConfirmationBubble(show_bubble);
904 } 927 }
905 928
906 void OneClickSigninHelper::RedirectToSignin() { 929 void OneClickSigninHelper::RedirectToSignin() {
907 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; 930 VLOG(1) << "OneClickSigninHelper::RedirectToSignin";
908 931
909 // Extract the existing sounce=X value. Default to "2" if missing. 932 // Extract the existing sounce=X value. Default to "2" if missing.
910 SyncPromoUI::Source source = 933 SyncPromoUI::Source source =
911 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_); 934 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_);
912 if (source == SyncPromoUI::SOURCE_UNKNOWN) 935 if (source == SyncPromoUI::SOURCE_UNKNOWN)
913 source = SyncPromoUI::SOURCE_MENU; 936 source = SyncPromoUI::SOURCE_MENU;
(...skipping 10 matching lines...) Expand all
924 VLOG(1) << "OneClickSigninHelper::CleanTransientState"; 947 VLOG(1) << "OneClickSigninHelper::CleanTransientState";
925 showing_signin_ = false; 948 showing_signin_ = false;
926 email_.clear(); 949 email_.clear();
927 password_.clear(); 950 password_.clear();
928 auto_accept_ = AUTO_ACCEPT_NONE; 951 auto_accept_ = AUTO_ACCEPT_NONE;
929 source_ = SyncPromoUI::SOURCE_UNKNOWN; 952 source_ = SyncPromoUI::SOURCE_UNKNOWN;
930 switched_to_advanced_ = false; 953 switched_to_advanced_ = false;
931 original_source_ = SyncPromoUI::SOURCE_UNKNOWN; 954 original_source_ = SyncPromoUI::SOURCE_UNKNOWN;
932 continue_url_ = GURL(); 955 continue_url_ = GURL();
933 untrusted_navigations_since_signin_visit_ = 0; 956 untrusted_navigations_since_signin_visit_ = 0;
934 confirmation_required_ = false; 957 untrusted_confirmation_required_ = false;
958 error_message_.clear();
935 959
936 // Post to IO thread to clear pending email. 960 // Post to IO thread to clear pending email.
937 Profile* profile = 961 Profile* profile =
938 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 962 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
939 content::BrowserThread::PostTask( 963 content::BrowserThread::PostTask(
940 content::BrowserThread::IO, FROM_HERE, 964 content::BrowserThread::IO, FROM_HERE,
941 base::Bind(&ClearPendingEmailOnIOThread, 965 base::Bind(&ClearPendingEmailOnIOThread,
942 base::Unretained(profile->GetResourceContext()))); 966 base::Unretained(profile->GetResourceContext())));
943 } 967 }
944 968
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 // TODO(rogerta): might need to allow some youtube URLs. 1023 // TODO(rogerta): might need to allow some youtube URLs.
1000 content::WebContents* contents = web_contents(); 1024 content::WebContents* contents = web_contents();
1001 const GURL url = contents->GetURL(); 1025 const GURL url = contents->GetURL();
1002 Profile* profile = 1026 Profile* profile =
1003 Profile::FromBrowserContext(contents->GetBrowserContext()); 1027 Profile::FromBrowserContext(contents->GetBrowserContext());
1004 VLOG(1) << "OneClickSigninHelper::DidStopLoading: url=" << url.spec(); 1028 VLOG(1) << "OneClickSigninHelper::DidStopLoading: url=" << url.spec();
1005 1029
1006 // If an error has already occured during the sign in flow, make sure to 1030 // If an error has already occured during the sign in flow, make sure to
1007 // display it to the user and abort the process. Do this only for 1031 // display it to the user and abort the process. Do this only for
1008 // explicit sign ins. 1032 // explicit sign ins.
1033 // TODO(rogerta): Could we move this code back up to ShowInfoBarUIThread()?
1009 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) { 1034 if (!error_message_.empty() && auto_accept_ == AUTO_ACCEPT_EXPLICIT) {
1010 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_; 1035 VLOG(1) << "OneClickSigninHelper::DidStopLoading: error=" << error_message_;
1011 RemoveCurrentHistoryItem(contents); 1036 RemoveCurrentHistoryItem(contents);
1012 RedirectToNtpOrAppsPage(true); 1037 // Redirect to the landing page and display an error popup.
1038 RedirectToNtpOrAppsPage();
1039 ShowSigninErrorBubble(error_message_);
1040 CleanTransientState();
1013 return; 1041 return;
1014 } 1042 }
1015 1043
1016 if (AreWeShowingSignin(url, source_, email_)) { 1044 if (AreWeShowingSignin(url, source_, email_)) {
1017 if (!showing_signin_) { 1045 if (!showing_signin_) {
1018 if (source_ == SyncPromoUI::SOURCE_UNKNOWN) 1046 if (source_ == SyncPromoUI::SOURCE_UNKNOWN)
1019 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN); 1047 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_SHOWN);
1020 else 1048 else
1021 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN); 1049 LogHistogramValue(source_, one_click_signin::HISTOGRAM_SHOWN);
1022 } 1050 }
(...skipping 14 matching lines...) Expand all
1037 // password is allowed to be empty, since its no longer required to setup 1065 // password is allowed to be empty, since its no longer required to setup
1038 // sync. 1066 // sync.
1039 if (email_.empty()) { 1067 if (email_.empty()) {
1040 VLOG(1) << "OneClickSigninHelper::DidStopLoading: nothing to do"; 1068 VLOG(1) << "OneClickSigninHelper::DidStopLoading: nothing to do";
1041 if (continue_url_match && auto_accept_ == AUTO_ACCEPT_EXPLICIT) 1069 if (continue_url_match && auto_accept_ == AUTO_ACCEPT_EXPLICIT)
1042 RedirectToSignin(); 1070 RedirectToSignin();
1043 std::string unused_value; 1071 std::string unused_value;
1044 if (net::GetValueForKeyInQuery(url, "ntp", &unused_value)) { 1072 if (net::GetValueForKeyInQuery(url, "ntp", &unused_value)) {
1045 SyncPromoUI::SetUserSkippedSyncPromo(profile); 1073 SyncPromoUI::SetUserSkippedSyncPromo(profile);
1046 RemoveCurrentHistoryItem(contents); 1074 RemoveCurrentHistoryItem(contents);
1047 RedirectToNtpOrAppsPage(false); 1075 RedirectToNtpOrAppsPage();
1048 } 1076 }
1049 1077
1050 if (!continue_url_match && !IsValidGaiaSigninRedirectOrResponseURL(url) && 1078 if (!continue_url_match && !IsValidGaiaSigninRedirectOrResponseURL(url) &&
1051 ++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince) { 1079 ++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince) {
1052 CleanTransientState(); 1080 CleanTransientState();
1053 } 1081 }
1054 1082
1055 return; 1083 return;
1056 } 1084 }
1057 1085
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 1144
1117 switch (auto_accept_) { 1145 switch (auto_accept_) {
1118 case AUTO_ACCEPT_NONE: 1146 case AUTO_ACCEPT_NONE:
1119 if (SyncPromoUI::UseWebBasedSigninFlow() && showing_signin_) 1147 if (SyncPromoUI::UseWebBasedSigninFlow() && showing_signin_)
1120 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED); 1148 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED);
1121 break; 1149 break;
1122 case AUTO_ACCEPT_ACCEPTED: 1150 case AUTO_ACCEPT_ACCEPTED:
1123 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1151 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1124 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1152 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1125 SigninManager::DisableOneClickSignIn(profile); 1153 SigninManager::DisableOneClickSignIn(profile);
1126 browser->window()->ShowOneClickSigninBubble( 1154 // Start syncing with the default settings - prompt the user to sign in
1127 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG, 1155 // first.
1128 UTF8ToUTF16(email_), 1156 StartSync(StartSyncArgs(profile, browser, auto_accept_,
1129 string16(), /* no error message to display */ 1157 session_index_, email_, password_,
1130 base::Bind(&StartSync, 1158 false /* force_same_tab_navigation */,
1131 StartSyncArgs(profile, browser, auto_accept_, 1159 true /* confirmation_required */, source_),
1132 session_index_, email_, password_, 1160 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1133 false /* force_same_tab_navigation */,
1134 confirmation_required_)));
1135 break; 1161 break;
1136 case AUTO_ACCEPT_CONFIGURE: 1162 case AUTO_ACCEPT_CONFIGURE:
1137 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1163 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1138 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1164 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1139 SigninManager::DisableOneClickSignIn(profile); 1165 SigninManager::DisableOneClickSignIn(profile);
1166 // Don't bother displaying an extra confirmation (even in the SAML case)
1167 // since the user will get prompted to setup sync anyway.
1140 StartSync( 1168 StartSync(
1141 StartSyncArgs(profile, browser, auto_accept_, session_index_, email_, 1169 StartSyncArgs(profile, browser, auto_accept_, session_index_, email_,
1142 password_, false /* force_same_tab_navigation */, 1170 password_, false /* force_same_tab_navigation */,
1143 confirmation_required_), 1171 false /* confirmation_required */, source_),
1144 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1172 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1145 break; 1173 break;
1146 case AUTO_ACCEPT_EXPLICIT: { 1174 case AUTO_ACCEPT_EXPLICIT: {
1147 if (switched_to_advanced_) { 1175 if (switched_to_advanced_) {
1148 LogHistogramValue(original_source_, 1176 LogHistogramValue(original_source_,
1149 one_click_signin::HISTOGRAM_WITH_ADVANCED); 1177 one_click_signin::HISTOGRAM_WITH_ADVANCED);
1150 LogHistogramValue(original_source_, 1178 LogHistogramValue(original_source_,
1151 one_click_signin::HISTOGRAM_ACCEPTED); 1179 one_click_signin::HISTOGRAM_ACCEPTED);
1152 } else { 1180 } else {
1153 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); 1181 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED);
1154 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1182 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1155 } 1183 }
1156 OneClickSigninSyncStarter::StartSyncMode start_mode = 1184 OneClickSigninSyncStarter::StartSyncMode start_mode =
1157 source_ == SyncPromoUI::SOURCE_SETTINGS ? 1185 source_ == SyncPromoUI::SOURCE_SETTINGS ?
1158 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1186 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1159 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1187 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1160 1188
1161 std::string last_email = 1189 std::string last_email =
1162 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1190 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1163 1191
1164 if (!last_email.empty() && last_email != email_) { 1192 if (!last_email.empty() && last_email != email_) {
1165 // If the new email address is different from the email address that 1193 // If the new email address is different from the email address that
1166 // just signed in, show a confirmation dialog. 1194 // just signed in, show a confirmation dialog.
1167 1195
1168 // No need to display a second confirmation. 1196 // No need to display a second confirmation so pass false below.
1169 confirmation_required_ = false; 1197 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1170 ConfirmEmailDialogDelegate::AskForConfirmation( 1198 ConfirmEmailDialogDelegate::AskForConfirmation(
1171 contents, 1199 contents,
1172 last_email, 1200 last_email,
1173 email_, 1201 email_,
1174 base::Bind( 1202 base::Bind(
1175 &StartExplicitSync, 1203 &StartExplicitSync,
1176 StartSyncArgs(profile, browser, auto_accept_, 1204 StartSyncArgs(profile, browser, auto_accept_,
1177 session_index_, email_, password_, 1205 session_index_, email_, password_,
1178 force_same_tab_navigation, 1206 force_same_tab_navigation,
1179 confirmation_required_), 1207 false /* confirmation_required */, source_),
1180 contents, 1208 contents,
1181 start_mode)); 1209 start_mode));
1182 } else { 1210 } else {
1183 StartExplicitSync( 1211 StartSync(
1184 StartSyncArgs(profile, browser, auto_accept_, session_index_, 1212 StartSyncArgs(profile, browser, auto_accept_, session_index_,
1185 email_, password_, force_same_tab_navigation, 1213 email_, password_, force_same_tab_navigation,
1186 confirmation_required_), 1214 untrusted_confirmation_required_, source_),
1187 contents, 1215 start_mode);
1188 start_mode,
1189 IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_CANCEL_BUTTON);
1190 } 1216 }
1191 1217
1192 if (source_ == SyncPromoUI::SOURCE_SETTINGS && 1218 if (source_ == SyncPromoUI::SOURCE_SETTINGS &&
1193 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) == 1219 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) ==
1194 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { 1220 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
1195 redirect_url_ = continue_url_; 1221 redirect_url_ = continue_url_;
1196 ProfileSyncService* sync_service = 1222 ProfileSyncService* sync_service =
1197 ProfileSyncServiceFactory::GetForProfile(profile); 1223 ProfileSyncServiceFactory::GetForProfile(profile);
1198 if (sync_service) 1224 if (sync_service)
1199 sync_service->AddObserver(this); 1225 sync_service->AddObserver(this);
1200 } 1226 }
1201 1227
1202 // If this explicit sign in is not from settings page/webstore, show the 1228 // If this explicit sign in is not from settings page/webstore, show the
1203 // NTP/Apps page after sign in completes. In the case of the settings 1229 // NTP/Apps page after sign in completes. In the case of the settings
1204 // page, it will get closed by SyncSetupHandler. In the case of webstore, 1230 // page, it will get closed by SyncSetupHandler. In the case of webstore,
1205 // it will redirect back to webstore. 1231 // it will redirect back to webstore.
1206 if (source_ != SyncPromoUI::SOURCE_SETTINGS && 1232 if (source_ != SyncPromoUI::SOURCE_SETTINGS &&
1207 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { 1233 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) {
1208 signin_tracker_.reset(new SigninTracker(profile, this));
1209 RemoveCurrentHistoryItem(contents); 1234 RemoveCurrentHistoryItem(contents);
1210 RedirectToNtpOrAppsPage(false); 1235 RedirectToNtpOrAppsPage();
1211 } 1236 }
1212 break; 1237 break;
1213 } 1238 }
1214 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: 1239 case AUTO_ACCEPT_REJECTED_FOR_PROFILE:
1215 AddEmailToOneClickRejectedList(profile, email_); 1240 AddEmailToOneClickRejectedList(profile, email_);
1216 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); 1241 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED);
1217 break; 1242 break;
1218 default: 1243 default:
1219 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; 1244 NOTREACHED() << "Invalid auto_accept=" << auto_accept_;
1220 break; 1245 break;
1221 } 1246 }
1222 1247
1223 CleanTransientState(); 1248 CleanTransientState();
1224 } 1249 }
1225 1250
1226 void OneClickSigninHelper::GaiaCredentialsValid() {
1227 }
1228
1229 void OneClickSigninHelper::OnStateChanged() { 1251 void OneClickSigninHelper::OnStateChanged() {
1230 // No redirect url after sync setup is set, thus no need to watch for sync 1252 // No redirect url after sync setup is set, thus no need to watch for sync
1231 // state changes. 1253 // state changes.
1232 if (redirect_url_.is_empty()) 1254 if (redirect_url_.is_empty())
1233 return; 1255 return;
1234 1256
1235 content::WebContents* contents = web_contents(); 1257 content::WebContents* contents = web_contents();
1236 Profile* profile = 1258 Profile* profile =
1237 Profile::FromBrowserContext(contents->GetBrowserContext()); 1259 Profile::FromBrowserContext(contents->GetBrowserContext());
1238 ProfileSyncService* sync_service = 1260 ProfileSyncService* sync_service =
1239 ProfileSyncServiceFactory::GetForProfile(profile); 1261 ProfileSyncServiceFactory::GetForProfile(profile);
1240 1262
1241 // Sync setup not completed yet. 1263 // Sync setup not completed yet.
1242 if (sync_service->FirstSetupInProgress()) 1264 if (sync_service->FirstSetupInProgress())
1243 return; 1265 return;
1244 1266
1245 if (sync_service->sync_initialized()) { 1267 if (sync_service->sync_initialized()) {
1246 contents->GetController().LoadURL(redirect_url_, 1268 contents->GetController().LoadURL(redirect_url_,
1247 content::Referrer(), 1269 content::Referrer(),
1248 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 1270 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
1249 std::string()); 1271 std::string());
1250 } 1272 }
1251 1273
1252 // Clear the redirect URL. 1274 // Clear the redirect URL.
1253 redirect_url_ = GURL(); 1275 redirect_url_ = GURL();
1254 sync_service->RemoveObserver(this); 1276 sync_service->RemoveObserver(this);
1255 } 1277 }
1256
1257 void OneClickSigninHelper::SigninFailed(const GoogleServiceAuthError& error) {
1258 if (error_message_.empty() && !error.error_message().empty())
1259 error_message_ = error.error_message();
1260
1261 bool display_bubble = true;
1262 if (error_message_.empty()) {
1263 switch (error.state()) {
1264 case GoogleServiceAuthError::NONE:
1265 error_message_.clear();
1266 break;
1267 case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
1268 error_message_ = l10n_util::GetStringUTF8(IDS_SYNC_UNRECOVERABLE_ERROR);
1269 break;
1270 case GoogleServiceAuthError::REQUEST_CANCELED:
1271 // If the user cancelled signin, then no need to display any error
1272 // messages or anything - just go back to the NTP.
1273 error_message_.clear();
1274 display_bubble = false;
1275 break;
1276 default:
1277 error_message_ = l10n_util::GetStringUTF8(IDS_SYNC_ERROR_SIGNING_IN);
1278 break;
1279 }
1280 }
1281 ShowSyncConfirmationBubble(display_bubble);
1282 signin_tracker_.reset();
1283 }
1284
1285 void OneClickSigninHelper::SigninSuccess() {
1286 ShowSyncConfirmationBubble(true);
1287 signin_tracker_.reset();
1288 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_helper.h ('k') | chrome/browser/ui/sync/one_click_signin_sync_starter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698