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

Side by Side Diff: chrome/browser/ui/sync/one_click_signin_sync_starter.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
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_sync_starter.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_sync_starter.h" 5 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 10
(...skipping 13 matching lines...) Expand all
24 #include "chrome/browser/sync/sync_prefs.h" 24 #include "chrome/browser/sync/sync_prefs.h"
25 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
26 #include "chrome/browser/ui/browser_finder.h" 26 #include "chrome/browser/ui/browser_finder.h"
27 #include "chrome/browser/ui/browser_navigator.h" 27 #include "chrome/browser/ui/browser_navigator.h"
28 #include "chrome/browser/ui/browser_window.h" 28 #include "chrome/browser/ui/browser_window.h"
29 #include "chrome/browser/ui/chrome_pages.h" 29 #include "chrome/browser/ui/chrome_pages.h"
30 #include "chrome/browser/ui/webui/signin/login_ui_service.h" 30 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
31 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 31 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
32 #include "chrome/browser/ui/webui/signin/profile_signin_confirmation_dialog.h" 32 #include "chrome/browser/ui/webui/signin/profile_signin_confirmation_dialog.h"
33 #include "chrome/common/url_constants.h" 33 #include "chrome/common/url_constants.h"
34 #include "grit/chromium_strings.h"
35 #include "grit/generated_resources.h"
36 #include "ui/base/l10n/l10n_util.h"
37 #include "ui/base/resource/resource_bundle.h"
34 38
35 OneClickSigninSyncStarter::OneClickSigninSyncStarter( 39 OneClickSigninSyncStarter::OneClickSigninSyncStarter(
36 Profile* profile, 40 Profile* profile,
37 Browser* browser, 41 Browser* browser,
38 const std::string& session_index, 42 const std::string& session_index,
39 const std::string& email, 43 const std::string& email,
40 const std::string& password, 44 const std::string& password,
41 StartSyncMode start_mode, 45 StartSyncMode start_mode,
42 bool force_same_tab_navigation, 46 bool force_same_tab_navigation,
43 bool confirmation_required) 47 ConfirmationRequired confirmation_required)
44 : start_mode_(start_mode), 48 : start_mode_(start_mode),
45 force_same_tab_navigation_(force_same_tab_navigation), 49 force_same_tab_navigation_(force_same_tab_navigation),
46 confirmation_required_(confirmation_required), 50 confirmation_required_(confirmation_required),
47 weak_pointer_factory_(this) { 51 weak_pointer_factory_(this) {
48 DCHECK(profile); 52 DCHECK(profile);
49 Initialize(profile, browser); 53 Initialize(profile, browser);
50 54
51 // Start the signin process using the cookies in the cookie jar. 55 // Start the signin process using the cookies in the cookie jar.
52 SigninManager* manager = SigninManagerFactory::GetForProfile(profile_); 56 SigninManager* manager = SigninManagerFactory::GetForProfile(profile_);
53 SigninManager::OAuthTokenFetchedCallback callback; 57 SigninManager::OAuthTokenFetchedCallback callback;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 #if defined(ENABLE_CONFIGURATION_POLICY) 104 #if defined(ENABLE_CONFIGURATION_POLICY)
101 policy::UserPolicySigninService* policy_service = 105 policy::UserPolicySigninService* policy_service =
102 policy::UserPolicySigninServiceFactory::GetForProfile(profile_); 106 policy::UserPolicySigninServiceFactory::GetForProfile(profile_);
103 policy_service->RegisterPolicyClient( 107 policy_service->RegisterPolicyClient(
104 signin->GetUsernameForAuthInProgress(), 108 signin->GetUsernameForAuthInProgress(),
105 oauth_token, 109 oauth_token,
106 base::Bind(&OneClickSigninSyncStarter::OnRegisteredForPolicy, 110 base::Bind(&OneClickSigninSyncStarter::OnRegisteredForPolicy,
107 weak_pointer_factory_.GetWeakPtr())); 111 weak_pointer_factory_.GetWeakPtr()));
108 return; 112 return;
109 #else 113 #else
110 SigninAfterSAMLConfirmation(); 114 ConfirmAndSignin();
111 #endif 115 #endif
112 } else { 116 } else {
113 // The user is already signed in - just tell SigninManager to continue 117 // The user is already signed in - just tell SigninManager to continue
114 // with its re-auth flow. 118 // with its re-auth flow.
115 signin->CompletePendingSignin(); 119 signin->CompletePendingSignin();
116 } 120 }
117 } 121 }
118 122
119 #if defined(ENABLE_CONFIGURATION_POLICY) 123 #if defined(ENABLE_CONFIGURATION_POLICY)
120 void OneClickSigninSyncStarter::OnRegisteredForPolicy( 124 void OneClickSigninSyncStarter::OnRegisteredForPolicy(
121 scoped_ptr<policy::CloudPolicyClient> client) { 125 scoped_ptr<policy::CloudPolicyClient> client) {
122 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_); 126 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_);
123 // If there's no token for the user (policy registration did not succeed) just 127 // If there's no token for the user (policy registration did not succeed) just
124 // finish signing in. 128 // finish signing in.
125 if (!client.get()) { 129 if (!client.get()) {
126 DVLOG(1) << "Policy registration failed"; 130 DVLOG(1) << "Policy registration failed";
127 SigninAfterSAMLConfirmation(); 131 ConfirmAndSignin();
128 return; 132 return;
129 } 133 }
130 134
131 DCHECK(client->is_registered()); 135 DCHECK(client->is_registered());
132 DVLOG(1) << "Policy registration succeeded: dm_token=" << client->dm_token(); 136 DVLOG(1) << "Policy registration succeeded: dm_token=" << client->dm_token();
133 137
134 // Stash away a copy of our CloudPolicyClient (should not already have one). 138 // Stash away a copy of our CloudPolicyClient (should not already have one).
135 DCHECK(!policy_client_); 139 DCHECK(!policy_client_);
136 policy_client_.swap(client); 140 policy_client_.swap(client);
137 141
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 // object will get freed when the signin on the old profile is cancelled. 232 // object will get freed when the signin on the old profile is cancelled.
229 old_signin_manager->SignOut(); 233 old_signin_manager->SignOut();
230 234
231 // Load policy for the just-created profile - once policy has finished 235 // Load policy for the just-created profile - once policy has finished
232 // loading the signin process will complete. 236 // loading the signin process will complete.
233 LoadPolicyWithCachedClient(); 237 LoadPolicyWithCachedClient();
234 } 238 }
235 } 239 }
236 #endif 240 #endif
237 241
238 void OneClickSigninSyncStarter::SigninAfterSAMLConfirmation() { 242 void OneClickSigninSyncStarter::ConfirmAndSignin() {
239 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_); 243 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_);
240 // browser_ can be null for unit tests. 244 // browser_ can be null for unit tests.
241 if (!browser_ || !confirmation_required_) { 245 if (browser_ && confirmation_required_ == CONFIRM_UNTRUSTED_SIGNIN) {
242 // No confirmation required - just sign in the user.
243 signin->CompletePendingSignin();
244 } else {
245 // Display a confirmation dialog to the user. 246 // Display a confirmation dialog to the user.
246 browser_->window()->ShowOneClickSigninBubble( 247 browser_->window()->ShowOneClickSigninBubble(
247 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG, 248 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG,
248 UTF8ToUTF16(signin->GetUsernameForAuthInProgress()), 249 UTF8ToUTF16(signin->GetUsernameForAuthInProgress()),
249 string16(), // No error message to display. 250 string16(), // No error message to display.
250 base::Bind(&OneClickSigninSyncStarter::SigninConfirmationComplete, 251 base::Bind(&OneClickSigninSyncStarter::UntrustedSigninConfirmed,
251 weak_pointer_factory_.GetWeakPtr())); 252 weak_pointer_factory_.GetWeakPtr()));
253 } else {
254 // No confirmation required - just sign in the user.
255 signin->CompletePendingSignin();
252 } 256 }
253 } 257 }
254 258
255 void OneClickSigninSyncStarter::SigninConfirmationComplete( 259 void OneClickSigninSyncStarter::UntrustedSigninConfirmed(
256 StartSyncMode response) { 260 StartSyncMode response) {
257 if (response == UNDO_SYNC) { 261 if (response == UNDO_SYNC) {
258 CancelSigninAndDelete(); 262 CancelSigninAndDelete();
259 } else { 263 } else {
260 // If the user clicked the "Advanced" link in the confirmation dialog, then 264 // If the user clicked the "Advanced" link in the confirmation dialog, then
261 // override the current start_mode_ to bring up the advanced sync settings. 265 // override the current start_mode_ to bring up the advanced sync settings.
262 if (response == CONFIGURE_SYNC_FIRST) 266 if (response == CONFIGURE_SYNC_FIRST)
263 start_mode_ = response; 267 start_mode_ = response;
264 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_); 268 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_);
265 signin->CompletePendingSignin(); 269 signin->CompletePendingSignin();
266 } 270 }
267 } 271 }
268 272
269 273
270 void OneClickSigninSyncStarter::SigninFailed( 274 void OneClickSigninSyncStarter::SigninFailed(
271 const GoogleServiceAuthError& error) { 275 const GoogleServiceAuthError& error) {
272 ProfileSyncService* profile_sync_service = GetProfileSyncService(); 276 ProfileSyncService* profile_sync_service = GetProfileSyncService();
273 if (profile_sync_service) 277 if (profile_sync_service)
274 profile_sync_service->SetSetupInProgress(false); 278 profile_sync_service->SetSetupInProgress(false);
279 if (confirmation_required_ == CONFIRM_AFTER_SIGNIN) {
280 switch (error.state()) {
281 case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
282 DisplayFinalConfirmationBubble(l10n_util::GetStringUTF16(
283 IDS_SYNC_UNRECOVERABLE_ERROR));
284 break;
285 case GoogleServiceAuthError::REQUEST_CANCELED:
286 // No error notification needed if the user manually cancelled signin.
287 break;
288 default:
289 DisplayFinalConfirmationBubble(l10n_util::GetStringUTF16(
290 IDS_SYNC_ERROR_SIGNING_IN));
291 break;
292 }
293 }
275 delete this; 294 delete this;
276 } 295 }
277 296
278 void OneClickSigninSyncStarter::SigninSuccess() { 297 void OneClickSigninSyncStarter::SigninSuccess() {
279 ProfileSyncService* profile_sync_service = GetProfileSyncService(); 298 ProfileSyncService* profile_sync_service = GetProfileSyncService();
280 switch (start_mode_) { 299 switch (start_mode_) {
281 case SYNC_WITH_DEFAULT_SETTINGS: 300 case SYNC_WITH_DEFAULT_SETTINGS:
282 if (profile_sync_service) { 301 if (profile_sync_service) {
283 // Just kick off the sync machine, no need to configure it first. 302 // Just kick off the sync machine, no need to configure it first.
284 profile_sync_service->OnUserChoseDatatypes(true, 303 profile_sync_service->OnUserChoseDatatypes(true,
285 syncer::ModelTypeSet()); 304 syncer::ModelTypeSet());
286 profile_sync_service->SetSyncSetupCompleted(); 305 profile_sync_service->SetSyncSetupCompleted();
287 profile_sync_service->SetSetupInProgress(false); 306 profile_sync_service->SetSetupInProgress(false);
288 } 307 }
308 if (confirmation_required_ == CONFIRM_AFTER_SIGNIN) {
309 string16 message;
310 if (!profile_sync_service) {
311 // Sync is disabled by policy.
312 message = l10n_util::GetStringUTF16(
313 IDS_ONE_CLICK_SIGNIN_BUBBLE_SYNC_DISABLED_MESSAGE);
314 }
315 DisplayFinalConfirmationBubble(message);
316 }
289 break; 317 break;
290 case CONFIGURE_SYNC_FIRST: 318 case CONFIGURE_SYNC_FIRST:
291 ConfigureSync(); 319 ConfigureSync();
292 break; 320 break;
293 default: 321 default:
294 NOTREACHED() << "Invalid start_mode=" << start_mode_; 322 NOTREACHED() << "Invalid start_mode=" << start_mode_;
295 } 323 }
324 delete this;
325 }
296 326
297 delete this; 327 void OneClickSigninSyncStarter::DisplayFinalConfirmationBubble(
328 const string16& custom_message) {
329 EnsureBrowser();
330 browser_->window()->ShowOneClickSigninBubble(
331 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
332 string16(), // No email required - this is not a SAML confirmation.
333 custom_message,
334 // Callback is ignored.
335 BrowserWindow::StartSyncCallback());
336 }
337
338 void OneClickSigninSyncStarter::EnsureBrowser() {
339 if (!browser_) {
340 // The user just created a new profile so we need to figure out what
341 // browser to use to display settings. Grab the most recently active
342 // browser or else create a new one.
343 browser_ = chrome::FindLastActiveWithProfile(profile_, desktop_type_);
344 if (!browser_) {
345 browser_ = new Browser(Browser::CreateParams(profile_,
346 desktop_type_));
347 }
348 browser_->window()->Show();
349 }
298 } 350 }
299 351
300 void OneClickSigninSyncStarter::ConfigureSync() { 352 void OneClickSigninSyncStarter::ConfigureSync() {
301 // Give the user a chance to configure things. We don't clear the 353 // Give the user a chance to configure things. We don't clear the
302 // ProfileSyncService::setup_in_progress flag because we don't want sync 354 // ProfileSyncService::setup_in_progress flag because we don't want sync
303 // to start up until after the configure UI is displayed (the configure UI 355 // to start up until after the configure UI is displayed (the configure UI
304 // will clear the flag when the user is done setting up sync). 356 // will clear the flag when the user is done setting up sync).
305 ProfileSyncService* profile_sync_service = GetProfileSyncService(); 357 ProfileSyncService* profile_sync_service = GetProfileSyncService();
306 LoginUIService* login_ui = LoginUIServiceFactory::GetForProfile(profile_); 358 LoginUIService* login_ui = LoginUIServiceFactory::GetForProfile(profile_);
307 if (login_ui->current_login_ui()) { 359 if (login_ui->current_login_ui()) {
308 login_ui->current_login_ui()->FocusUI(); 360 login_ui->current_login_ui()->FocusUI();
309 } else { 361 } else {
310 if (!browser_) { 362 EnsureBrowser();
311 // The user just created a new profile so we need to figure out what
312 // browser to use to display settings. Grab the most recently active
313 // browser or else create a new one.
314 browser_ = chrome::FindLastActiveWithProfile(profile_, desktop_type_);
315 if (!browser_) {
316 browser_ = new Browser(Browser::CreateParams(profile_,
317 desktop_type_));
318 }
319 browser_->window()->Show();
320 }
321 if (profile_sync_service) { 363 if (profile_sync_service) {
322 // Need to navigate to the settings page and display the sync UI. 364 // Need to navigate to the settings page and display the sync UI.
323 if (force_same_tab_navigation_) { 365 if (force_same_tab_navigation_) {
324 ShowSyncSettingsPageOnSameTab(); 366 ShowSyncSettingsPageOnSameTab();
325 } else { 367 } else {
326 chrome::ShowSettingsSubPage(browser_, chrome::kSyncSetupSubPage); 368 chrome::ShowSettingsSubPage(browser_, chrome::kSyncSetupSubPage);
327 } 369 }
328 } else { 370 } else {
329 // Sync is disabled - just display the settings page. 371 // Sync is disabled - just display the settings page.
330 chrome::ShowSettings(browser_); 372 chrome::ShowSettings(browser_);
(...skipping 10 matching lines...) Expand all
341 383
342 void OneClickSigninSyncStarter::ShowSyncSettingsPageOnSameTab() { 384 void OneClickSigninSyncStarter::ShowSyncSettingsPageOnSameTab() {
343 std::string url = std::string(chrome::kChromeUISettingsURL) + 385 std::string url = std::string(chrome::kChromeUISettingsURL) +
344 chrome::kSyncSetupSubPage; 386 chrome::kSyncSetupSubPage;
345 chrome::NavigateParams params( 387 chrome::NavigateParams params(
346 browser_, GURL(url), content::PAGE_TRANSITION_AUTO_TOPLEVEL); 388 browser_, GURL(url), content::PAGE_TRANSITION_AUTO_TOPLEVEL);
347 params.disposition = CURRENT_TAB; 389 params.disposition = CURRENT_TAB;
348 params.window_action = chrome::NavigateParams::SHOW_WINDOW; 390 params.window_action = chrome::NavigateParams::SHOW_WINDOW;
349 chrome::Navigate(&params); 391 chrome::Navigate(&params);
350 } 392 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_sync_starter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698