Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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::SigninAfterSAMLConfirmation() { |
| 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_SAML_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::SAMLConfirmationComplete, |
| 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::SAMLConfirmationComplete( |
| 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 neeeded if the user manually cancelled signin. | |
|
Roger Tawa OOO till Jul 10th
2013/05/03 15:16:47
tooo many e's :-)
Andrew T Wilson (Slow)
2013/05/03 19:16:11
Done.
| |
| 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 Loading... | |
| 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(¶ms); | 391 chrome::Navigate(¶ms); |
| 350 } | 392 } |
| OLD | NEW |