1b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// found in the LICENSE file.
4b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
5b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)/**
6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * WebUI to monitor the Sync File System Service.
7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) */
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)var SyncService = (function() {
9b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)'use strict';
10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)var SyncService = {};
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)/**
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * Request Sync Service Status.
15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) */
16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)function getServiceStatus() {
17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  chrome.send('getServiceStatus');
18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)/**
215e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) * Called when service status is initially retrieved or updated via events.
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * @param {string} Service status enum as a string.
23b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) */
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SyncService.onGetServiceStatus = function(statusString) {
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  $('service-status').textContent = statusString;
26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)/**
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Request Google Drive Notification Source. e.g. XMPP or polling.
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function getNotificationSource() {
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  chrome.send('getNotificationSource');
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/**
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Handles callback from getNotificationSource.
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} Notification source as a string.
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SyncService.onGetNotificationSource = function(sourceString) {
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  $('notification-source').textContent = sourceString;
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Keeps track of the last log event seen so it's not reprinted.
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvar lastLogEventId = -1;
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/**
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Request debug log.
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function getLog() {
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  chrome.send('getLog', [lastLogEventId]);
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/**
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Clear old logs.
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)function clearLogs() {
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome.send('clearLogs');
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  $('log-entries').innerHTML = '';
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/**
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Handles callback from getUpdateLog.
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {Array} list List of dictionaries containing 'id', 'time', 'logEvent'.
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SyncService.onGetLog = function(logEntries) {
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  var itemContainer = $('log-entries');
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  for (var i = 0; i < logEntries.length; i++) {
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    var logEntry = logEntries[i];
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    var tr = document.createElement('tr');
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    var error = /ERROR/.test(logEntry.logEvent) ? ' error' : '';
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    tr.appendChild(createElementFromText('td', logEntry.time,
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         {'class': 'log-time'}));
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    tr.appendChild(createElementFromText('td', logEntry.logEvent,
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         {'class': 'log-event' + error}));
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    itemContainer.appendChild(tr);
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    lastLogEventId = logEntry.id;
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/**
82b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) * Get initial sync service values and set listeners to get updated values.
83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) */
84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)function main() {
85b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  cr.ui.decorate('tabbox', cr.ui.TabBox);
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  $('clear-log-button').addEventListener('click', clearLogs);
87b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  getServiceStatus();
8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  getNotificationSource();
89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // TODO: Look for a way to push entries to the page when necessary.
9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  window.setInterval(getLog, 1000);
92b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
93b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
94b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)document.addEventListener('DOMContentLoaded', main);
95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)return SyncService;
96b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)})();
97