Index: chrome/browser/ui/sync/one_click_signin_sync_starter.cc |
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc |
index 5a5b99ebd0f20383fadd977a0872241f981bea13..12d895628000d8f5c3eb0090f1ae83705c2bae71 100644 |
--- a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc |
+++ b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc |
@@ -31,6 +31,10 @@ |
#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
#include "chrome/browser/ui/webui/signin/profile_signin_confirmation_dialog.h" |
#include "chrome/common/url_constants.h" |
+#include "grit/chromium_strings.h" |
+#include "grit/generated_resources.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/resource/resource_bundle.h" |
OneClickSigninSyncStarter::OneClickSigninSyncStarter( |
Profile* profile, |
@@ -40,7 +44,7 @@ OneClickSigninSyncStarter::OneClickSigninSyncStarter( |
const std::string& password, |
StartSyncMode start_mode, |
bool force_same_tab_navigation, |
- bool confirmation_required) |
+ ConfirmationRequired confirmation_required) |
: start_mode_(start_mode), |
force_same_tab_navigation_(force_same_tab_navigation), |
confirmation_required_(confirmation_required), |
@@ -238,21 +242,21 @@ void OneClickSigninSyncStarter::CompleteSigninForNewProfile( |
void OneClickSigninSyncStarter::SigninAfterSAMLConfirmation() { |
SigninManager* signin = SigninManagerFactory::GetForProfile(profile_); |
// browser_ can be null for unit tests. |
- if (!browser_ || !confirmation_required_) { |
- // No confirmation required - just sign in the user. |
- signin->CompletePendingSignin(); |
- } else { |
+ if (browser_ && confirmation_required_ == CONFIRM_SAML_SIGNIN) { |
// Display a confirmation dialog to the user. |
browser_->window()->ShowOneClickSigninBubble( |
BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG, |
UTF8ToUTF16(signin->GetUsernameForAuthInProgress()), |
string16(), // No error message to display. |
- base::Bind(&OneClickSigninSyncStarter::SigninConfirmationComplete, |
+ base::Bind(&OneClickSigninSyncStarter::SAMLConfirmationComplete, |
weak_pointer_factory_.GetWeakPtr())); |
+ } else { |
+ // No confirmation required - just sign in the user. |
+ signin->CompletePendingSignin(); |
} |
} |
-void OneClickSigninSyncStarter::SigninConfirmationComplete( |
+void OneClickSigninSyncStarter::SAMLConfirmationComplete( |
StartSyncMode response) { |
if (response == UNDO_SYNC) { |
CancelSigninAndDelete(); |
@@ -272,6 +276,21 @@ void OneClickSigninSyncStarter::SigninFailed( |
ProfileSyncService* profile_sync_service = GetProfileSyncService(); |
if (profile_sync_service) |
profile_sync_service->SetSetupInProgress(false); |
+ if (confirmation_required_ == CONFIRM_AFTER_SIGNIN) { |
+ switch (error.state()) { |
+ case GoogleServiceAuthError::SERVICE_UNAVAILABLE: |
+ DisplayFinalConfirmationBubble(l10n_util::GetStringUTF16( |
+ IDS_SYNC_UNRECOVERABLE_ERROR)); |
+ break; |
+ case GoogleServiceAuthError::REQUEST_CANCELED: |
+ // 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.
|
+ break; |
+ default: |
+ DisplayFinalConfirmationBubble(l10n_util::GetStringUTF16( |
+ IDS_SYNC_ERROR_SIGNING_IN)); |
+ break; |
+ } |
+ } |
delete this; |
} |
@@ -286,6 +305,15 @@ void OneClickSigninSyncStarter::SigninSuccess() { |
profile_sync_service->SetSyncSetupCompleted(); |
profile_sync_service->SetSetupInProgress(false); |
} |
+ if (confirmation_required_ == CONFIRM_AFTER_SIGNIN) { |
+ string16 message; |
+ if (!profile_sync_service) { |
+ // Sync is disabled by policy. |
+ message = l10n_util::GetStringUTF16( |
+ IDS_ONE_CLICK_SIGNIN_BUBBLE_SYNC_DISABLED_MESSAGE); |
+ } |
+ DisplayFinalConfirmationBubble(message); |
+ } |
break; |
case CONFIGURE_SYNC_FIRST: |
ConfigureSync(); |
@@ -293,10 +321,34 @@ void OneClickSigninSyncStarter::SigninSuccess() { |
default: |
NOTREACHED() << "Invalid start_mode=" << start_mode_; |
} |
- |
delete this; |
} |
+void OneClickSigninSyncStarter::DisplayFinalConfirmationBubble( |
+ const string16& custom_message) { |
+ EnsureBrowser(); |
+ browser_->window()->ShowOneClickSigninBubble( |
+ BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, |
+ string16(), // No email required - this is not a SAML confirmation. |
+ custom_message, |
+ // Callback is ignored. |
+ BrowserWindow::StartSyncCallback()); |
+} |
+ |
+void OneClickSigninSyncStarter::EnsureBrowser() { |
+ if (!browser_) { |
+ // The user just created a new profile so we need to figure out what |
+ // browser to use to display settings. Grab the most recently active |
+ // browser or else create a new one. |
+ browser_ = chrome::FindLastActiveWithProfile(profile_, desktop_type_); |
+ if (!browser_) { |
+ browser_ = new Browser(Browser::CreateParams(profile_, |
+ desktop_type_)); |
+ } |
+ browser_->window()->Show(); |
+ } |
+} |
+ |
void OneClickSigninSyncStarter::ConfigureSync() { |
// Give the user a chance to configure things. We don't clear the |
// ProfileSyncService::setup_in_progress flag because we don't want sync |
@@ -307,17 +359,7 @@ void OneClickSigninSyncStarter::ConfigureSync() { |
if (login_ui->current_login_ui()) { |
login_ui->current_login_ui()->FocusUI(); |
} else { |
- if (!browser_) { |
- // The user just created a new profile so we need to figure out what |
- // browser to use to display settings. Grab the most recently active |
- // browser or else create a new one. |
- browser_ = chrome::FindLastActiveWithProfile(profile_, desktop_type_); |
- if (!browser_) { |
- browser_ = new Browser(Browser::CreateParams(profile_, |
- desktop_type_)); |
- } |
- browser_->window()->Show(); |
- } |
+ EnsureBrowser(); |
if (profile_sync_service) { |
// Need to navigate to the settings page and display the sync UI. |
if (force_same_tab_navigation_) { |