Index: chrome/browser/resources/settings/people_page/people_page.js |
diff --git a/chrome/browser/resources/settings/people_page/people_page.js b/chrome/browser/resources/settings/people_page/people_page.js |
index a2a61b843133325e1f3f45d0a87edd745be30545..ec625426fa28a93ab8a9f65fc7dc1c04505b9482 100644 |
--- a/chrome/browser/resources/settings/people_page/people_page.js |
+++ b/chrome/browser/resources/settings/people_page/people_page.js |
@@ -231,6 +231,7 @@ Polymer({ |
onDisconnectClosed_: function() { |
if (settings.getCurrentRoute() == settings.Route.SIGN_OUT) |
settings.navigateToPreviousRoute(); |
+ this.fire('signout-dialog-closed'); |
}, |
/** @private */ |
@@ -247,7 +248,15 @@ Polymer({ |
onDisconnectConfirm_: function() { |
var deleteProfile = !!this.syncStatus.domain || |
(this.$.deleteProfile && this.$.deleteProfile.checked); |
- this.syncBrowserProxy_.signOut(deleteProfile); |
+ // Trigger the sign out event after the navigateToPreviousRoute(). |
+ // So that the navigation to the setting page could be finished before the |
+ // sign out if navigateToPreviousRoute() returns synchronously even the |
+ // browser is closed after the sign out. Otherwise, the navigation will be |
+ // finshed during session restore if the browser is closed before the async |
+ // callback executed. |
+ listenOnce(this, 'signout-dialog-closed', function() { |
+ this.syncBrowserProxy_.signOut(deleteProfile); |
+ }.bind(this)); |
this.$.disconnectDialog.close(); |
}, |