blob: 6bf3e829c95cb56c97abd293946e400576801838 [file] [log] [blame]
// Copyright 2017 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 Polymer element for network configuration selection menus.
*/
Polymer({
is: 'network-config-select',
behaviors: [
I18nBehavior,
CrPolicyNetworkBehavior,
NetworkConfigElementBehavior,
],
properties: {
label: String,
/** Set to true if |items| is a list of certificates. */
certList: Boolean,
/**
* Array of item values to select from.
* @type {!Array<string>}
*/
items: Array,
/** Prefix used to look up ONC property names. */
oncPrefix: {
type: String,
value: '',
},
/** Select item value */
value: {
type: String,
notify: true,
},
},
observers: ['updateSelected_(items, value)'],
focus: function() {
this.$$('select').focus();
},
/**
* Ensure that the <select> value is updated when |items| or |value| changes.
* @private
*/
updateSelected_: function() {
// Wait for the dom-repeat to populate the <option> entries.
this.async(function() {
const select = this.$$('select');
if (select.value != this.value)
select.value = this.value;
});
},
/**
* @param {string|!chrome.networkingPrivate.Certificate} item
* @param {string} prefix
* @return {string} The text to display for the onc value.
* @private
*/
getItemLabel_: function(item, prefix) {
if (this.certList) {
return this.getCertificateName_(
/** @type {chrome.networkingPrivate.Certificate}*/ (item));
}
const key = /** @type {string} */ (item);
const oncKey = 'Onc' + prefix.replace(/\./g, '-') + '_' + key;
if (this.i18nExists(oncKey))
return this.i18n(oncKey);
assertNotReached('ONC Key not found: ' + oncKey);
return key;
},
/**
* @param {string|!chrome.networkingPrivate.Certificate} item
* @return {string}
* @private
*/
getItemValue_: function(item) {
if (this.certList)
return /** @type {chrome.networkingPrivate.Certificate}*/ (item).hash;
return /** @type {string} */ (item);
},
/**
* @param {string|!chrome.networkingPrivate.Certificate} item
* @return {boolean}
* @private
*/
getItemEnabled_: function(item) {
if (this.certList) {
const cert = /** @type {chrome.networkingPrivate.Certificate}*/ (item);
return !!cert.hash;
}
return true;
},
/**
* @param {!chrome.networkingPrivate.Certificate} certificate
* @return {string}
* @private
*/
getCertificateName_: function(certificate) {
if (certificate.hardwareBacked) {
return this.i18n(
'networkCertificateNameHardwareBacked', certificate.issuedBy,
certificate.issuedTo);
}
if (certificate.issuedTo) {
return this.i18n(
'networkCertificateName', certificate.issuedBy, certificate.issuedTo);
}
return certificate.issuedBy;
},
});