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

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

Issue 22510004: Show sync setup in same tab as sign in instead of active tab. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix style Created 7 years, 4 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
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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 // Arguments used with StartSync function. base::Bind() cannot support too 87 // Arguments used with StartSync function. base::Bind() cannot support too
88 // many args for performance reasons, so they are packaged up into a struct. 88 // many args for performance reasons, so they are packaged up into a struct.
89 struct StartSyncArgs { 89 struct StartSyncArgs {
90 StartSyncArgs(Profile* profile, 90 StartSyncArgs(Profile* profile,
91 Browser* browser, 91 Browser* browser,
92 OneClickSigninHelper::AutoAccept auto_accept, 92 OneClickSigninHelper::AutoAccept auto_accept,
93 const std::string& session_index, 93 const std::string& session_index,
94 const std::string& email, 94 const std::string& email,
95 const std::string& password, 95 const std::string& password,
96 bool force_same_tab_navigation, 96 content::WebContents* web_contents,
97 bool untrusted_confirmation_required, 97 bool untrusted_confirmation_required,
98 signin::Source source, 98 signin::Source source,
99 OneClickSigninSyncStarter::Callback callback); 99 OneClickSigninSyncStarter::Callback callback);
100 100
101 Profile* profile; 101 Profile* profile;
102 Browser* browser; 102 Browser* browser;
103 OneClickSigninHelper::AutoAccept auto_accept; 103 OneClickSigninHelper::AutoAccept auto_accept;
104 std::string session_index; 104 std::string session_index;
105 std::string email; 105 std::string email;
106 std::string password; 106 std::string password;
107 bool force_same_tab_navigation; 107
108 // Web contents in which the sync setup page should be displayed,
109 // if necessary. Can be NULL.
110 content::WebContents* web_contents;
111
108 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; 112 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
109 signin::Source source; 113 signin::Source source;
110 OneClickSigninSyncStarter::Callback callback; 114 OneClickSigninSyncStarter::Callback callback;
111 }; 115 };
112 116
113 StartSyncArgs::StartSyncArgs(Profile* profile, 117 StartSyncArgs::StartSyncArgs(Profile* profile,
114 Browser* browser, 118 Browser* browser,
115 OneClickSigninHelper::AutoAccept auto_accept, 119 OneClickSigninHelper::AutoAccept auto_accept,
116 const std::string& session_index, 120 const std::string& session_index,
117 const std::string& email, 121 const std::string& email,
118 const std::string& password, 122 const std::string& password,
119 bool force_same_tab_navigation, 123 content::WebContents* web_contents,
120 bool untrusted_confirmation_required, 124 bool untrusted_confirmation_required,
121 signin::Source source, 125 signin::Source source,
122 OneClickSigninSyncStarter::Callback callback) 126 OneClickSigninSyncStarter::Callback callback)
123 : profile(profile), 127 : profile(profile),
124 browser(browser), 128 browser(browser),
125 auto_accept(auto_accept), 129 auto_accept(auto_accept),
126 session_index(session_index), 130 session_index(session_index),
127 email(email), 131 email(email),
128 password(password), 132 password(password),
129 force_same_tab_navigation(force_same_tab_navigation), 133 web_contents(web_contents),
130 source(source), 134 source(source),
131 callback(callback) { 135 callback(callback) {
132 if (untrusted_confirmation_required) { 136 if (untrusted_confirmation_required) {
133 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; 137 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN;
134 } else if (source == signin::SOURCE_SETTINGS || 138 } else if (source == signin::SOURCE_SETTINGS ||
135 source == signin::SOURCE_WEBSTORE_INSTALL) { 139 source == signin::SOURCE_WEBSTORE_INSTALL) {
136 // Do not display a status confirmation for webstore installs or re-auth. 140 // Do not display a status confirmation for webstore installs or re-auth.
137 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; 141 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
138 } else { 142 } else {
139 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; 143 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 void StartSync(const StartSyncArgs& args, 240 void StartSync(const StartSyncArgs& args,
237 OneClickSigninSyncStarter::StartSyncMode start_mode) { 241 OneClickSigninSyncStarter::StartSyncMode start_mode) {
238 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 242 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
239 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 243 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO);
240 return; 244 return;
241 } 245 }
242 246
243 // The starter deletes itself once its done. 247 // The starter deletes itself once its done.
244 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index, 248 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index,
245 args.email, args.password, start_mode, 249 args.email, args.password, start_mode,
246 args.force_same_tab_navigation, 250 args.web_contents,
247 args.confirmation_required, 251 args.confirmation_required,
248 args.source, 252 args.source,
249 args.callback); 253 args.callback);
250 254
251 int action = one_click_signin::HISTOGRAM_MAX; 255 int action = one_click_signin::HISTOGRAM_MAX;
252 switch (args.auto_accept) { 256 switch (args.auto_accept) {
253 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 257 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
254 break; 258 break;
255 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 259 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
256 action = 260 action =
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 return; 1142 return;
1139 } 1143 }
1140 1144
1141 // When the user uses the first-run, ntp, or hotdog menu to sign in, then have 1145 // When the user uses the first-run, ntp, or hotdog menu to sign in, then have
1142 // the option of checking the the box "Let me choose what to sync". When the 1146 // the option of checking the the box "Let me choose what to sync". When the
1143 // sign in process started, the source parameter in the continue URL may have 1147 // sign in process started, the source parameter in the continue URL may have
1144 // indicated one of the three options above. However, once this box is 1148 // indicated one of the three options above. However, once this box is
1145 // checked, the source parameter will indicate settings. This will only be 1149 // checked, the source parameter will indicate settings. This will only be
1146 // communicated back to chrome when Gaia redirects to the continue URL, and 1150 // communicated back to chrome when Gaia redirects to the continue URL, and
1147 // this is considered here a last minute change to the source. See a little 1151 // this is considered here a last minute change to the source. See a little
1148 // further below for when this variable is set to true. 1152 // further below for when this variable is set to a web contents that must be
1149 bool force_same_tab_navigation = false; 1153 // used to show the sync setup page.
1154 content::WebContents* sync_setup_contents = NULL;
1150 1155
1151 if (!continue_url_match && IsValidGaiaSigninRedirectOrResponseURL(url)) 1156 if (!continue_url_match && IsValidGaiaSigninRedirectOrResponseURL(url))
1152 return; 1157 return;
1153 1158
1154 // During an explicit sign in, if the user has not yet reached the final 1159 // During an explicit sign in, if the user has not yet reached the final
1155 // continue URL, wait for it to arrive. Note that Gaia will add some extra 1160 // continue URL, wait for it to arrive. Note that Gaia will add some extra
1156 // query parameters to the continue URL. Ignore them when checking to 1161 // query parameters to the continue URL. Ignore them when checking to
1157 // see if the user has continued. 1162 // see if the user has continued.
1158 // 1163 //
1159 // If this is not an explicit sign in, we don't need to check if we landed 1164 // If this is not an explicit sign in, we don't need to check if we landed
(...skipping 15 matching lines...) Expand all
1175 // source of the continue URL. Make one last check of the current URL 1180 // source of the continue URL. Make one last check of the current URL
1176 // to see if there is a valid source. If so, it overrides the 1181 // to see if there is a valid source. If so, it overrides the
1177 // current source. 1182 // current source.
1178 // 1183 //
1179 // If the source was changed to SOURCE_SETTINGS, we want 1184 // If the source was changed to SOURCE_SETTINGS, we want
1180 // OneClickSigninSyncStarter to reuse the current tab to display the 1185 // OneClickSigninSyncStarter to reuse the current tab to display the
1181 // advanced configuration. 1186 // advanced configuration.
1182 signin::Source source = signin::GetSourceForPromoURL(url); 1187 signin::Source source = signin::GetSourceForPromoURL(url);
1183 if (source != source_) { 1188 if (source != source_) {
1184 source_ = source; 1189 source_ = source;
1185 force_same_tab_navigation = source == signin::SOURCE_SETTINGS; 1190 if (source == signin::SOURCE_SETTINGS) {
1186 switched_to_advanced_ = source == signin::SOURCE_SETTINGS; 1191 sync_setup_contents = web_contents();
noms 2013/08/08 20:19:24 What's the difference between web_contents() here
Roger Tawa OOO till Jul 10th 2013/08/08 20:49:54 They are the same. See line 1076 above.
fdoray 2013/08/09 15:31:13 Should I use |contents|? On 2013/08/08 20:49:54,
1192 switched_to_advanced_ = true;
1193 }
1187 } 1194 }
1188 } 1195 }
1189 1196
1190 Browser* browser = chrome::FindBrowserWithWebContents(contents); 1197 Browser* browser = chrome::FindBrowserWithWebContents(contents);
1191 1198
1192 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go." 1199 VLOG(1) << "OneClickSigninHelper::DidStopLoading: signin is go."
1193 << " auto_accept=" << auto_accept_ 1200 << " auto_accept=" << auto_accept_
1194 << " source=" << source_; 1201 << " source=" << source_;
1195 1202
1196 switch (auto_accept_) { 1203 switch (auto_accept_) {
1197 case AUTO_ACCEPT_NONE: 1204 case AUTO_ACCEPT_NONE:
1198 if (showing_signin_) 1205 if (showing_signin_)
1199 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED); 1206 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_DISMISSED);
1200 break; 1207 break;
1201 case AUTO_ACCEPT_ACCEPTED: 1208 case AUTO_ACCEPT_ACCEPTED:
1202 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1209 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1203 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1210 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1204 SigninManager::DisableOneClickSignIn(profile); 1211 SigninManager::DisableOneClickSignIn(profile);
1205 // Start syncing with the default settings - prompt the user to sign in 1212 // Start syncing with the default settings - prompt the user to sign in
1206 // first. 1213 // first.
1207 StartSync(StartSyncArgs(profile, browser, auto_accept_, 1214 StartSync(
1208 session_index_, email_, password_, 1215 StartSyncArgs(profile, browser, auto_accept_,
1209 false /* force_same_tab_navigation */, 1216 session_index_, email_, password_,
1210 true /* confirmation_required */, source_, 1217 NULL /* don't force to show sync setup in same tab */,
1211 CreateSyncStarterCallback()), 1218 true /* confirmation_required */, source_,
1212 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 1219 CreateSyncStarterCallback()),
1220 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1213 break; 1221 break;
1214 case AUTO_ACCEPT_CONFIGURE: 1222 case AUTO_ACCEPT_CONFIGURE:
1215 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1223 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1216 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1224 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1217 SigninManager::DisableOneClickSignIn(profile); 1225 SigninManager::DisableOneClickSignIn(profile);
1218 // Display the extra confirmation (even in the SAML case) in case this 1226 // Display the extra confirmation (even in the SAML case) in case this
1219 // was an untrusted renderer. 1227 // was an untrusted renderer.
1220 StartSync( 1228 StartSync(
1221 StartSyncArgs(profile, browser, auto_accept_, session_index_, email_, 1229 StartSyncArgs(profile, browser, auto_accept_,
1222 password_, false /* force_same_tab_navigation */, 1230 session_index_, email_, password_,
1231 NULL /* don't force to show sync setup in same tab */,
1223 true /* confirmation_required */, source_, 1232 true /* confirmation_required */, source_,
1224 CreateSyncStarterCallback()), 1233 CreateSyncStarterCallback()),
1225 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1234 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1226 break; 1235 break;
1227 case AUTO_ACCEPT_EXPLICIT: { 1236 case AUTO_ACCEPT_EXPLICIT: {
1228 signin::Source original_source = 1237 signin::Source original_source =
1229 signin::GetSourceForPromoURL(original_continue_url_); 1238 signin::GetSourceForPromoURL(original_continue_url_);
1230 if (switched_to_advanced_) { 1239 if (switched_to_advanced_) {
1231 LogHistogramValue(original_source, 1240 LogHistogramValue(original_source,
1232 one_click_signin::HISTOGRAM_WITH_ADVANCED); 1241 one_click_signin::HISTOGRAM_WITH_ADVANCED);
(...skipping 19 matching lines...) Expand all
1252 1261
1253 std::string last_email = 1262 std::string last_email =
1254 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1263 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1255 1264
1256 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email_)) { 1265 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email_)) {
1257 // If the new email address is different from the email address that 1266 // If the new email address is different from the email address that
1258 // just signed in, show a confirmation dialog. 1267 // just signed in, show a confirmation dialog.
1259 1268
1260 // No need to display a second confirmation so pass false below. 1269 // No need to display a second confirmation so pass false below.
1261 // TODO(atwilson): Move this into OneClickSigninSyncStarter. 1270 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1271 // If |sync_setup_contents| is deleted before the callback execution,
1272 // the tab modal dialog is closed and the callback is never executed.
1262 ConfirmEmailDialogDelegate::AskForConfirmation( 1273 ConfirmEmailDialogDelegate::AskForConfirmation(
1263 contents, 1274 contents,
1264 last_email, 1275 last_email,
1265 email_, 1276 email_,
1266 base::Bind( 1277 base::Bind(
1267 &StartExplicitSync, 1278 &StartExplicitSync,
1268 StartSyncArgs(profile, browser, auto_accept_, 1279 StartSyncArgs(profile, browser, auto_accept_,
1269 session_index_, email_, password_, 1280 session_index_, email_, password_,
1270 force_same_tab_navigation, 1281 sync_setup_contents,
1271 false /* confirmation_required */, source_, 1282 false /* confirmation_required */, source_,
1272 CreateSyncStarterCallback()), 1283 CreateSyncStarterCallback()),
1273 contents, 1284 contents,
1274 start_mode)); 1285 start_mode));
1275 } else { 1286 } else {
1276 StartSync( 1287 StartSync(
1277 StartSyncArgs(profile, browser, auto_accept_, session_index_, 1288 StartSyncArgs(profile, browser, auto_accept_, session_index_,
1278 email_, password_, force_same_tab_navigation, 1289 email_, password_, sync_setup_contents,
1279 untrusted_confirmation_required_, source_, 1290 untrusted_confirmation_required_, source_,
1280 CreateSyncStarterCallback()), 1291 CreateSyncStarterCallback()),
1281 start_mode); 1292 start_mode);
1282 1293
1283 // If this explicit sign in is not from settings page/webstore, show 1294 // If this explicit sign in is not from settings page/webstore, show
1284 // the NTP/Apps page after sign in completes. In the case of the 1295 // the NTP/Apps page after sign in completes. In the case of the
1285 // settings page, it will get auto-closed after sync setup. In the case 1296 // settings page, it will get auto-closed after sync setup. In the case
1286 // of webstore, it will redirect back to webstore. 1297 // of webstore, it will redirect back to webstore.
1287 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); 1298 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_);
1288 } 1299 }
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 // If the web contents is showing a blank page and not about to be closed, 1383 // If the web contents is showing a blank page and not about to be closed,
1373 // redirect to the NTP or apps page. 1384 // redirect to the NTP or apps page.
1374 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1385 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1375 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1386 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1376 RedirectToNtpOrAppsPage( 1387 RedirectToNtpOrAppsPage(
1377 web_contents(), 1388 web_contents(),
1378 signin::GetSourceForPromoURL(original_continue_url_)); 1389 signin::GetSourceForPromoURL(original_continue_url_));
1379 } 1390 }
1380 } 1391 }
1381 } 1392 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698