blob: 7e4e460d6c9d5a5cc2c27279c7754ccd93238030 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Behavior for policy controlled indicators.
* TODO(michaelpg): Since extensions can also control settings and be indicated,
* rework the "policy" naming scheme throughout this directory.
*/
/**
* Strings required for policy indicators. These must be set at runtime.
* Chrome OS only strings may be undefined.
* @type {{
* controlledSettingExtension: string,
* controlledSettingExtensionWithoutName: string,
* controlledSettingPolicy: string,
* controlledSettingRecommendedMatches: string,
* controlledSettingRecommendedDiffers: string,
* controlledSettingShared: (string|undefined),
* controlledSettingOwner: (string|undefined),
* }}
*/
// eslint-disable-next-line no-var
var CrPolicyStrings;
/** @enum {string} */
const CrPolicyIndicatorType = {
DEVICE_POLICY: 'devicePolicy',
EXTENSION: 'extension',
NONE: 'none',
OWNER: 'owner',
PRIMARY_USER: 'primary_user',
RECOMMENDED: 'recommended',
USER_POLICY: 'userPolicy',
};
/** @polymerBehavior */
const CrPolicyIndicatorBehavior = {
// Properties exposed to all policy indicators.
properties: {
/**
* Which indicator type to show (or NONE).
* @type {CrPolicyIndicatorType}
*/
indicatorType: {
type: String,
value: CrPolicyIndicatorType.NONE,
},
/**
* The name associated with the policy source. See
* chrome.settingsPrivate.PrefObject.controlledByName.
*/
indicatorSourceName: {
type: String,
value: '',
},
// Computed properties based on indicatorType and indicatorSourceName.
// Override to provide different values.
indicatorVisible: {
type: Boolean,
computed: 'getIndicatorVisible_(indicatorType)',
},
indicatorIcon: {
type: String,
computed: 'getIndicatorIcon_(indicatorType)',
},
},
/**
* @param {CrPolicyIndicatorType} type
* @return {boolean} True if the indicator should be shown.
* @private
*/
getIndicatorVisible_: function(type) {
return type != CrPolicyIndicatorType.NONE;
},
/**
* @param {CrPolicyIndicatorType} type
* @return {string} The iron-icon icon name.
* @private
*/
getIndicatorIcon_: function(type) {
switch (type) {
case CrPolicyIndicatorType.EXTENSION:
return 'cr:extension';
case CrPolicyIndicatorType.NONE:
return '';
case CrPolicyIndicatorType.PRIMARY_USER:
return 'cr:group';
case CrPolicyIndicatorType.OWNER:
return 'cr:person';
case CrPolicyIndicatorType.USER_POLICY:
case CrPolicyIndicatorType.DEVICE_POLICY:
case CrPolicyIndicatorType.RECOMMENDED:
return 'cr20:domain';
default:
assertNotReached();
}
},
/**
* @param {!CrPolicyIndicatorType} type
* @param {string} name The name associated with the indicator. See
* chrome.settingsPrivate.PrefObject.controlledByName
* @param {boolean=} opt_matches For RECOMMENDED only, whether the indicator
* value matches the recommended value.
* @return {string} The tooltip text for |type|.
*/
getIndicatorTooltip: function(type, name, opt_matches) {
if (!CrPolicyStrings)
return ''; // Tooltips may not be defined, e.g. in OOBE.
switch (type) {
case CrPolicyIndicatorType.EXTENSION:
return name.length > 0 ?
CrPolicyStrings.controlledSettingExtension.replace('$1', name) :
CrPolicyStrings.controlledSettingExtensionWithoutName;
case CrPolicyIndicatorType.PRIMARY_USER:
return CrPolicyStrings.controlledSettingShared.replace('$1', name);
case CrPolicyIndicatorType.OWNER:
return CrPolicyStrings.controlledSettingOwner.replace('$1', name);
case CrPolicyIndicatorType.USER_POLICY:
case CrPolicyIndicatorType.DEVICE_POLICY:
return CrPolicyStrings.controlledSettingPolicy;
case CrPolicyIndicatorType.RECOMMENDED:
return opt_matches ?
CrPolicyStrings.controlledSettingRecommendedMatches :
CrPolicyStrings.controlledSettingRecommendedDiffers;
}
return '';
},
};