• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7/**
8 * Takes the |componentsData| input argument which represents data about the
9 * currently installed components and populates the html jstemplate with
10 * that data. It expects an object structure like the above.
11 * @param {Object} componentsData Detailed info about installed components.
12 *      Same expected format as returnComponentsData().
13 */
14function renderTemplate(componentsData) {
15  // This is the javascript code that processes the template:
16  var input = new JsEvalContext(componentsData);
17  var output = $('componentTemplate');
18  jstProcess(input, output);
19}
20
21/**
22 * Asks the C++ ComponentsDOMHandler to get details about the installed
23 * components.
24 * The ComponentsDOMHandler should reply to returnComponentsData() (below).
25 */
26function requestComponentsData() {
27  chrome.send('requestComponentsData');
28}
29
30/**
31 * Called by the WebUI to re-populate the page with data representing the
32 * current state of installed components.
33 * @param {Object} componentsData Detailed info about installed components. The
34 *     template expects each component's format to match the following
35 *     structure to correctly populate the page:
36 *   {
37 *     components: [
38 *       {
39 *          name: 'Component1',
40 *          version: '1.2.3',
41 *       },
42 *       {
43 *          name: 'Component2',
44 *          version: '4.5.6',
45 *       },
46 *     ]
47 *   }
48 */
49function returnComponentsData(componentsData) {
50  var bodyContainer = $('body-container');
51  var body = document.body;
52
53  bodyContainer.style.visibility = 'hidden';
54  body.className = '';
55
56  renderTemplate(componentsData);
57
58  // Add handlers to dynamically created HTML elements.
59  var links = document.getElementsByClassName('button-check-update');
60  for (var i = 0; i < links.length; i++) {
61    links[i].onclick = function(e) {
62      handleCheckUpdate(this);
63      e.preventDefault();
64    };
65  }
66
67  // Disable some controls for Guest in ChromeOS.
68  if (cr.isChromeOS)
69    uiAccountTweaks.UIAccountTweaks.applyGuestModeVisibility(document);
70
71  bodyContainer.style.visibility = 'visible';
72  body.className = 'show-tmi-mode-initial';
73}
74
75/**
76 * Handles an 'enable' or 'disable' button getting clicked.
77 * @param {HTMLElement} node The HTML element representing the component
78 *     being checked for update.
79 */
80function handleCheckUpdate(node) {
81  node.disabled = true;
82  // Tell the C++ ComponentssDOMHandler to check for update.
83  chrome.send('checkUpdate', [String(node.id)]);
84}
85
86// Get data and have it displayed upon loading.
87document.addEventListener('DOMContentLoaded', requestComponentsData);
88
89// Add handlers to static HTML elements.
90$('button-check-update').onclick = handleCheckUpdate;
91