Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / gcm_internals.js
1 // Copyright 2014 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 cr.define('gcmInternals', function() {
6   'use strict';
7
8   var isRecording = false;
9
10   /**
11    * If the info dictionary has property prop, then set the text content of
12    * element to the value of this property. Otherwise clear the content.
13    * @param {!Object} info A dictionary of device infos to be displayed.
14    * @param {string} prop Name of the property.
15    * @param {string} element The id of a HTML element.
16    */
17   function setIfExists(info, prop, element) {
18     if (info[prop] !== undefined) {
19       $(element).textContent = info[prop];
20     } else {
21       $(element).textContent = '';
22     }
23   }
24
25   /**
26    * Display device informations.
27    * @param {!Object} info A dictionary of device infos to be displayed.
28    */
29   function displayDeviceInfo(info) {
30     setIfExists(info, 'androidId', 'android-id');
31     setIfExists(info, 'profileServiceCreated', 'profile-service-created');
32     setIfExists(info, 'gcmEnabled', 'gcm-enabled');
33     setIfExists(info, 'signedInUserName', 'signed-in-username');
34     setIfExists(info, 'gcmClientCreated', 'gcm-client-created');
35     setIfExists(info, 'gcmClientState', 'gcm-client-state');
36     setIfExists(info, 'connectionClientCreated', 'connection-client-created');
37     setIfExists(info, 'connectionState', 'connection-state');
38     setIfExists(info, 'registeredAppIds', 'registered-app-ids');
39     setIfExists(info, 'sendQueueSize', 'send-queue-size');
40     setIfExists(info, 'resendQueueSize', 'resend-queue-size');
41   }
42
43   /**
44    * Remove all the child nodes of the element.
45    * @param {HTMLElement} element A HTML element.
46    */
47   function removeAllChildNodes(element) {
48     element.textContent = '';
49   }
50
51   /**
52    * For each item in line, add a row to the table. Each item is actually a list
53    * of sub-items; each of which will have a corresponding cell created in that
54    * row, and the sub-item will be displayed in the cell.
55    * @param {HTMLElement} table A HTML tbody element.
56    * @param {!Object} list A list of list of item.
57    */
58   function addRows(table, list) {
59     for (var i = 0; i < list.length; ++i) {
60       var row = document.createElement('tr');
61
62       // The first element is always a timestamp.
63       var cell = document.createElement('td');
64       var d = new Date(list[i][0]);
65       cell.textContent = d;
66       row.appendChild(cell);
67
68       for (var j = 1; j < list[i].length; ++j) {
69         var cell = document.createElement('td');
70         cell.textContent = list[i][j];
71         row.appendChild(cell);
72       }
73       table.appendChild(row);
74     }
75   }
76
77   /**
78    * Refresh all displayed information.
79    */
80   function refreshAll() {
81     chrome.send('getGcmInternalsInfo', [false]);
82   }
83
84   /**
85    * Toggle the isRecording variable and send it to browser.
86    */
87   function setRecording() {
88     isRecording = !isRecording;
89     chrome.send('setGcmInternalsRecording', [isRecording]);
90   }
91
92   /**
93    * Clear all the activity logs.
94    */
95   function clearLogs() {
96     chrome.send('getGcmInternalsInfo', [true]);
97   }
98
99   function initialize() {
100     $('recording').disabled = true;
101     $('refresh').onclick = refreshAll;
102     $('recording').onclick = setRecording;
103     $('clear-logs').onclick = clearLogs;
104     chrome.send('getGcmInternalsInfo', [false]);
105   }
106
107   /**
108    * Refresh the log html table by clearing it first. If data is not empty, then
109    * it will be used to populate the table.
110    * @param {string} id ID of the log html table.
111    * @param {!Object} data A list of list of data items.
112    */
113   function refreshLogTable(id, data) {
114     removeAllChildNodes($(id));
115     if (data !== undefined) {
116       addRows($(id), data);
117     }
118   }
119
120   /**
121    * Callback function accepting a dictionary of info items to be displayed.
122    * @param {!Object} infos A dictionary of info items to be displayed.
123    */
124   function setGcmInternalsInfo(infos) {
125     isRecording = infos.isRecording;
126     if (isRecording)
127       $('recording').textContent = 'Stop Recording';
128     else
129       $('recording').textContent = 'Start Recording';
130     $('recording').disabled = false;
131     if (infos.deviceInfo !== undefined) {
132       displayDeviceInfo(infos.deviceInfo);
133     }
134
135     refreshLogTable('checkin-info', infos.checkinInfo);
136     refreshLogTable('connection-info', infos.connectionInfo);
137     refreshLogTable('registration-info', infos.registrationInfo);
138     refreshLogTable('receive-info', infos.receiveInfo);
139     refreshLogTable('send-info', infos.sendInfo);
140   }
141
142   // Return an object with all of the exports.
143   return {
144     initialize: initialize,
145     setGcmInternalsInfo: setGcmInternalsInfo,
146   };
147 });
148
149 document.addEventListener('DOMContentLoaded', gcmInternals.initialize);