| Index: chrome/browser/signin/chrome_signin_client.cc
|
| diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc
|
| index 11ea969520d0bf98934dca6aac64581cb4e0c151..161c03039b54d493c0ffc6508daff68b48fe37b0 100644
|
| --- a/chrome/browser/signin/chrome_signin_client.cc
|
| +++ b/chrome/browser/signin/chrome_signin_client.cc
|
| @@ -273,19 +273,37 @@ void ChromeSigninClient::PreSignOut(
|
| const base::Callback<void()>& sign_out,
|
| signin_metrics::ProfileSignout signout_source_metric) {
|
| #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
|
| +
|
| + // These sign out won't remove the policy cache, keep the window opened.
|
| + bool keep_window_opened =
|
| + signout_source_metric ==
|
| + signin_metrics::GOOGLE_SERVICE_NAME_PATTERN_CHANGED ||
|
| + signout_source_metric == signin_metrics::SERVER_FORCED_DISABLE ||
|
| + signout_source_metric == signin_metrics::SIGNOUT_PREF_CHANGED;
|
| if (signin_util::IsForceSigninEnabled() && !profile_->IsSystemProfile() &&
|
| - !profile_->IsGuestSession() && !profile_->IsSupervised()) {
|
| - // TODO(zmin): force window closing based on the reason of sign-out.
|
| - // This will be updated after force window closing CL is commited.
|
| -
|
| - // User can't abort the window closing unless user sign out manually.
|
| - BrowserList::CloseAllBrowsersWithProfile(
|
| - profile_,
|
| - base::Bind(&ChromeSigninClient::OnCloseBrowsersSuccess,
|
| - base::Unretained(this), sign_out, signout_source_metric),
|
| - base::Bind(&ChromeSigninClient::OnCloseBrowsersAborted,
|
| - base::Unretained(this)),
|
| - false);
|
| + !profile_->IsGuestSession() && !profile_->IsSupervised() &&
|
| + !keep_window_opened) {
|
| + if (signout_source_metric ==
|
| + signin_metrics::SIGNIN_PREF_CHANGED_DURING_SIGNIN) {
|
| + // SIGNIN_PREF_CHANGED_DURING_SIGNIN will be triggered when SigninManager
|
| + // is initialized before window opening, there is no need to close window.
|
| + // Call OnCloseBrowsersSuccess to continue sign out and show UserManager
|
| + // afterwards.
|
| + should_display_user_manager_ = false; // Don't show UserManager twice.
|
| + OnCloseBrowsersSuccess(sign_out, signout_source_metric,
|
| + profile_->GetPath());
|
| + } else {
|
| + BrowserList::CloseAllBrowsersWithProfile(
|
| + profile_,
|
| + base::Bind(&ChromeSigninClient::OnCloseBrowsersSuccess,
|
| + base::Unretained(this), sign_out, signout_source_metric),
|
| + base::Bind(&ChromeSigninClient::OnCloseBrowsersAborted,
|
| + base::Unretained(this)),
|
| + signout_source_metric == signin_metrics::ABORT_SIGNIN ||
|
| + signout_source_metric ==
|
| + signin_metrics::AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN ||
|
| + signout_source_metric == signin_metrics::TRANSFER_CREDENTIALS);
|
| + }
|
| } else {
|
| #else
|
| {
|
| @@ -441,8 +459,10 @@ void ChromeSigninClient::OnCloseBrowsersSuccess(
|
| const signin_metrics::ProfileSignout signout_source_metric,
|
| const base::FilePath& profile_path) {
|
| #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
|
| - if (signin_util::IsForceSigninEnabled() && force_signin_verifier_.get())
|
| + if (signin_util::IsForceSigninEnabled() && force_signin_verifier_.get()) {
|
| force_signin_verifier_->Cancel();
|
| + force_signin_verifier_->AbortSignoutCountdownIfExisted();
|
| + }
|
| #endif
|
| SigninClient::PreSignOut(sign_out, signout_source_metric);
|
|
|
|
|