Commit 9bf5ea4b authored by Theodore Olsauskas-Warren's avatar Theodore Olsauskas-Warren Committed by Commit Bot

Move Allow Chrome Sign In to Sync and Google Services from Privacy

Along with the elevation of the Privacy card out of advanced, the toggle
for allowing Chrome Sign In is being moved out of Privacy and into the
Sync and Google Services section.

This toggle is disabled during the Sync setup flow if the user elects
to go to settings during Sync setup.

Additionally, the "Turn On Sync.." button is disabled when Chrome Sign
In is disabled. This removes the possibility of enabling sync before
restarting the browser after disabling sign in.

Every change in behavior is behind the privacySettingsRedesignEnabled
finch flag.

Bug: 1014143
Change-Id: I4f2f11598ac22823310623d6bd079ece27bfe3b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1943174Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Reviewed-by: default avatarMartin Šrámek <msramek@chromium.org>
Commit-Queue: Theodore Olsauskas-Warren <sauski@google.com>
Cr-Commit-Position: refs/heads/master@{#721899}
parent b46aaae1
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
<div slot="footer" <div slot="footer"
hidden="[[!shouldShowFooter_(syncStatus.signedIn, diceEnabled_)]]"> hidden="[[!shouldShowFooter_(syncStatus.signedIn, diceEnabled_)]]">
<settings-sync-account-control sync-status="[[syncStatus]]" <settings-sync-account-control sync-status="[[syncStatus]]"
hide-buttons> prefs="{{prefs}}" hide-buttons>
</settings-sync-account-control> </settings-sync-account-control>
<div class="divider"></div> <div class="divider"></div>
<div id="footer-description" on-click="onSyncDescriptionLinkClicked_"> <div id="footer-description" on-click="onSyncDescriptionLinkClicked_">
......
...@@ -114,6 +114,7 @@ ...@@ -114,6 +114,7 @@
syncStatus.syncSystemEnabled, syncStatus.signinAllowed)]]"> syncStatus.syncSystemEnabled, syncStatus.signinAllowed)]]">
<settings-sync-account-control <settings-sync-account-control
sync-status="[[syncStatus]]" sync-status="[[syncStatus]]"
prefs="{{prefs}}"
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}"
promo-secondary-label-with-account= promo-secondary-label-with-account=
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
<link rel="import" href="sync_browser_proxy.html"> <link rel="import" href="sync_browser_proxy.html">
<link rel="import" href="../i18n_setup.html"> <link rel="import" href="../i18n_setup.html">
<link rel="import" href="../icons.html"> <link rel="import" href="../icons.html">
<link rel="import" href="../prefs/prefs.html">
<link rel="import" href="../prefs/prefs_behavior.html">
<link rel="import" href="../route.html"> <link rel="import" href="../route.html">
<link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../settings_shared_css.html">
...@@ -149,8 +151,10 @@ ...@@ -149,8 +151,10 @@
</div> </div>
<div class="secondary">[[subLabel_]]</div> <div class="secondary">[[subLabel_]]</div>
</div> </div>
<cr-button class="action-button" on-click="onSigninTap_" <cr-button class="action-button" on-click="onSigninTap_" id="sign-in"
disabled="[[syncStatus.firstSetupInProgress]]" id="sign-in" disabled="[[shouldDisableSyncButton_(showSetupButtons_,
syncStatus.firstSetupInProgress,
prefs.signin.allowed_on_next_startup.value)]]"
hidden="[[shouldShowAvatarRow_]]"> hidden="[[shouldShowAvatarRow_]]">
$i18n{peopleSignIn} $i18n{peopleSignIn}
</cr-button> </cr-button>
...@@ -194,7 +198,9 @@ ...@@ -194,7 +198,9 @@
<div class="separator" hidden="[[syncStatus.signedIn]]"></div> <div class="separator" hidden="[[syncStatus.signedIn]]"></div>
<cr-button id="sync-button" class="action-button" <cr-button id="sync-button" class="action-button"
hidden="[[syncStatus.signedIn]]" on-click="onSyncButtonTap_" hidden="[[syncStatus.signedIn]]" on-click="onSyncButtonTap_"
disabled="[[syncStatus.firstSetupInProgress]]"> disabled="[[shouldDisableSyncButton_(showSetupButtons_,
syncStatus.firstSetupInProgress,
prefs.signin.allowed_on_next_startup.value)]]">
$i18n{peopleSignIn} $i18n{peopleSignIn}
</cr-button> </cr-button>
<cr-button id="turn-off" <cr-button id="turn-off"
......
...@@ -13,8 +13,21 @@ settings.MAX_SIGNIN_PROMO_IMPRESSION = 10; ...@@ -13,8 +13,21 @@ settings.MAX_SIGNIN_PROMO_IMPRESSION = 10;
Polymer({ Polymer({
is: 'settings-sync-account-control', is: 'settings-sync-account-control',
behaviors: [WebUIListenerBehavior],
behaviors: [
WebUIListenerBehavior,
PrefsBehavior,
],
properties: { properties: {
/**
* Preferences state.
*/
prefs: {
type: Object,
notify: true,
},
/** /**
* The current sync status, supplied by parent element. * The current sync status, supplied by parent element.
* @type {!settings.SyncStatus} * @type {!settings.SyncStatus}
...@@ -296,6 +309,22 @@ Polymer({ ...@@ -296,6 +309,22 @@ Polymer({
return syncErrorLabel; return syncErrorLabel;
}, },
/**
* Determines if the sync button should be disabled in response to
* either a first setup flow or chrome sign-in being disabled.
* @return {boolean}
* @private
*/
shouldDisableSyncButton_: function() {
if (this.hideButtons ||
!loadTimeData.getBoolean('privacySettingsRedesignEnabled')) {
// Maintain existing behaviour if hidden or flag disabled
return this.computeShowSetupButtons_();
}
return !!this.syncStatus.firstSetupInProgress ||
!this.getPref('signin.allowed_on_next_startup').value;
},
/** /**
* @return {boolean} * @return {boolean}
* @private * @private
......
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
<template is="dom-if" if="[[shouldShowSyncAccountControl_( <template is="dom-if" if="[[shouldShowSyncAccountControl_(
syncStatus.syncSystemEnabled, syncStatus.signinAllowed)]]"> syncStatus.syncSystemEnabled, syncStatus.signinAllowed)]]">
<settings-sync-account-control embedded-in-subpage <settings-sync-account-control embedded-in-subpage
sync-status="[[syncStatus]]" sync-status="[[syncStatus]]" prefs="{{prefs}}"
promo-label-with-account= promo-label-with-account=
"$i18n{peopleSignInPromptSecondaryWithAccount}" "$i18n{peopleSignInPromptSecondaryWithAccount}"
promo-label-with-no-account= promo-label-with-no-account=
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../controls/settings_toggle_button.html">
<link rel="import" href="../lifetime_browser_proxy.html"> <link rel="import" href="../lifetime_browser_proxy.html">
<link rel="import" href="../people_page/signout_dialog.html">
<link rel="import" href="../people_page/sync_browser_proxy.html"> <link rel="import" href="../people_page/sync_browser_proxy.html">
<link rel="import" href="../prefs/prefs.html"> <link rel="import" href="../prefs/prefs.html">
<link rel="import" href="../prefs/prefs_behavior.html"> <link rel="import" href="../prefs/prefs_behavior.html">
...@@ -13,6 +14,10 @@ ...@@ -13,6 +14,10 @@
<link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../settings_shared_css.html">
<link rel="import" href="privacy_page_browser_proxy.html"> <link rel="import" href="privacy_page_browser_proxy.html">
<if expr="not chromeos">
<link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast.html">
</if>
<!-- <!--
* Note: If a synced pref is added/removed from this file, the method * Note: If a synced pref is added/removed from this file, the method
* |GetSyncedServicePrefNames| in * |GetSyncedServicePrefNames| in
...@@ -32,6 +37,18 @@ ...@@ -32,6 +37,18 @@
border-top: none; border-top: none;
} }
</style> </style>
<if expr="not chromeos">
<template is="dom-if" if="[[privacySettingsRedesignEnabled_]]">
<settings-toggle-button id="signinAllowedToggle"
disabled="[[syncFirstSetupInProgress_]]"
pref="{{prefs.signin.allowed_on_next_startup}}"
label="$i18n{signinAllowedTitle}"
sub-label="$i18n{signinAllowedDescription}"
on-settings-boolean-control-change="onSigninAllowedChange_"
no-set-pref>
</settings-toggle-button>
</template>
</if><!-- not chromeos -->
<settings-toggle-button hidden="[[!pageVisibility.searchPrediction]]" <settings-toggle-button hidden="[[!pageVisibility.searchPrediction]]"
pref="{{prefs.search.suggest_enabled}}" pref="{{prefs.search.suggest_enabled}}"
label="$i18n{searchSuggestPref}" label="$i18n{searchSuggestPref}"
...@@ -111,6 +128,21 @@ ...@@ -111,6 +128,21 @@
sub-label="$i18n{driveSuggestPrefDesc}"> sub-label="$i18n{driveSuggestPrefDesc}">
</settings-toggle-button> </settings-toggle-button>
</template> </template>
<template is="dom-if" if="[[privacySettingsRedesignEnabled_]]">
<template is="dom-if" if="[[showSignoutDialog_]]" restamp>
<settings-signout-dialog sync-status="[[syncStatus]]"
on-close="onSignoutDialogClosed_">
</settings-signout-dialog>
</template>
</template>
<if expr="not chromeos">
<cr-toast id="toast" open="[[showRestartToast_]]">
<div>$i18n{restartToApplyChanges}</div>
<cr-button on-click="onRestartTap_">$i18n{restart}</cr-button>
</cr-toast>
</if>
</template> </template>
<script src="personalization_options.js"></script> <script src="personalization_options.js"></script>
</dom-module> </dom-module>
...@@ -71,8 +71,14 @@ Polymer({ ...@@ -71,8 +71,14 @@ Polymer({
/** @private */ /** @private */
showRestart_: Boolean, showRestart_: Boolean,
/** @private */
showRestartToast_: Boolean,
// </if> // </if>
/** @private */
showSignoutDialog_: Boolean,
/** @private */ /** @private */
privacySettingsRedesignEnabled_: { privacySettingsRedesignEnabled_: {
type: Boolean, type: Boolean,
...@@ -80,6 +86,21 @@ Polymer({ ...@@ -80,6 +86,21 @@ Polymer({
return loadTimeData.getBoolean('privacySettingsRedesignEnabled'); return loadTimeData.getBoolean('privacySettingsRedesignEnabled');
}, },
}, },
/** @private */
syncFirstSetupInProgress_: {
type: Boolean,
value: false,
computed: 'computeSyncFirstSetupInProgress_(syncStatus)',
},
},
/**
* @return {boolean}
* @private
*/
computeSyncFirstSetupInProgress_: function() {
return !!this.syncStatus && !!this.syncStatus.firstSetupInProgress;
}, },
/** @override */ /** @override */
...@@ -206,14 +227,6 @@ Polymer({ ...@@ -206,14 +227,6 @@ Polymer({
} }
}, },
/**
* @param {!Event} e
* @private
*/
onRestartTap_: function(e) {
e.stopPropagation();
settings.LifetimeBrowserProxyImpl.getInstance().restart();
},
// </if> // </if>
// <if expr="_google_chrome"> // <if expr="_google_chrome">
...@@ -250,5 +263,45 @@ Polymer({ ...@@ -250,5 +263,45 @@ Polymer({
!!this.syncStatus && !!this.syncStatus.signedIn && !!this.syncStatus && !!this.syncStatus.signedIn &&
this.syncStatus.statusAction !== settings.StatusAction.REAUTHENTICATE; this.syncStatus.statusAction !== settings.StatusAction.REAUTHENTICATE;
}, },
/** @private */
onSigninAllowedChange_: function() {
if (this.syncStatus.signedIn && !this.$$('#signinAllowedToggle').checked) {
// Switch the toggle back on and show the signout dialog.
this.$$('#signinAllowedToggle').checked = true;
this.showSignoutDialog_ = true;
} else {
/** @type {!SettingsToggleButtonElement} */ (
this.$$('#signinAllowedToggle'))
.sendPrefChange();
this.showRestartToast_ = true;
}
this.browserProxy_.recordSettingsPageHistogram(
settings.SettingsPageInteractions.PRIVACY_CHROME_SIGN_IN);
},
/** @private */
onSignoutDialogClosed_: function() {
if (/** @type {!SettingsSignoutDialogElement} */ (
this.$$('settings-signout-dialog'))
.wasConfirmed()) {
this.$$('#signinAllowedToggle').checked = false;
/** @type {!SettingsToggleButtonElement} */ (
this.$$('#signinAllowedToggle'))
.sendPrefChange();
this.showRestartToast_ = true;
}
this.showSignoutDialog_ = false;
},
/**
* @param {!Event} e
* @private
*/
onRestartTap_: function(e) {
e.stopPropagation();
settings.LifetimeBrowserProxyImpl.getInstance().restart();
},
}); });
})(); })();
...@@ -102,13 +102,15 @@ ...@@ -102,13 +102,15 @@
</settings-toggle-button> </settings-toggle-button>
</template> </template>
<if expr="not chromeos"> <if expr="not chromeos">
<settings-toggle-button id="signinAllowedToggle" <template is="dom-if" if="[[!privacySettingsRedesignEnabled_]]">
pref="{{prefs.signin.allowed_on_next_startup}}" <settings-toggle-button id="signinAllowedToggle"
label="$i18n{signinAllowedTitle}" pref="{{prefs.signin.allowed_on_next_startup}}"
sub-label="$i18n{signinAllowedDescription}" label="$i18n{signinAllowedTitle}"
on-settings-boolean-control-change="onSigninAllowedChange_" sub-label="$i18n{signinAllowedDescription}"
no-set-pref> on-settings-boolean-control-change="onSigninAllowedChange_"
</settings-toggle-button> no-set-pref>
</settings-toggle-button>
</template>
</if><!-- not chromeos --> </if><!-- not chromeos -->
<settings-toggle-button id="doNotTrack" <settings-toggle-button id="doNotTrack"
pref="{{prefs.enable_do_not_track}}" label="$i18n{doNotTrack}" pref="{{prefs.enable_do_not_track}}" label="$i18n{doNotTrack}"
...@@ -704,10 +706,12 @@ ...@@ -704,10 +706,12 @@
</template> </template>
</settings-animated-pages> </settings-animated-pages>
<template is="dom-if" if="[[showSignoutDialog_]]" restamp> <template is="dom-if" if="[[!privacySettingsRedesignEnabled_]]">
<settings-signout-dialog sync-status="[[syncStatus]]" <template is="dom-if" if="[[showSignoutDialog_]]" restamp>
on-close="onSignoutDialogClosed_"> <settings-signout-dialog sync-status="[[syncStatus]]"
</settings-signout-dialog> on-close="onSignoutDialogClosed_">
</settings-signout-dialog>
</template>
</template> </template>
<if expr="not chromeos"> <if expr="not chromeos">
......
...@@ -30,29 +30,6 @@ const NetworkPredictionOptions = { ...@@ -30,29 +30,6 @@ const NetworkPredictionOptions = {
DEFAULT: 1, DEFAULT: 1,
}; };
/**
* These values are persisted to logs. Entries should not be renumbered and
* numeric values should never be reused.
*
* Must be kept in sync with enum of the same name in
* histograms/enums.xml
*
* Interactions across all settings pages should be added here.
*/
settings.SettingsPageInteractions = {
PRIVACY_SYNC_AND_GOOGLE_SERVICES: 0,
PRIVACY_CHROME_SIGN_IN: 1,
PRIVACY_DO_NOT_TRACK: 2,
PRIVACY_PAYMENT_METHOD: 3,
PRIVACY_NETWORK_PREDICTION: 4,
PRIVACY_MANAGE_CERTIFICATES: 5,
PRIVACY_SECURITY_KEYS: 6,
PRIVACY_SITE_SETTINGS: 7,
PRIVACY_CLEAR_BROWSING_DATA: 8,
// Leave this at the end.
SETTINGS_MAX_VALUE: 8,
};
Polymer({ Polymer({
is: 'settings-privacy-page', is: 'settings-privacy-page',
...@@ -455,13 +432,13 @@ Polymer({ ...@@ -455,13 +432,13 @@ Polymer({
/** @private */ /** @private */
onSigninAllowedChange_: function() { onSigninAllowedChange_: function() {
if (this.syncStatus.signedIn && !this.$.signinAllowedToggle.checked) { const toggle = this.$$('#signinAllowedToggle');
if (this.syncStatus.signedIn && !toggle.checked) {
// Switch the toggle back on and show the signout dialog. // Switch the toggle back on and show the signout dialog.
this.$.signinAllowedToggle.checked = true; toggle.checked = true;
this.showSignoutDialog_ = true; this.showSignoutDialog_ = true;
} else { } else {
/** @type {!SettingsToggleButtonElement} */ (this.$.signinAllowedToggle) toggle.sendPrefChange();
.sendPrefChange();
this.showRestart_ = true; this.showRestart_ = true;
} }
this.browserProxy_.recordSettingsPageHistogram( this.browserProxy_.recordSettingsPageHistogram(
...@@ -473,9 +450,9 @@ Polymer({ ...@@ -473,9 +450,9 @@ Polymer({
if (/** @type {!SettingsSignoutDialogElement} */ ( if (/** @type {!SettingsSignoutDialogElement} */ (
this.$$('settings-signout-dialog')) this.$$('settings-signout-dialog'))
.wasConfirmed()) { .wasConfirmed()) {
this.$.signinAllowedToggle.checked = false; const toggle = this.$$('#signinAllowedToggle');
/** @type {!SettingsToggleButtonElement} */ (this.$.signinAllowedToggle) toggle.checked = false;
.sendPrefChange(); toggle.sendPrefChange();
this.showRestart_ = true; this.showRestart_ = true;
} }
this.showSignoutDialog_ = false; this.showSignoutDialog_ = false;
......
...@@ -4,6 +4,29 @@ ...@@ -4,6 +4,29 @@
/** @fileoverview Handles interprocess communication for the privacy page. */ /** @fileoverview Handles interprocess communication for the privacy page. */
/**
* Contains all possible recorded interactions across privacy settings pages.
*
* These values are persisted to logs. Entries should not be renumbered and
* numeric values should never be reused.
*
* Must be kept in sync with enum of the same name in
* histograms/enums.xml
*/
settings.SettingsPageInteractions = {
PRIVACY_SYNC_AND_GOOGLE_SERVICES: 0,
PRIVACY_CHROME_SIGN_IN: 1,
PRIVACY_DO_NOT_TRACK: 2,
PRIVACY_PAYMENT_METHOD: 3,
PRIVACY_NETWORK_PREDICTION: 4,
PRIVACY_MANAGE_CERTIFICATES: 5,
PRIVACY_SECURITY_KEYS: 6,
PRIVACY_SITE_SETTINGS: 7,
PRIVACY_CLEAR_BROWSING_DATA: 8,
// Leave this at the end.
SETTINGS_MAX_VALUE: 8,
};
/** @typedef {{enabled: boolean, managed: boolean}} */ /** @typedef {{enabled: boolean, managed: boolean}} */
let MetricsReporting; let MetricsReporting;
......
...@@ -1122,6 +1122,7 @@ CrSettingsPersonalizationOptionsTest.prototype = { ...@@ -1122,6 +1122,7 @@ CrSettingsPersonalizationOptionsTest.prototype = {
'//ui/webui/resources/js/promise_resolver.js', '//ui/webui/resources/js/promise_resolver.js',
'sync_test_util.js', 'sync_test_util.js',
'test_util.js', 'test_util.js',
'../test_util.js',
'../test_browser_proxy.js', '../test_browser_proxy.js',
'test_privacy_page_browser_proxy.js', 'test_privacy_page_browser_proxy.js',
'test_sync_browser_proxy.js', 'test_sync_browser_proxy.js',
......
...@@ -95,6 +95,8 @@ cr.define('settings_personalization_options', function() { ...@@ -95,6 +95,8 @@ cr.define('settings_personalization_options', function() {
assertFalse(loadTimeData.getBoolean('privacySettingsRedesignEnabled')); assertFalse(loadTimeData.getBoolean('privacySettingsRedesignEnabled'));
assertVisible(testElement.$$('#safeBrowsingToggle'), true); assertVisible(testElement.$$('#safeBrowsingToggle'), true);
assertVisible(testElement.$$('#safeBrowsingReportingToggle'), true); assertVisible(testElement.$$('#safeBrowsingReportingToggle'), true);
assertFalse(!!testElement.$$('#signinAllowedToggle'));
}); });
if (!cr.isChromeOS) { if (!cr.isChromeOS) {
...@@ -165,10 +167,22 @@ cr.define('settings_personalization_options', function() { ...@@ -165,10 +167,22 @@ cr.define('settings_personalization_options', function() {
}); });
setup(function() { setup(function() {
syncBrowserProxy = new TestSyncBrowserProxy(); const testBrowserProxy = new TestPrivacyPageBrowserProxy();
settings.PrivacyPageBrowserProxyImpl.instance_ = testBrowserProxy;
const syncBrowserProxy = new TestSyncBrowserProxy();
settings.SyncBrowserProxyImpl.instance_ = syncBrowserProxy; settings.SyncBrowserProxyImpl.instance_ = syncBrowserProxy;
PolymerTest.clearBody(); PolymerTest.clearBody();
page = document.createElement('settings-personalization-options'); page = document.createElement('settings-personalization-options');
page.prefs = {
profile: {password_manager_leak_detection: {value: true}},
safebrowsing:
{enabled: {value: true}, scout_reporting_enabled: {value: true}},
signin: {
allowed_on_next_startup:
{type: chrome.settingsPrivate.PrefType.BOOLEAN, value: true},
},
};
document.body.appendChild(page); document.body.appendChild(page);
Polymer.dom.flush(); Polymer.dom.flush();
}); });
...@@ -182,6 +196,94 @@ cr.define('settings_personalization_options', function() { ...@@ -182,6 +196,94 @@ cr.define('settings_personalization_options', function() {
assertFalse(!!page.$$('#safeBrowsingToggle')); assertFalse(!!page.$$('#safeBrowsingToggle'));
assertFalse(!!page.$$('#safeBrowsingReportingToggle')); assertFalse(!!page.$$('#safeBrowsingReportingToggle'));
}); });
if (!cr.isChromeOS) {
test('signinAllowedToggle', function() {
const toggle = page.$$('#signinAllowedToggle');
assertVisible(toggle, true);
page.syncStatus = {signedIn: false};
// Check initial setup.
assertTrue(toggle.checked);
assertTrue(page.prefs.signin.allowed_on_next_startup.value);
assertFalse(!!page.$.toast.open);
// When the user is signed out, clicking the toggle should work
// normally and the restart toast should be opened.
toggle.click();
assertFalse(toggle.checked);
assertFalse(page.prefs.signin.allowed_on_next_startup.value);
assertTrue(page.$.toast.open);
// Clicking it again, turns the toggle back on. The toast remains
// open.
toggle.click();
assertTrue(toggle.checked);
assertTrue(page.prefs.signin.allowed_on_next_startup.value);
assertTrue(page.$.toast.open);
// Reset toast.
page.showRestartToast_ = false;
assertFalse(page.$.toast.open);
page.syncStatus = {signedIn: true};
// When the user is signed in, clicking the toggle should open the
// sign-out dialog.
assertFalse(!!page.$$('settings-signout-dialog'));
toggle.click();
return test_util.eventToPromise('cr-dialog-open', page)
.then(function() {
Polymer.dom.flush();
// The toggle remains on.
assertTrue(toggle.checked);
assertTrue(page.prefs.signin.allowed_on_next_startup.value);
assertFalse(page.$.toast.open);
const signoutDialog = page.$$('settings-signout-dialog');
assertTrue(!!signoutDialog);
assertTrue(signoutDialog.$$('#dialog').open);
// The user clicks cancel.
const cancel = signoutDialog.$$('#disconnectCancel');
cancel.click();
return test_util.eventToPromise('close', signoutDialog);
})
.then(function() {
Polymer.dom.flush();
assertFalse(!!page.$$('settings-signout-dialog'));
// After the dialog is closed, the toggle remains turned on.
assertTrue(toggle.checked);
assertTrue(page.prefs.signin.allowed_on_next_startup.value);
assertFalse(page.$.toast.open);
// The user clicks the toggle again.
toggle.click();
return test_util.eventToPromise('cr-dialog-open', page);
})
.then(function() {
Polymer.dom.flush();
const signoutDialog = page.$$('settings-signout-dialog');
assertTrue(!!signoutDialog);
assertTrue(signoutDialog.$$('#dialog').open);
// The user clicks confirm, which signs them out.
const disconnectConfirm = signoutDialog.$$('#disconnectConfirm');
disconnectConfirm.click();
return test_util.eventToPromise('close', signoutDialog);
})
.then(function() {
Polymer.dom.flush();
// After the dialog is closed, the toggle is turned off and the
// toast is shown.
assertFalse(toggle.checked);
assertFalse(page.prefs.signin.allowed_on_next_startup.value);
assertTrue(page.$.toast.open);
});
});
}
}); });
suite('PersonalizationOptionsTests_OfficialBuild', function() { suite('PersonalizationOptionsTests_OfficialBuild', function() {
......
...@@ -246,7 +246,8 @@ cr.define('settings_privacy_page', function() { ...@@ -246,7 +246,8 @@ cr.define('settings_privacy_page', function() {
if (!cr.isChromeOS) { if (!cr.isChromeOS) {
test('signinAllowedToggle', function() { test('signinAllowedToggle', function() {
const toggle = page.$.signinAllowedToggle; const toggle = page.$$('#signinAllowedToggle');
assertVisible(toggle, true);
page.syncStatus = {signedIn: false}; page.syncStatus = {signedIn: false};
// Check initial setup. // Check initial setup.
...@@ -360,6 +361,7 @@ cr.define('settings_privacy_page', function() { ...@@ -360,6 +361,7 @@ cr.define('settings_privacy_page', function() {
// Unloaded elements will not be present in the DOM // Unloaded elements will not be present in the DOM
assertFalse(!!page.$$('#syncLinkRow')); assertFalse(!!page.$$('#syncLinkRow'));
assertFalse(!!page.$$('#signinAllowedToggle'));
assertVisible(page.$$('#safeBrowsingToggle'), true); assertVisible(page.$$('#safeBrowsingToggle'), true);
assertVisible(page.$$('#safeBrowsingReportingToggle'), true); assertVisible(page.$$('#safeBrowsingReportingToggle'), true);
......
...@@ -36,6 +36,8 @@ cr.define('settings_sync_account_control', function() { ...@@ -36,6 +36,8 @@ cr.define('settings_sync_account_control', function() {
}); });
setup(function() { setup(function() {
assertFalse(loadTimeData.getBoolean('privacySettingsRedesignEnabled'));
browserProxy = new TestSyncBrowserProxy(); browserProxy = new TestSyncBrowserProxy();
settings.SyncBrowserProxyImpl.instance_ = browserProxy; settings.SyncBrowserProxyImpl.instance_ = browserProxy;
...@@ -45,6 +47,12 @@ cr.define('settings_sync_account_control', function() { ...@@ -45,6 +47,12 @@ cr.define('settings_sync_account_control', function() {
signedIn: true, signedIn: true,
signedInUsername: 'foo@foo.com' signedInUsername: 'foo@foo.com'
}; };
testElement.prefs = {
signin: {
allowed_on_next_startup:
{type: chrome.settingsPrivate.PrefType.BOOLEAN, value: true},
},
};
document.body.appendChild(testElement); document.body.appendChild(testElement);
return browserProxy.whenCalled('getStoredAccounts').then(() => { return browserProxy.whenCalled('getStoredAccounts').then(() => {
...@@ -491,5 +499,58 @@ cr.define('settings_sync_account_control', function() { ...@@ -491,5 +499,58 @@ cr.define('settings_sync_account_control', function() {
assertVisible(testElement.$$('#turn-off'), false); assertVisible(testElement.$$('#turn-off'), false);
assertVisible(testElement.$$('#sync-error-button'), false); assertVisible(testElement.$$('#sync-error-button'), false);
}); });
test('PrivacySettingsRedesignEnabled_False', function() {
// Ensure that the sync button is enabled regardless of signin pref.
assertTrue(testElement.getPref('signin.allowed_on_next_startup').value);
assertFalse(testElement.$$('#sign-in').disabled);
testElement.setPrefValue('signin.allowed_on_next_startup', false);
Polymer.dom.flush();
assertFalse(testElement.$$('#sign-in').disabled);
});
});
suite('PrivacySettingsRedesignTests', function() {
const peoplePage = null;
let browserProxy = null;
let testElement = null;
suiteSetup(function() {
loadTimeData.overrideValues({
privacySettingsRedesignEnabled: true,
});
});
setup(function() {
browserProxy = new TestSyncBrowserProxy();
settings.SyncBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
testElement = document.createElement('settings-sync-account-control');
testElement.syncStatus = {
signedIn: true,
signedInUsername: 'foo@foo.com'
};
testElement.prefs = {
signin: {
allowed_on_next_startup:
{type: chrome.settingsPrivate.PrefType.BOOLEAN, value: true},
},
};
document.body.appendChild(testElement);
Polymer.dom.flush();
});
teardown(function() {
testElement.remove();
});
test('signinButtonDisabled', function() {
// Ensure that the sync button is disabled when signin is disabled.
assertFalse(testElement.$$('#sign-in').disabled);
testElement.setPrefValue('signin.allowed_on_next_startup', false);
Polymer.dom.flush();
assertTrue(testElement.$$('#sign-in').disabled);
});
}); });
}); });
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