policy.js revision a36e5920737c6adbddd3e43b760e5de8431db6e0
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)cr.define('policy', function() { 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch /** 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * A hack to check if we are displaying the mobile version of this page by 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * checking if the first column is hidden. 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @return {boolean} True if this is the mobile version. 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var isMobilePage = function() { 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return document.defaultView.getComputedStyle(document.querySelector( 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '.scope-column')).display == 'none'; 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A box that shows the status of cloud policy for a device or user. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @constructor 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @extends {HTMLFieldSetElement} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var StatusBox = cr.ui.define(function() { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var node = $('status-box-template').cloneNode(true); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node.removeAttribute('id'); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return node; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StatusBox.prototype = { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up the prototype chain. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) __proto__: HTMLFieldSetElement.prototype, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Initialization function for the cr.ui framework. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) decorate: function() { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Populate the box with the given cloud policy status. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} scope The policy scope, either "device" or "user". 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} status Dictionary with information about the status. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initialize: function(scope, status) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (scope == 'device') { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For device policy, set the appropriate title and populate the topmost 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // status item with the domain the device is enrolled into. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.legend').textContent = 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString('statusDevice'); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var domain = this.querySelector('.domain'); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) domain.textContent = status.domain; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) domain.parentElement.hidden = false; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For user policy, set the appropriate title and populate the topmost 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // status item with the username that policies apply to. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.legend').textContent = 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString('statusUser'); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate the topmost item with the username. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var username = this.querySelector('.username'); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) username.textContent = status.username; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) username.parentElement.hidden = false; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate all remaining items. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.client-id').textContent = status.clientId || ''; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.time-since-last-refresh').textContent = 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status.timeSinceLastRefresh || ''; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.refresh-interval').textContent = 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status.refreshInterval || ''; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.status').textContent = status.status || ''; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A single policy's entry in the policy table. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @constructor 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @extends {HTMLTableSectionElement} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var Policy = cr.ui.define(function() { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var node = $('policy-template').cloneNode(true); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node.removeAttribute('id'); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return node; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Policy.prototype = { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up the prototype chain. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) __proto__: HTMLTableSectionElement.prototype, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Initialization function for the cr.ui framework. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) decorate: function() { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.updateToggleExpandedValueText_(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.toggle-expanded-value').addEventListener( 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'click', this.toggleExpandedValue_.bind(this)); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Populate the table columns with information about the policy name, value 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * and status. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} name The policy name. 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} value Dictionary with information about the policy value. 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {boolean} unknown Whether the policy name is not recognized. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initialize: function(name, value, unknown) { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.name = name; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.unset = !value; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate the name column. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.name').textContent = name; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate the remaining columns with policy scope, level and value if a 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // value has been set. Otherwise, leave them blank. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (value) { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.scope').textContent = 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString(value.scope == 'user' ? 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'scopeUser' : 'scopeDevice'); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.level').textContent = 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString(value.level == 'recommended' ? 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'levelRecommended' : 'levelMandatory'); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.value').textContent = value.value; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.expanded-value').textContent = value.value; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate the status column. 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var status; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!value) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the policy value has not been set, show an error message. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status = loadTimeData.getString('unset'); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (unknown) { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the policy name is not recognized, show an error message. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status = loadTimeData.getString('unknown'); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (value.error) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If an error occurred while parsing the policy value, show the error 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // message. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status = value.error; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Otherwise, indicate that the policy value was parsed correctly. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status = loadTimeData.getString('ok'); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.status').textContent = status; 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (isMobilePage()) { 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The number of columns which are hidden by the css file for the mobile 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // (Android) version of this page. 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch /** @const */ var HIDDEN_COLUMNS_IN_MOBILE_VERSION = 2; 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var expandedValue = this.querySelector('.expanded-value'); 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expandedValue.setAttribute('colspan', 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expandedValue.colSpan - HIDDEN_COLUMNS_IN_MOBILE_VERSION); 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Check the table columns for overflow. Most columns are automatically 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * elided when overflow occurs. The only action required is to add a tooltip 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * that shows the complete content. The value column is an exception. If 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * overflow occurs here, the contents is replaced with a link that toggles 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the visibility of an additional row containing the complete value. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkOverflow: function() { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set a tooltip on all overflowed columns except the value column. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var divs = this.querySelectorAll('div.elide'); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < divs.length; i++) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var div = divs[i]; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) div.title = div.offsetWidth < div.scrollWidth ? div.textContent : ''; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cache the width of the value column's contents when it is first shown. 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is required to be able to check whether the contents would still 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // overflow the column once it has been hidden and replaced by a link. 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var valueContainer = this.querySelector('.value-container'); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (valueContainer.valueWidth == undefined) { 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) valueContainer.valueWidth = 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) valueContainer.querySelector('.value').offsetWidth; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Determine whether the contents of the value column overflows. The 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // visibility of the contents, replacement link and additional row 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // containing the complete value that depend on this are handled by CSS. 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (valueContainer.offsetWidth < valueContainer.valueWidth) 179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.classList.add('has-overflowed-value'); 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.classList.remove('has-overflowed-value'); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Update the text of the link that toggles the visibility of an additional 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * row containing the complete policy value, depending on the toggle state. 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @private 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updateToggleExpandedValueText_: function(event) { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.toggle-expanded-value').textContent = 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.contains('show-overflowed-value') ? 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'hideExpandedValue' : 'showExpandedValue'); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Toggle the visibility of an additional row containing the complete policy 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * value. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) toggleExpandedValue_: function() { 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.toggle('show-overflowed-value'); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.updateToggleExpandedValueText_(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A table of policies and their values. 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @constructor 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @extends {HTMLTableSectionElement} 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var PolicyTable = cr.ui.define('tbody'); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PolicyTable.prototype = { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up the prototype chain. 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) __proto__: HTMLTableSectionElement.prototype, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Initialization function for the cr.ui framework. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) decorate: function() { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.policies_ = {}; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.filterPattern_ = ''; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window.addEventListener('resize', this.checkOverflow_.bind(this)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Initialize the list of all known policies. 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} names Dictionary containing all known policy names. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setPolicyNames: function(names) { 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.policies_ = names; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setPolicyValues({}); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Populate the table with the currently set policy values and any errors 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * detected while parsing these. 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} values Dictionary containing the current policy values. 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setPolicyValues: function(values) { 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove all policies from the table. 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var policies = this.getElementsByTagName('tbody'); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (policies.length > 0) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.removeChild(policies.item(0)); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First, add known policies whose value is currently set. 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var unset = []; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var name in this.policies_) { 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (name in values) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setPolicyValue_(name, values[name], false); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unset.push(name); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Second, add policies whose value is currently set but whose name is not 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // recognized. 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var name in values) { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!(name in this.policies_)) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setPolicyValue_(name, values[name], true); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Finally, add known policies whose value is not currently set. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < unset.length; i++) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setPolicyValue_(unset[i], undefined, false); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Filter the policies. 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.filter(); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Set the filter pattern. Only policies whose name contains |pattern| are 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * shown in the policy table. The filter is case insensitive. It can be 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * disabled by setting |pattern| to an empty string. 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} pattern The filter pattern. 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setFilterPattern: function(pattern) { 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.filterPattern_ = pattern.toLowerCase(); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.filter(); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Filter policies. Only policies whose name contains the filter pattern are 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * shown in the table. Furthermore, policies whose value is not currently 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * set are only shown if the corresponding checkbox is checked. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) filter: function() { 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var showUnset = $('show-unset').checked; 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var policies = this.getElementsByTagName('tbody'); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < policies.length; i++) { 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var policy = policies[i]; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.hidden = 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.unset && !showUnset || 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.name.toLowerCase().indexOf(this.filterPattern_) == -1; 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (this.querySelector('tbody:not([hidden])')) 297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.parentElement.classList.remove('empty'); 298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.parentElement.classList.add('empty'); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setTimeout(this.checkOverflow_.bind(this), 0); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Check the table columns for overflow. 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @private 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkOverflow_: function() { 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var policies = this.getElementsByTagName('tbody'); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < policies.length; i++) { 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!policies[i].hidden) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies[i].checkOverflow(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Add a policy with the given |name| and |value| to the table. 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} name The policy name. 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} value Dictionary with information about the policy value. 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {boolean} unknown Whether the policy name is not recoginzed. 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @private 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setPolicyValue_: function(name, value, unknown) { 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var policy = new Policy; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.initialize(name, value, unknown); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.appendChild(policy); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A singelton object that handles communication between browser and WebUI. 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @constructor 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function Page() { 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make Page a singleton. 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cr.addSingletonGetter(Page); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Provide a list of all known policies to the UI. Called by the browser on 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * page load. 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} names Dictionary containing all known policy names. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page.setPolicyNames = function(names) { 345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var page = this.getInstance(); 346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Clear all policy tables. 348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch page.mainSection.innerHTML = ''; 349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch page.policyTables = {}; 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Create tables and set known policy names for Chrome and extensions. 352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (names.hasOwnProperty('chromePolicyNames')) { 353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var table = page.appendNewTable('chrome', 'Chrome policies', ''); 354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch table.setPolicyNames(names.chromePolicyNames); 355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (names.hasOwnProperty('extensionPolicyNames')) { 358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (var ext in names.extensionPolicyNames) { 359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var table = page.appendNewTable('extension-' + ext, 360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch names.extensionPolicyNames[ext].name, 'ID: ' + ext); 361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch table.setPolicyNames(names.extensionPolicyNames[ext].policyNames); 362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Provide a list of the currently set policy values and any errors detected 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * while parsing these to the UI. Called by the browser on page load and 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * whenever policy values change. 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} values Dictionary containing the current policy values. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page.setPolicyValues = function(values) { 373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var page = this.getInstance(); 374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (values.hasOwnProperty('chromePolicies')) { 375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var table = page.policyTables['chrome']; 376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch table.setPolicyValues(values.chromePolicies); 377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 378eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (values.hasOwnProperty('extensionPolicies')) { 380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (var extensionId in values.extensionPolicies) { 381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var table = page.policyTables['extension-' + extensionId]; 382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (table) 383eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch table.setPolicyValues(values.extensionPolicies[extensionId]); 384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Provide the current cloud policy status to the UI. Called by the browser on 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * page load if cloud policy is present and whenever the status changes. 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} status Dictionary containing the current policy status. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page.setStatus = function(status) { 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.getInstance().setStatus(status); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Notify the UI that a request to reload policy values has completed. Called 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * by the browser after a request to reload policy has been sent by the UI. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page.reloadPoliciesDone = function() { 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.getInstance().reloadPoliciesDone(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page.prototype = { 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Main initialization function. Called by the browser on page load. 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initialize: function() { 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uber.onContentFrameLoaded(); 411a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) cr.ui.FocusOutlineManager.forDocument(document); 412eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.mainSection = $('main-section'); 414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.policyTables = {}; 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Place the initial focus on the filter input field. 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $('filter').focus(); 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var self = this; 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $('filter').onsearch = function(event) { 421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (policyTable in self.policyTables) { 422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch self.policyTables[policyTable].setFilterPattern(this.value); 423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $('reload-policies').onclick = function(event) { 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.disabled = true; 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome.send('reloadPolicies'); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch $('show-unset').onchange = function() { 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (policyTable in self.policyTables) { 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch self.policyTables[policyTable].filter(); 433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the browser that the page has loaded, causing it to send the 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // list of all known policies, the current policy values and the cloud 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // policy status. 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome.send('initialized'); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Creates a new policy table section, adds the section to the page, 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * and returns the new table from that section. 445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {string} id The key for storing the new table in policyTables. 446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {string} label_title Title for this policy table. 447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {string} label_content Description for the policy table. 448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @return {Element} The newly created table. 449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch appendNewTable: function(id, label_title, label_content) { 451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var newSection = this.createPolicyTableSection(id, label_title, 452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch label_content); 453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.mainSection.appendChild(newSection); 454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return this.policyTables[id]; 455eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }, 456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Creates a new section containing a title, description and table of 459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * policies. 460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {id} id The key for storing the new table in policyTables. 461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {string} label_title Title for this policy table. 462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param {string} label_content Description for the policy table. 463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @return {Element} The newly created section. 464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 465eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch createPolicyTableSection: function(id, label_title, label_content) { 466eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var section = document.createElement('section'); 467eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch section.setAttribute('class', 'policy-table-section'); 468eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Add title and description. 470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var title = window.document.createElement('h3'); 471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch title.textContent = label_title; 472eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch section.appendChild(title); 473eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 474eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (label_content) { 475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var description = window.document.createElement('div'); 476eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch description.classList.add('table-description'); 477eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch description.textContent = label_content; 478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch section.appendChild(description); 479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Add 'No Policies Set' element. 482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var noPolicies = window.document.createElement('div'); 483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch noPolicies.classList.add('no-policies-set'); 484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch noPolicies.textContent = loadTimeData.getString('noPoliciesSet'); 485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch section.appendChild(noPolicies); 486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Add table of policies. 488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var newTable = this.createPolicyTable(); 489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.policyTables[id] = newTable; 490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch section.appendChild(newTable); 491eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return section; 493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }, 494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Creates a new table for displaying policies. 497eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @return {Element} The newly created table. 498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch createPolicyTable: function() { 500eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var newTable = window.document.createElement('table'); 501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var tableHead = window.document.createElement('thead'); 502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var tableRow = window.document.createElement('tr'); 5037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var tableHeadings = ['Scope', 'Level', 'Name', 'Value', 'Status']; 504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (var i = 0; i < tableHeadings.length; i++) { 505eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var tableHeader = window.document.createElement('th'); 5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tableHeader.classList.add(tableHeadings[i].toLowerCase() + '-column'); 5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tableHeader.textContent = loadTimeData.getString('header' + 5087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tableHeadings[i]); 509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tableRow.appendChild(tableHeader); 510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tableHead.appendChild(tableRow); 512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch newTable.appendChild(tableHead); 513eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cr.ui.decorate(newTable, PolicyTable); 514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return newTable; 515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }, 516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Update the status section of the page to show the current cloud policy 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * status. 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Object} status Dictionary containing the current policy status. 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setStatus: function(status) { 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove any existing status boxes. 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var container = $('status-box-container'); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (container.firstChild) 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container.removeChild(container.firstChild); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Hide the status section. 528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var section = $('status-section'); 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) section.hidden = true; 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add a status box for each scope that has a cloud policy status. 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var scope in status) { 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var box = new StatusBox; 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) box.initialize(scope, status[scope]); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container.appendChild(box); 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Show the status section. 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) section.hidden = false; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Re-enable the reload policies button when the previous request to reload 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * policies values has completed. 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reloadPoliciesDone: function() { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) $('reload-policies').disabled = false; 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Page: Page 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Have the main initialization function be called when the page finishes 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// loading. 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)document.addEventListener( 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'DOMContentLoaded', 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.Page.getInstance().initialize.bind(policy.Page.getInstance())); 560