diff options
Diffstat (limited to 'chromium/chrome/browser/resources/device_log_ui/device_log_ui.js')
-rw-r--r-- | chromium/chrome/browser/resources/device_log_ui/device_log_ui.js | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/device_log_ui/device_log_ui.js b/chromium/chrome/browser/resources/device_log_ui/device_log_ui.js new file mode 100644 index 00000000000..a562ed7eddb --- /dev/null +++ b/chromium/chrome/browser/resources/device_log_ui/device_log_ui.js @@ -0,0 +1,149 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var DeviceLogUI = (function() { + 'use strict'; + + /** + * Creates a tag for the log level. + * + * @param {string} level A string that represents log level. + * @return {HTMLSpanElement} The created span element. + */ + var createLevelTag = function(level) { + var levelClassName = 'log-level-' + level.toLowerCase(); + var tag = document.createElement('span'); + tag.textContent = level; + tag.className = 'level-tag ' + levelClassName; + return tag; + }; + + /** + * Creates a tag for the log type. + * + * @param {string} level A string that represents log type. + * @return {HTMLSpanElement} The created span element. + */ + var createTypeTag = function(type) { + var typeClassName = 'log-type-' + type.toLowerCase(); + var tag = document.createElement('span'); + tag.textContent = type; + tag.className = 'type-tag ' + typeClassName; + return tag; + }; + + /** + * Creates an element that contains the time, the event, the level and + * the description of the given log entry. + * + * @param {Object} logEntry An object that represents a single line of log. + * @return {?HTMLParagraphElement} The created p element that represents + * the log entry, or null if the entry should be skipped. + */ + var createLogEntryText = function(logEntry) { + var level = logEntry['level']; + var levelCheckbox = 'log-level-' + level.toLowerCase(); + if ($(levelCheckbox) && !$(levelCheckbox).checked) + return null; + + var type = logEntry['type']; + var typeCheckbox = 'log-type-' + type.toLowerCase(); + if ($(typeCheckbox) && !$(typeCheckbox).checked) + return null; + + var res = document.createElement('p'); + var textWrapper = document.createElement('span'); + var fileinfo = ''; + if ($('log-fileinfo').checked) + fileinfo = logEntry['file']; + var timestamp = ''; + if ($('log-timedetail').checked) + timestamp = logEntry['timestamp']; + else + timestamp = logEntry['timestampshort']; + textWrapper.textContent = loadTimeData.getStringF( + 'logEntryFormat', + timestamp, + fileinfo, + logEntry['event']); + res.appendChild(createTypeTag(type)); + res.appendChild(createLevelTag(level)); + res.appendChild(textWrapper); + return res; + }; + + /** + * Creates event log entries. + * + * @param {Array<string>} logEntries An array of strings that represent log + * log events in JSON format. + */ + var createEventLog = function(logEntries) { + var container = $('log-container'); + container.textContent = ''; + for (var i = 0; i < logEntries.length; ++i) { + var entry = createLogEntryText(JSON.parse(logEntries[i])); + if (entry) + container.appendChild(entry); + } + }; + + /** + * Callback function, triggered when the log is received. + * + * @param {Object} data A JSON structure of event log entries. + */ + var getLogCallback = function(data) { + createEventLog(JSON.parse(data)); + }; + + /** + * Requests a log update. + */ + var requestLog = function() { + chrome.send('DeviceLog.getLog'); + }; + + /** + * Sets refresh rate if the interval is found in the url. + */ + var setRefresh = function() { + var interval = parseQueryParams(window.location)['refresh']; + if (interval && interval != '') + setInterval(requestLog, parseInt(interval) * 1000); + }; + + /** + * Gets log information from WebUI. + */ + document.addEventListener('DOMContentLoaded', function() { + // Show all levels except 'debug' by default. + $('log-level-error').checked = true; + $('log-level-user').checked = true; + $('log-level-event').checked = true; + $('log-level-debug').checked = false; + + // Show all types by default. + var checkboxes = document.querySelectorAll( + '#log-checkbox-container input[type="checkbox"][id*="log-type"]'); + for (var i = 0; i < checkboxes.length; ++i) + checkboxes[i].checked = true; + + $('log-fileinfo').checked = false; + $('log-timedetail').checked = false; + + $('log-refresh').onclick = requestLog; + checkboxes = document.querySelectorAll( + '#log-checkbox-container input[type="checkbox"]'); + for (var i = 0; i < checkboxes.length; ++i) + checkboxes[i].onclick = requestLog; + + setRefresh(); + requestLog(); + }); + + return { + getLogCallback: getLogCallback + }; +})(); |