Commit d229babe authored by Thomas Tangl's avatar Thomas Tangl Committed by Commit Bot

[unified-consent] Add sign-in-again button when sync is paused

When sync is paused, i.e. the user is in an auth error, the
syncSetup page now has a button to sign in again to resolve
the error.

Mocks:
https://gallery.googleplex.com/projects/MCHbtQVoQ2HCZWnUS9sdsb0Q/files/MCHtA7U1iMGr664Bt8FBOxWEyjSSOyFCbW0

Bug: 856210
Cq-Include-Trybots: luci.chromium.try:closure_compilation
Change-Id: Iab413fb69fcabff076f3c48d3b828dea05df6229
Reviewed-on: https://chromium-review.googlesource.com/1138619
Commit-Queue: Thomas Tangl <tangltom@chromium.org>
Reviewed-by: default avatarScott Chen <scottchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577144}
parent 5a1fd352
...@@ -130,10 +130,6 @@ ...@@ -130,10 +130,6 @@
:host([showing-promo]) #promo-separator { :host([showing-promo]) #promo-separator {
@apply --promo-separator; @apply --promo-separator;
} }
:host([always-show-promo]) #turn-off {
display: none;
}
</style> </style>
<div id="banner" hidden="[[syncStatus.signedIn]]"></div> <div id="banner" hidden="[[syncStatus.signedIn]]"></div>
<div class="settings-box first two-line" id="promo-header" <div class="settings-box first two-line" id="promo-header"
...@@ -193,17 +189,25 @@ ...@@ -193,17 +189,25 @@
</button> </button>
</paper-icon-button-light> </paper-icon-button-light>
<div class="separator" hidden="[[syncStatus.signedIn]]"></div> <div class="separator" hidden="[[syncStatus.signedIn]]"></div>
<paper-button class="action-button" on-click="onSyncButtonTap_" <paper-button id="sync-button" class="action-button"
hidden="[[syncStatus.signedIn]]" hidden="[[syncStatus.signedIn]]" on-click="onSyncButtonTap_"
disabled="[[syncStatus.setupInProgress]]"> disabled="[[syncStatus.setupInProgress]]">
[[getSubstituteLabel_( [[getSubstituteLabel_(
'$i18nPolymer{syncAsName}', shownAccount_.givenName)]] '$i18nPolymer{syncAsName}', shownAccount_.givenName)]]
</paper-button> </paper-button>
<paper-button class="secondary-button" on-click="onTurnOffButtonTap_" <paper-button id="turn-off" class="secondary-button"
hidden="[[!syncStatus.signedIn]]" id="turn-off" hidden="[[!shouldShowTurnOffButton_(syncStatus.signedIn)]]"
on-click="onTurnOffButtonTap_"
disabled="[[syncStatus.setupInProgress]]"> disabled="[[syncStatus.setupInProgress]]">
$i18n{turnOffSync} $i18n{turnOffSync}
</paper-button> </paper-button>
<paper-button id="sync-paused-button" class="action-button"
hidden="[[!shouldShowSigninAgainButton_(
syncStatus.signedIn, syncStatus.hasError,
syncStatus.statusAction)]]"
on-click="onSigninTap_" disabled="[[syncStatus.setupInProgress]]">
$i18n{signInAgain}
</paper-button>
</div> </div>
<template is="dom-if" if="[[!syncStatus.signedIn]]" restamp> <template is="dom-if" if="[[!syncStatus.signedIn]]" restamp>
<cr-action-menu id="menu" auto-reposition> <cr-action-menu id="menu" auto-reposition>
......
...@@ -58,7 +58,7 @@ Polymer({ ...@@ -58,7 +58,7 @@ Polymer({
// This property should be set by the parent only and should not change // This property should be set by the parent only and should not change
// after the element is created. // after the element is created.
alwaysShowPromo: { embeddedInSubpage: {
type: Boolean, type: Boolean,
reflectToAttribute: true, reflectToAttribute: true,
}, },
...@@ -123,7 +123,7 @@ Polymer({ ...@@ -123,7 +123,7 @@ Polymer({
/** @private */ /** @private */
onSignedInChanged_: function() { onSignedInChanged_: function() {
if (this.alwaysShowPromo) { if (this.embeddedInSubpage) {
this.showingPromo = true; this.showingPromo = true;
return; return;
} }
...@@ -251,6 +251,24 @@ Polymer({ ...@@ -251,6 +251,24 @@ Polymer({
return accountName; return accountName;
}, },
/**
* @return {boolean}
* @private
*/
shouldShowTurnOffButton_: function() {
return !!this.syncStatus.signedIn && !this.embeddedInSubpage;
},
/**
* @return {boolean}
* @private
*/
shouldShowSigninAgainButton_: function() {
return !!this.syncStatus.signedIn && this.embeddedInSubpage &&
!!this.syncStatus.hasError &&
this.syncStatus.statusAction == settings.StatusAction.REAUTHENTICATE;
},
/** /**
* @param {!Array<!settings.StoredAccount>} accounts * @param {!Array<!settings.StoredAccount>} accounts
* @private * @private
......
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
<template is="dom-if" if="[[shouldShowSyncAccountControl_(diceEnabled, <template is="dom-if" if="[[shouldShowSyncAccountControl_(diceEnabled,
unifiedConsentEnabled, syncStatus.syncSystemEnabled, unifiedConsentEnabled, syncStatus.syncSystemEnabled,
syncStatus.signinAllowed)]]"> syncStatus.signinAllowed)]]">
<settings-sync-account-control always-show-promo <settings-sync-account-control embedded-in-subpage
sync-status="[[syncStatus]]" sync-status="[[syncStatus]]"
promo-label-with-account="$i18n{peopleSignInPrompt}" promo-label-with-account="$i18n{peopleSignInPrompt}"
promo-label-with-no-account="$i18n{peopleSignInPrompt}" promo-label-with-no-account="$i18n{peopleSignInPrompt}"
......
...@@ -1610,6 +1610,7 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { ...@@ -1610,6 +1610,7 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) {
{"syncAsName", IDS_SETTINGS_PEOPLE_SYNC_AS_NAME}, {"syncAsName", IDS_SETTINGS_PEOPLE_SYNC_AS_NAME},
{"syncingTo", IDS_SETTINGS_PEOPLE_SYNCING_TO_ACCOUNT}, {"syncingTo", IDS_SETTINGS_PEOPLE_SYNCING_TO_ACCOUNT},
{"turnOffSync", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF}, {"turnOffSync", IDS_SETTINGS_PEOPLE_SYNC_TURN_OFF},
{"signInAgain", IDS_SYNC_ERROR_USER_MENU_SIGNIN_AGAIN_BUTTON},
{"syncNotWorking", IDS_SETTINGS_PEOPLE_SYNC_NOT_WORKING}, {"syncNotWorking", IDS_SETTINGS_PEOPLE_SYNC_NOT_WORKING},
{"syncPaused", IDS_SETTINGS_PEOPLE_SYNC_PAUSED}, {"syncPaused", IDS_SETTINGS_PEOPLE_SYNC_PAUSED},
{"syncSignInPromptWithAccount", {"syncSignInPromptWithAccount",
......
...@@ -122,7 +122,7 @@ cr.define('settings_sync_account_control', function() { ...@@ -122,7 +122,7 @@ cr.define('settings_sync_account_control', function() {
]); ]);
const userInfo = testElement.$$('#user-info'); const userInfo = testElement.$$('#user-info');
const syncButton = testElement.$$('#avatar-row .action-button'); const syncButton = testElement.$$('#sync-button');
// Avatar row shows the right account. // Avatar row shows the right account.
assertVisible(testElement.$$('#promo-header'), true); assertVisible(testElement.$$('#promo-header'), true);
...@@ -145,7 +145,7 @@ cr.define('settings_sync_account_control', function() { ...@@ -145,7 +145,7 @@ cr.define('settings_sync_account_control', function() {
// "sync to" button is showing the correct name and syncs with the // "sync to" button is showing the correct name and syncs with the
// correct account when clicked. // correct account when clicked.
assertVisible(syncButton, true); assertVisible(syncButton, true);
assertVisible(testElement.$$('#avatar-row .secondary-button'), false); assertVisible(testElement.$$('#turn-off'), false);
assertTrue(syncButton.textContent.includes('foo')); assertTrue(syncButton.textContent.includes('foo'));
assertFalse(syncButton.textContent.includes('bar')); assertFalse(syncButton.textContent.includes('bar'));
syncButton.click(); syncButton.click();
...@@ -230,8 +230,9 @@ cr.define('settings_sync_account_control', function() { ...@@ -230,8 +230,9 @@ cr.define('settings_sync_account_control', function() {
assertFalse(userInfo.textContent.includes('fooName')); assertFalse(userInfo.textContent.includes('fooName'));
assertFalse(userInfo.textContent.includes('foo@foo.com')); assertFalse(userInfo.textContent.includes('foo@foo.com'));
assertVisible(testElement.$$('#avatar-row .action-button'), false); assertVisible(testElement.$$('#sync-button'), false);
assertVisible(testElement.$$('#avatar-row .secondary-button'), true); assertVisible(testElement.$$('#turn-off'), true);
assertVisible(testElement.$$('#sync-paused-button'), false);
testElement.$$('#avatar-row .secondary-button').click(); testElement.$$('#avatar-row .secondary-button').click();
Polymer.dom.flush(); Polymer.dom.flush();
...@@ -268,6 +269,8 @@ cr.define('settings_sync_account_control', function() { ...@@ -268,6 +269,8 @@ cr.define('settings_sync_account_control', function() {
assertFalse(displayedText.includes('barName')); assertFalse(displayedText.includes('barName'));
assertFalse(displayedText.includes('fooName')); assertFalse(displayedText.includes('fooName'));
assertTrue(displayedText.includes('Sync is paused')); assertTrue(displayedText.includes('Sync is paused'));
// Not embedded in a subpage, so there is no sync-paused button.
assertVisible(testElement.$$('#sync-paused-button'), false);
testElement.syncStatus = { testElement.syncStatus = {
signedIn: true, signedIn: true,
...@@ -287,7 +290,7 @@ cr.define('settings_sync_account_control', function() { ...@@ -287,7 +290,7 @@ cr.define('settings_sync_account_control', function() {
}); });
test('embedded in another page', function() { test('embedded in another page', function() {
testElement.alwaysShowPromo = true; testElement.embeddedInSubpage = true;
forcePromoResetWithCount(100, false); forcePromoResetWithCount(100, false);
const banner = testElement.$$('#banner'); const banner = testElement.$$('#banner');
assertVisible(banner, true); assertVisible(banner, true);
...@@ -301,6 +304,18 @@ cr.define('settings_sync_account_control', function() { ...@@ -301,6 +304,18 @@ cr.define('settings_sync_account_control', function() {
}; };
assertVisible(testElement.$$('#turn-off'), false); assertVisible(testElement.$$('#turn-off'), false);
assertVisible(testElement.$$('#sync-paused-button'), false);
testElement.embeddedInSubpage = true;
testElement.syncStatus = {
signedIn: true,
signedInUsername: 'bar@bar.com',
hasError: true,
statusAction: settings.StatusAction.REAUTHENTICATE,
disabled: false,
};
assertVisible(testElement.$$('#turn-off'), false);
assertVisible(testElement.$$('#sync-paused-button'), true);
}); });
}); });
}); });
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment