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