| 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 5ec7f887782a64ae45aecfed3e901df791867242..34096fdfd88b628f1a8c7e4e9a2e50aba0401ddb 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();
|
| + window.dispatchEvent(new Event('signout-dialog-closed'));
|
| },
|
|
|
| /** @private */
|
| @@ -247,9 +248,19 @@ Polymer({
|
| onDisconnectConfirm_: function() {
|
| var deleteProfile = !!this.syncStatus.domain ||
|
| (this.$.deleteProfile && this.$.deleteProfile.checked);
|
| - this.syncBrowserProxy_.signOut(deleteProfile);
|
| -
|
| + // Close the dialog and navigate to previous route before signout so
|
| + // session restore does not restore to the signout dialog.
|
| this.$.disconnectDialog.close();
|
| + // If user visit the signout dialog by typing in the address bar, there
|
| + // will be no previous browsing history so signout right after the dialog
|
| + // being closed. Otherwise, signout after the route has been navigated to
|
| + // the privious one with a callback.
|
| + var signoutEvent = 'signout-dialog-closed';
|
| + if (settings.isPreviousRouteExistedInHistory())
|
| + signoutEvent = 'popstate';
|
| + listenOnce(window, signoutEvent, function callback() {
|
| + this.syncBrowserProxy_.signOut(deleteProfile);
|
| + }.bind(this));
|
| },
|
|
|
| /** @private */
|
|
|