blob: a04d5ed4935b3a0aa558cfbb9de1699aa6706e97 [file] [log] [blame]
// Copyright 2019 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.
cr.define('management', function() {
/**
* @typedef {{
* messageIds: !Array<string>,
* icon: string,
* }}
*/
let BrowserReportingData;
Polymer({
is: 'management-ui',
behaviors: [
I18nBehavior,
WebUIListenerBehavior,
],
properties: {
/**
* List of messages related to browser reporting.
* @private {?Array<!management.BrowserReportingData>}
*/
browserReportingInfo_: Array,
/**
* List of messages related to browser reporting.
* @private {?Array<!management.Extension>}
*/
extensions_: Array,
// <if expr="chromeos">
/**
* List of messages related to device reporting.
* @private {?Array<!management.DeviceReportingResponse>}
*/
deviceReportingInfo_: Array,
/**
* Message stating if the Trust Roots are configured.
* @private
*/
localTrustRoots_: String,
/** @private */
customerLogo_: String,
/** @private */
managementOverview_: String,
// </if>
/** @private */
subtitle_: String,
// <if expr="not chromeos">
/** @private */
managementNoticeHtml_: String,
// </if>
/** @private */
managed_: Boolean,
/** @private */
extensionReportingSubtitle_: String,
/** @private {!management.ThreatProtectionInfo} */
threatProtectionInfo_: Object,
},
/** @private {?management.ManagementBrowserProxy} */
browserProxy_: null,
/** @override */
attached() {
document.documentElement.classList.remove('loading');
this.browserProxy_ = management.ManagementBrowserProxyImpl.getInstance();
this.updateManagedFields_();
this.initBrowserReportingInfo_();
this.getThreatProtectionInfo_();
this.addWebUIListener(
'browser-reporting-info-updated',
reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo));
this.addWebUIListener('managed_data_changed', () => {
this.updateManagedFields_();
});
this.addWebUIListener(
'threat-protection-info-updated',
info => this.threatProtectionInfo_ = info);
this.getExtensions_();
// <if expr="chromeos">
this.getDeviceReportingInfo_();
this.getLocalTrustRootsInfo_();
// </if>
},
/** @private */
initBrowserReportingInfo_() {
this.browserProxy_.initBrowserReportingInfo().then(
reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo));
},
/**
* @param {!Array<!management.BrowserReportingResponse>} reportingInfo
* @private
*/
onBrowserReportingInfoReceived_(reportingInfo) {
const reportingInfoMap = reportingInfo.reduce((info, response) => {
info[response.reportingType] = info[response.reportingType] || {
icon: this.getIconForReportingType_(response.reportingType),
messageIds: []
};
info[response.reportingType].messageIds.push(response.messageId);
return info;
}, {});
const reportingTypeOrder = {
[management.ReportingType.SECURITY]: 1,
[management.ReportingType.EXTENSIONS]: 2,
[management.ReportingType.USER]: 3,
[management.ReportingType.USER_ACTIVITY]: 4,
[management.ReportingType.DEVICE]: 5,
};
this.browserReportingInfo_ =
Object.keys(reportingInfoMap)
.sort((a, b) => reportingTypeOrder[a] - reportingTypeOrder[b])
.map(reportingType => reportingInfoMap[reportingType]);
},
/** @private */
getExtensions_() {
this.browserProxy_.getExtensions().then(extensions => {
this.extensions_ = extensions;
});
},
/** @private */
getThreatProtectionInfo_() {
this.browserProxy_.getThreatProtectionInfo().then(info => {
this.threatProtectionInfo_ = info;
});
},
/**
* @return {boolean} True if there is threat protection info to show.
* @private
*/
showThreatProtectionInfo_() {
return !!this.threatProtectionInfo_ &&
this.threatProtectionInfo_.info.length > 0;
},
// <if expr="chromeos">
/** @private */
getLocalTrustRootsInfo_() {
this.browserProxy_.getLocalTrustRootsInfo().then(trustRootsConfigured => {
this.localTrustRoots_ = trustRootsConfigured ?
loadTimeData.getString('managementTrustRootsConfigured') :
'';
});
},
/** @private */
getDeviceReportingInfo_() {
this.browserProxy_.getDeviceReportingInfo().then(reportingInfo => {
this.deviceReportingInfo_ = reportingInfo;
});
},
/**
* @return {boolean} True of there are device reporting info to show.
* @private
*/
showDeviceReportingInfo_() {
return !!this.deviceReportingInfo_ &&
this.deviceReportingInfo_.length > 0;
},
/**
* @param {management.DeviceReportingType} reportingType
* @return {string} The associated icon.
* @private
*/
getIconForDeviceReportingType_(reportingType) {
switch (reportingType) {
case management.DeviceReportingType.SUPERVISED_USER:
return 'management:supervised-user';
case management.DeviceReportingType.DEVICE_ACTIVITY:
return 'management:timelapse';
case management.DeviceReportingType.STATISTIC:
return 'management:bar-chart';
case management.DeviceReportingType.DEVICE:
return 'cr:computer';
case management.DeviceReportingType.LOGS:
return 'management:report';
case management.DeviceReportingType.PRINT:
return 'cr:print';
case management.DeviceReportingType.CROSTINI:
return 'management:linux';
default:
return 'cr:computer';
}
},
// </if>
/**
* @return {boolean} True of there are browser reporting info to show.
* @private
*/
showBrowserReportingInfo_() {
return !!this.browserReportingInfo_ &&
this.browserReportingInfo_.length > 0;
},
/**
* @return {boolean} True of there are extension reporting info to show.
* @private
*/
showExtensionReportingInfo_() {
return !!this.extensions_ && this.extensions_.length > 0;
},
/**
* @param {management.ReportingType} reportingType
* @returns {string} The associated icon.
* @private
*/
getIconForReportingType_(reportingType) {
switch (reportingType) {
case management.ReportingType.SECURITY:
return 'cr:security';
case management.ReportingType.DEVICE:
return 'cr:computer';
case management.ReportingType.EXTENSIONS:
return 'cr:extension';
case management.ReportingType.USER:
return 'management:account-circle';
case management.ReportingType.USER_ACTIVITY:
return 'management:public';
default:
return 'cr:security';
}
},
/**
* Handles the 'search-changed' event fired from the toolbar.
* Redirects to the settings page initialized the the current
* search query.
* @param {!CustomEvent<string>} e
* @private
*/
onSearchChanged_: function(e) {
const query = e.detail;
window.location.href =
`chrome://settings?search=${encodeURIComponent(query)}`;
},
/** @private */
onTapBack_() {
if (history.length > 1) {
history.back();
} else {
window.location.href = 'chrome://settings/help';
}
},
/** @private */
updateManagedFields_() {
this.browserProxy_.getContextualManagedData().then(data => {
this.managed_ = data.managed;
this.extensionReportingSubtitle_ = data.extensionReportingTitle;
this.subtitle_ = data.pageSubtitle;
// <if expr="chromeos">
this.customerLogo_ = data.customerLogo;
this.managementOverview_ = data.overview;
// </if>
// <if expr="not chromeos">
this.managementNoticeHtml_ = data.browserManagementNotice;
// </if>
});
},
});
return {
BrowserReportingData: BrowserReportingData,
};
});