Commit 3803f86a authored by stevenjb's avatar stevenjb Committed by Commit bot

Add chrome:://device-log

This CL:
* Adds a new chrome page, chrome://device-log for the device log UI
* Eliminates the log from chrome://network, links to device-log

BUG=293739
For browser_resources.grd:
TBR=sky@chromium.org

Review URL: https://codereview.chromium.org/793933003

Cr-Commit-Position: refs/heads/master@{#308422}
parent e6324c75
...@@ -5707,37 +5707,81 @@ All users must sign out to continue. ...@@ -5707,37 +5707,81 @@ All users must sign out to continue.
</message> </message>
<!-- About network UI display strings --> <!-- About network UI display strings -->
<message name="IDS_NETWORK_TITLE" desc="Title of the page"> <message name="IDS_NETWORK_UI_TITLE" desc="Title of the page">
Network Network
</message> </message>
<message name="IDS_NETWORK_AUTO_REFRESH" desc="A instruction of how to auto-refresh the page"> <message name="IDS_NETWORK_UI_AUTO_REFRESH" desc="Instructions for how to auto-refresh the page">
Add a query param in URL to auto-refresh the page: chrome://network/?refresh=&lt;sec&gt; Add a query param in URL to auto-refresh the page: chrome://network/?refresh=&lt;sec&gt;
</message> </message>
<message name="IDS_NETWORK_LOG_REFRESH" desc="Button to refresh network log"> <message name="IDS_NETWORK_UI_REFRESH" desc="Button label for refreshing networks">
Refresh Networks
</message>
<message name="IDS_NETWORK_UI_EXPAND" desc="Button label for expanding network properties">
Click '+' to get network properties
</message>
<message name="IDS_NETWORK_UI_PROPERTY_FORMAT" desc="Drowpdown label for network property format">
Property format:
</message>
<message name="IDS_NETWORK_UI_FORMAT_NORMAL" desc="Label in network property format dropdown for unmanaged ONC properties">
ONC
</message>
<message name="IDS_NETWORK_UI_FORMAT_MANAGED" desc="Label in network property format dropdown for managed ONC properties">
Managed ONC
</message>
<message name="IDS_NETWORK_UI_FORMAT_SHILL" desc="Label in network property format dropdown for Shill properties">
Shill
</message>
<message name="IDS_NETWORK_UI_VISIBLE_NETWORKS" desc="Label for list of visible networks">
Visible Networks:
</message>
<message name="IDS_NETWORK_UI_FAVORITE_NETWORKS" desc="Label for list of favorite networks">
Favorite Networks:
</message>
<message name="IDS_DEVICE_LOG_LINK_TEXT" desc="Message preceeding link to chrome://device-log">
For network logs, see: <ph name="DEVICE_LOG_LINK">&lt;a href="chrome://device-log"&gt;chrome://device-log&lt;/a&gt;</ph>
</message>
<message name="IDS_DEVICE_LOG_TITLE" desc="Title of the chrome://device-log page">
Device Log
</message>
<message name="IDS_DEVICE_AUTO_REFRESH" desc="Instructions for how to auto-refresh the page">
Add a query param in URL to auto-refresh the page: chrome://device-log/?refresh=&lt;sec&gt;
</message>
<message name="IDS_DEVICE_LOG_REFRESH" desc="Button to refresh device log">
Refresh Refresh
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_SHOW" desc="'Show' label before logging level checkboxes"> <message name="IDS_DEVICE_LOG_LEVEL_SHOW" desc="'Show' label before logging level checkboxes">
Show: Show:
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_ERROR" desc="Error logging level checkbox"> <message name="IDS_DEVICE_LOG_LEVEL_ERROR" desc="Error logging level checkbox">
Error Error
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_USER" desc="User logging level checkbox"> <message name="IDS_DEVICE_LOG_LEVEL_USER" desc="User logging level checkbox">
User User
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_EVENT" desc="Event logging level checkbox"> <message name="IDS_DEVICE_LOG_LEVEL_EVENT" desc="Event logging level checkbox">
Event Event
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_DEBUG" desc="Debug logging level checkbox"> <message name="IDS_DEVICE_LOG_LEVEL_DEBUG" desc="Debug logging level checkbox">
Debug Debug
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_FILEINFO" desc="File info checkbox in network event log"> <message name="IDS_DEVICE_LOG_TYPE_LOGIN" desc="Checkbox to enable showing events of type LOGIN">
Login
</message>
<message name="IDS_DEVICE_LOG_TYPE_NETWORK" desc="Checkbox to enable showing events of type NETWORK">
Network
</message>
<message name="IDS_DEVICE_LOG_TYPE_POWER" desc="Checkbox to enable showing events of type POWER">
Power
</message>
<message name="IDS_DEVICE_LOG_FILEINFO" desc="File info checkbox in device event log">
File Info File Info
</message> </message>
<message name="IDS_NETWORK_LOG_LEVEL_TIME_DETAIL" desc="Detailed timestamps checkbox in network event log"> <message name="IDS_DEVICE_LOG_TIME_DETAIL" desc="Detailed timestamps checkbox in device event log">
Detailed Timestamps Detailed Timestamps
</message> </message>
<message name="IDS_NETWORK_LOG_ENTRY" desc="The log entry displayed in network event log table."> <message name="IDS_DEVICE_LOG_ENTRY" desc="Format string for lines in chrome://device-log.">
[<ph name="TIMESTAMP">$1<ex>Timestamp</ex></ph>] [<ph name="TIMESTAMP">$1<ex>Timestamp</ex></ph>]
<ph name="FILE_INFO">$2<ex>file:123</ex></ph> <ph name="FILE_INFO">$2<ex>file:123</ex></ph>
<ph name="EVENT_NAME">$3<ex>Event Description</ex></ph> <ph name="EVENT_NAME">$3<ex>Event Description</ex></ph>
......
...@@ -385,6 +385,9 @@ ...@@ -385,6 +385,9 @@
<include name="IDR_IDENTITY_INTERNALS_JS" file="resources\identity_internals.js" type="BINDATA" /> <include name="IDR_IDENTITY_INTERNALS_JS" file="resources\identity_internals.js" type="BINDATA" />
</if> </if>
<if expr="chromeos"> <if expr="chromeos">
<include name="IDR_DEVICE_LOG_UI_HTML" file="resources\chromeos\device_log_ui\device_log_ui.html" type="BINDATA" />
<include name="IDR_DEVICE_LOG_UI_JS" file="resources\chromeos\device_log_ui\device_log_ui.js" type="BINDATA" />
<include name="IDR_DEVICE_LOG_UI_CSS" file="resources\chromeos\device_log_ui\device_log_ui.css" type="BINDATA" />
<include name="IDR_NETWORK_UI_HTML" file="resources\chromeos\network_ui\network_ui.html" type="BINDATA" /> <include name="IDR_NETWORK_UI_HTML" file="resources\chromeos\network_ui\network_ui.html" type="BINDATA" />
<include name="IDR_NETWORK_UI_JS" file="resources\chromeos\network_ui\network_ui.js" type="BINDATA" /> <include name="IDR_NETWORK_UI_JS" file="resources\chromeos\network_ui\network_ui.js" type="BINDATA" />
<include name="IDR_NETWORK_UI_CSS" file="resources\chromeos\network_ui\network_ui.css" type="BINDATA" /> <include name="IDR_NETWORK_UI_CSS" file="resources\chromeos\network_ui\network_ui.css" type="BINDATA" />
......
/*
* 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.
*/
html {
height: 100%;
}
body {
display: flex;
flex-direction: column;
height: 100%;
margin: 0;
}
#header {
margin: 5px;
}
/* Checkboxes */
#log-checkbox-container {
margin: 5px;
}
#log-checkbox-container button {
-webkit-margin-end: 8px;
}
#log-checkbox-container label {
vertical-align: middle;
}
#log-checkbox-show {
font-weight: bold;
}
#log-checkbox-container input {
margin-bottom: 1px;
vertical-align: middle;
}
/* Log */
#log-container {
border: 1px solid rgb(220, 220, 220);
flex: 1 1 100%;
font-size: 12px;
margin: 5px;
overflow: auto;
padding: 10px;
}
#log-container p {
font-family: monospace;
line-height: 20px;
margin: 2px;
}
/* Log Level tags */
.level-tag {
-webkit-margin-end: 5px;
border: 1px solid;
border-radius: 2px;
float: left;
height: 14px;
margin-top: 2px;
padding: 0 4px 2px 4px;
width: 50px;
}
.log-level-error {
color: red;
}
.log-level-user {
color: blue;
}
.log-level-event {
color: black;
}
.log-level-debug {
color: grey;
}
/* Log Type tags */
.type-tag {
-webkit-margin-end: 5px;
border: 1px solid;
border-radius: 2px;
float: left;
font-weight: bold;
height: 14px;
margin-top: 2px;
padding: 0 4px 2px 4px;
width: 50px;
}
.log-type-login {
color: darkgreen;
}
.log-type-network {
color: darkblue;
}
.log-type-power {
color: purple;
}
<!DOCTYPE html>
<html i18n-values="dir:textdirection;">
<head>
<meta charset="utf-8">
<title id="device-log-title" i18n-content="titleText"></title>
<link rel="stylesheet" href="chrome://device-log/device_log_ui.css">
<script src="chrome://resources/js/load_time_data.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="chrome://device-log/strings.js"></script>
<script src="chrome://device-log/device_log_ui.js"></script>
</head>
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<div id="header">
<p i18n-content="autoRefreshText"></p>
</div>
<div id="log-checkbox-container">
<button id="log-refresh" i18n-content="logRefreshText"></button>
<label id="log-checkbox-show" i18n-content="logLevelShowText"></label>
<label>
<input id="log-level-error" type="checkbox">
<span i18n-content="logLevelErrorText"></span>
</label>
<label>
<input id="log-level-user" type="checkbox">
<span i18n-content="logLevelUserText"></span>
</label>
<label>
<input id="log-level-event" type="checkbox">
<span i18n-content="logLevelEventText"></span>
</label>
<label>
<input id="log-level-debug" type="checkbox">
<span i18n-content="logLevelDebugText"></span>
</label>
<label>
<input id="log-type-login" type="checkbox">
<span i18n-content="logTypeLoginText"></span>
</label>
<label>
<input id="log-type-network" type="checkbox">
<span i18n-content="logTypeNetworkText"></span>
</label>
<label>
<input id="log-type-power" type="checkbox">
<span i18n-content="logTypePowerText"></span>
</label>
<label>
<input id="log-fileinfo" type="checkbox">
<span i18n-content="logLevelFileinfoText"></span>
</label>
<label>
<input id="log-timedetail" type="checkbox">
<span i18n-content="logLevelTimeDetailText"></span>
</label>
</div>
<div id="log-container"></div>
<script src="chrome://resources/js/i18n_template2.js"></script>
</body>
</html>
// 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
};
})();
...@@ -4,32 +4,12 @@ ...@@ -4,32 +4,12 @@
* found in the LICENSE file. * found in the LICENSE file.
*/ */
#log-level-container { #header {
margin: 5px; margin: 5px;
} }
#log-level-container label { #header a {
vertical-align: middle; padding: 0 4px;
}
#log-level-container input {
margin-bottom: 1px;
vertical-align: middle;
}
#network-log-container {
border: 1px solid rgb(220, 220, 220);
font-size: 12px;
height: 350px;
overflow: scroll;
padding: 10px;
width: 100%;
}
#network-log-container p {
font-family: monospace;
line-height: 20px;
margin: 2px;
} }
.state-table { .state-table {
...@@ -63,25 +43,6 @@ ...@@ -63,25 +43,6 @@
white-space: pre-wrap; white-space: pre-wrap;
} }
.network-level-tag {
-webkit-margin-end: 5px;
border: 1px solid;
border-radius: 2px;
padding: 0 4px;
}
.network-log-level-event {
color: orange;
}
.network-log-level-error {
color: red;
}
.network-log-level-debug {
color: blue;
}
#advanced-options { #advanced-options {
margin-top: 10px; margin-top: 10px;
} }
...@@ -11,35 +11,22 @@ ...@@ -11,35 +11,22 @@
<script src="chrome://network/network_ui.js"></script> <script src="chrome://network/network_ui.js"></script>
</head> </head>
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> <body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<p i18n-content="autoRefreshText"></p> <div id="header">
<h3>Event Log (Newest first):</h3> <p i18n-content="autoRefreshText"></p>
<div id="log-level-container"> <span i18n-values=".innerHTML:deviceLogLinkText"></span>
<button id="log-refresh" i18n-content="logRefreshText"></button> <div id="advanced-options">
<label i18n-content="logLevelShowText"></label> <span i18n-content="clickToExpandText"></span>
<input id="log-error" type="checkbox"> <span i18n-content="propertyFormatText"></span>
<label for="log-error" i18n-content="logLevelErrorText"></label> <select id="get-property-format">
<input id="log-user" type="checkbox"> <option value="normal" i18n-content="normalFormatOption"></option>
<label for="log-user" i18n-content="logLevelUserText"></label> <option value="managed" i18n-content="managedFormatOption"></option>
<input id="log-event" type="checkbox"> <option value="shill" i18n-content="shillFormatOption"></option>
<label for="log-event" i18n-content="logLevelEventText"></label> </select>
<input id="log-debug" type="checkbox"> </div>
<label for="log-debug" i18n-content="logLevelDebugText"></label> <p><button id="refresh" i18n-content="networkRefreshText"></button></p>
<input id="log-fileinfo" type="checkbox">
<label for="log-fileinfo" i18n-content="logLevelFileinfoText"></label>
<input id="log-timedetail" type="checkbox">
<label for="log-timedetail" i18n-content="logLevelTimeDetailText"></label>
</div> </div>
<div id="network-log-container">
</div> <h3 i18n-content="visibleNetworksLabel"></h3>
<div id="advanced-options">
<span>Click '+' to get network properties of type: </span>
<select id="get-network-type">
<option id="normal" selected>ONC</option>
<option id="managed">Managed ONC</option>
<option id="shill">Shill</option>
</select>
</div>
<h3>Visible Networks: </h3>
<table id="network-state-table" class="state-table"> <table id="network-state-table" class="state-table">
<tr class="state-table-header"> <tr class="state-table-header">
<td></td> <td></td>
...@@ -58,7 +45,8 @@ ...@@ -58,7 +45,8 @@
<td>Strength</td> <td>Strength</td>
</tr> </tr>
</table> </table>
<h3>Favorites: </h3>
<h3 i18n-content="favoriteNetworksLabel"></h3>
<table id="favorite-state-table" class="state-table"> <table id="favorite-state-table" class="state-table">
<tr class="state-table-header"> <tr class="state-table-header">
<td></td> <td></td>
...@@ -71,6 +59,7 @@ ...@@ -71,6 +59,7 @@
<td>ONC Source</td> <td>ONC Source</td>
</tr> </tr>
</table> </table>
<script src="chrome://resources/js/i18n_template2.js"></script> <script src="chrome://resources/js/i18n_template2.js"></script>
</body> </body>
</html> </html>
...@@ -35,81 +35,6 @@ var NetworkUI = (function() { ...@@ -35,81 +35,6 @@ var NetworkUI = (function() {
'onc_source' 'onc_source'
]; ];
var LOG_LEVEL_CLASSNAME = {
'Error': 'network-log-level-error',
'User': 'network-log-level-user',
'Event': 'network-log-level-event',
'Debug': 'network-log-level-debug'
};
var LOG_LEVEL_CHECKBOX = {
'Error': 'log-error',
'User': 'log-user',
'Event': 'log-event',
'Debug': 'log-debug'
};
/**
* Create a tag of log level.
*
* @param {string} level A string that represents log level.
* @return {DOMElement} The created span element.
*/
var createLevelTag = function(level) {
var tag = document.createElement('span');
tag.className = 'network-level-tag';
tag.textContent = level;
tag.classList.add(LOG_LEVEL_CLASSNAME[level]);
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 {DOMElement} The created p element that represents the log entry.
*/
var createLogEntryText = function(logEntry) {
var level = logEntry['level'];
if (!$(LOG_LEVEL_CHECKBOX[level]).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(createLevelTag(level));
res.appendChild(textWrapper);
return res;
};
/**
* Create event log entries.
*
* @param {Array.<string>} logEntries A array of strings that each string
* represents a log event in JSON format.
*/
var createEventLog = function(logEntries) {
var container = $('network-log-container');
container.textContent = '';
for (var i = 0; i < logEntries.length; ++i) {
var entry = createLogEntryText(JSON.parse(logEntries[i]));
if (entry)
container.appendChild(entry);
}
};
/** /**
* Create a cell with a button for expanding a network state table row. * Create a cell with a button for expanding a network state table row.
* *
...@@ -190,15 +115,6 @@ var NetworkUI = (function() { ...@@ -190,15 +115,6 @@ var NetworkUI = (function() {
}); });
}; };
/**
* This callback function is triggered when the network log is received.
*
* @param {Object} data A JSON structure of event log entries.
*/
var getNetworkLogCallback = function(data) {
createEventLog(JSON.parse(data));
};
/** /**
* This callback function is triggered when visible networks are received. * This callback function is triggered when visible networks are received.
* *
...@@ -262,8 +178,8 @@ var NetworkUI = (function() { ...@@ -262,8 +178,8 @@ var NetworkUI = (function() {
else else
detailCell.textContent = JSON.stringify(state, null, '\t'); detailCell.textContent = JSON.stringify(state, null, '\t');
}; };
var selected = $('get-network-type').selectedIndex; var selected = $('get-property-format').selectedIndex;
var selectedId = $('get-network-type').options[selected].id; var selectedId = $('get-property-format').options[selected].value;
if (selectedId == 'shill') if (selectedId == 'shill')
networkConfig.getShillProperties(guid, showDetail); networkConfig.getShillProperties(guid, showDetail);
else if (selectedId == 'managed') else if (selectedId == 'managed')
...@@ -273,13 +189,6 @@ var NetworkUI = (function() { ...@@ -273,13 +189,6 @@ var NetworkUI = (function() {
return expandedRow; return expandedRow;
}; };
/**
* Requests a network log update.
*/
var requestLog = function() {
chrome.send('NetworkUI.getNetworkLog');
};
/** /**
* Requests an update of all network info. * Requests an update of all network info.
*/ */
...@@ -305,25 +214,10 @@ var NetworkUI = (function() { ...@@ -305,25 +214,10 @@ var NetworkUI = (function() {
* Get network information from WebUI. * Get network information from WebUI.
*/ */
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
$('log-refresh').onclick = requestLog; $('refresh').onclick = requestNetworks;
$('log-error').checked = true;
$('log-error').onclick = requestLog;
$('log-user').checked = true;
$('log-user').onclick = requestLog;
$('log-event').checked = true;
$('log-event').onclick = requestLog;
$('log-debug').checked = false;
$('log-debug').onclick = requestLog;
$('log-fileinfo').checked = false;
$('log-fileinfo').onclick = requestLog;
$('log-timedetail').checked = false;
$('log-timedetail').onclick = requestLog;
setRefresh(); setRefresh();
requestLog();
requestNetworks(); requestNetworks();
}); });
return { return {};
getNetworkLogCallback: getNetworkLogCallback
};
})(); })();
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
#include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h" #include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h"
#include "chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.h" #include "chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.h"
#include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h" #include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h"
#include "chrome/browser/ui/webui/chromeos/device_log_ui.h"
#include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h" #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h"
#include "chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.h" #include "chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
...@@ -409,6 +410,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, ...@@ -409,6 +410,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<chromeos::ChooseMobileNetworkUI>; return &NewWebUI<chromeos::ChooseMobileNetworkUI>;
if (url.host() == chrome::kChromeUICryptohomeHost) if (url.host() == chrome::kChromeUICryptohomeHost)
return &NewWebUI<chromeos::CryptohomeUI>; return &NewWebUI<chromeos::CryptohomeUI>;
if (url.host() == chrome::kChromeUIDeviceLogHost)
return &NewWebUI<chromeos::DeviceLogUI>;
if (url.host() == chrome::kChromeUIDriveInternalsHost) if (url.host() == chrome::kChromeUIDriveInternalsHost)
return &NewWebUI<chromeos::DriveInternalsUI>; return &NewWebUI<chromeos::DriveInternalsUI>;
if (url.host() == chrome::kChromeUIImageBurnerHost) if (url.host() == chrome::kChromeUIImageBurnerHost)
......
// 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.
#include "chrome/browser/ui/webui/chromeos/device_log_ui.h"
#include <string>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/values.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/device_event_log.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "grit/browser_resources.h"
namespace chromeos {
namespace {
class DeviceLogMessageHandler : public content::WebUIMessageHandler {
public:
DeviceLogMessageHandler() {}
~DeviceLogMessageHandler() override {}
// WebUIMessageHandler implementation.
void RegisterMessages() override {
web_ui()->RegisterMessageCallback(
"DeviceLog.getLog",
base::Bind(&DeviceLogMessageHandler::GetLog,
base::Unretained(this)));
}
private:
void GetLog(const base::ListValue* value) const {
base::StringValue data(chromeos::device_event_log::GetAsString(
chromeos::device_event_log::NEWEST_FIRST, "json", "",
chromeos::device_event_log::LOG_LEVEL_DEBUG, 0));
web_ui()->CallJavascriptFunction("DeviceLogUI.getLogCallback", data);
}
DISALLOW_COPY_AND_ASSIGN(DeviceLogMessageHandler);
};
} // namespace
DeviceLogUI::DeviceLogUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
web_ui->AddMessageHandler(new DeviceLogMessageHandler());
content::WebUIDataSource* html =
content::WebUIDataSource::Create(chrome::kChromeUIDeviceLogHost);
html->AddLocalizedString("titleText", IDS_DEVICE_LOG_TITLE);
html->AddLocalizedString("autoRefreshText", IDS_DEVICE_AUTO_REFRESH);
html->AddLocalizedString("logRefreshText", IDS_DEVICE_LOG_REFRESH);
html->AddLocalizedString("logLevelShowText", IDS_DEVICE_LOG_LEVEL_SHOW);
html->AddLocalizedString("logLevelErrorText", IDS_DEVICE_LOG_LEVEL_ERROR);
html->AddLocalizedString("logLevelUserText", IDS_DEVICE_LOG_LEVEL_USER);
html->AddLocalizedString("logLevelEventText", IDS_DEVICE_LOG_LEVEL_EVENT);
html->AddLocalizedString("logLevelDebugText", IDS_DEVICE_LOG_LEVEL_DEBUG);
html->AddLocalizedString("logLevelFileinfoText", IDS_DEVICE_LOG_FILEINFO);
html->AddLocalizedString("logLevelTimeDetailText",
IDS_DEVICE_LOG_TIME_DETAIL);
html->AddLocalizedString("logTypeLoginText", IDS_DEVICE_LOG_TYPE_LOGIN);
html->AddLocalizedString("logTypeNetworkText", IDS_DEVICE_LOG_TYPE_NETWORK);
html->AddLocalizedString("logTypePowerText", IDS_DEVICE_LOG_TYPE_POWER);
html->AddLocalizedString("logEntryFormat", IDS_DEVICE_LOG_ENTRY);
html->SetJsonPath("strings.js");
html->AddResourcePath("device_log_ui.css", IDR_DEVICE_LOG_UI_CSS);
html->AddResourcePath("device_log_ui.js", IDR_DEVICE_LOG_UI_JS);
html->SetDefaultResource(IDR_DEVICE_LOG_UI_HTML);
content::WebUIDataSource::Add(
web_ui->GetWebContents()->GetBrowserContext(), html);
}
DeviceLogUI::~DeviceLogUI() {
}
} // namespace chromeos
// 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.
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_DEVICE_LOG_UI_H_
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_DEVICE_LOG_UI_H_
#include "content/public/browser/web_ui_controller.h"
namespace chromeos {
class DeviceLogUI : public content::WebUIController {
public:
explicit DeviceLogUI(content::WebUI* web_ui);
~DeviceLogUI() override;
private:
DISALLOW_COPY_AND_ASSIGN(DeviceLogUI);
};
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_DEVICE_LOG_UI_H_
...@@ -6,80 +6,50 @@ ...@@ -6,80 +6,50 @@
#include <string> #include <string>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/ui/webui/chromeos/network_config_message_handler.h" #include "chrome/browser/ui/webui/chromeos/network_config_message_handler.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "chromeos/network/network_event_log.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "grit/browser_resources.h" #include "grit/browser_resources.h"
namespace chromeos { namespace chromeos {
namespace {
const int kMaxLogEvents = 1000;
class NetworkUIMessageHandler : public content::WebUIMessageHandler {
public:
NetworkUIMessageHandler() {}
virtual ~NetworkUIMessageHandler() {}
// WebUIMessageHandler implementation.
virtual void RegisterMessages() override {
web_ui()->RegisterMessageCallback(
"NetworkUI.getNetworkLog",
base::Bind(&NetworkUIMessageHandler::GetNetworkLog,
base::Unretained(this)));
}
private:
void GetNetworkLog(const base::ListValue* value) const {
base::StringValue data(chromeos::device_event_log::GetAsString(
chromeos::device_event_log::NEWEST_FIRST, "json", "network,login",
chromeos::device_event_log::LOG_LEVEL_DEBUG, kMaxLogEvents));
web_ui()->CallJavascriptFunction("NetworkUI.getNetworkLogCallback", data);
}
DISALLOW_COPY_AND_ASSIGN(NetworkUIMessageHandler);
};
} // namespace
NetworkUI::NetworkUI(content::WebUI* web_ui) NetworkUI::NetworkUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) { : content::WebUIController(web_ui) {
web_ui->AddMessageHandler(new NetworkConfigMessageHandler()); web_ui->AddMessageHandler(new NetworkConfigMessageHandler());
web_ui->AddMessageHandler(new NetworkUIMessageHandler());
content::WebUIDataSource* html = content::WebUIDataSource* html =
content::WebUIDataSource::Create(chrome::kChromeUINetworkHost); content::WebUIDataSource::Create(chrome::kChromeUINetworkHost);
html->AddLocalizedString("titleText", IDS_NETWORK_TITLE); html->AddLocalizedString("titleText", IDS_NETWORK_UI_TITLE);
html->AddLocalizedString("autoRefreshText", IDS_NETWORK_AUTO_REFRESH); html->AddLocalizedString("autoRefreshText", IDS_NETWORK_UI_AUTO_REFRESH);
html->AddLocalizedString("logRefreshText", IDS_NETWORK_LOG_REFRESH); html->AddLocalizedString("deviceLogLinkText", IDS_DEVICE_LOG_LINK_TEXT);
html->AddLocalizedString("logLevelShowText", IDS_NETWORK_LOG_LEVEL_SHOW); html->AddLocalizedString("networkRefreshText", IDS_NETWORK_UI_REFRESH);
html->AddLocalizedString("logLevelErrorText", IDS_NETWORK_LOG_LEVEL_ERROR); html->AddLocalizedString("clickToExpandText", IDS_NETWORK_UI_EXPAND);
html->AddLocalizedString("logLevelUserText", IDS_NETWORK_LOG_LEVEL_USER); html->AddLocalizedString("propertyFormatText",
html->AddLocalizedString("logLevelEventText", IDS_NETWORK_LOG_LEVEL_EVENT); IDS_NETWORK_UI_PROPERTY_FORMAT);
html->AddLocalizedString("logLevelDebugText", IDS_NETWORK_LOG_LEVEL_DEBUG);
html->AddLocalizedString("logLevelFileinfoText", html->AddLocalizedString("normalFormatOption", IDS_NETWORK_UI_FORMAT_NORMAL);
IDS_NETWORK_LOG_LEVEL_FILEINFO); html->AddLocalizedString("managedFormatOption",
html->AddLocalizedString("logLevelTimeDetailText", IDS_NETWORK_UI_FORMAT_MANAGED);
IDS_NETWORK_LOG_LEVEL_TIME_DETAIL); html->AddLocalizedString("shillFormatOption", IDS_NETWORK_UI_FORMAT_SHILL);
html->AddLocalizedString("logEntryFormat", IDS_NETWORK_LOG_ENTRY);
html->AddLocalizedString("visibleNetworksLabel",
IDS_NETWORK_UI_VISIBLE_NETWORKS);
html->AddLocalizedString("favoriteNetworksLabel",
IDS_NETWORK_UI_FAVORITE_NETWORKS);
html->SetJsonPath("strings.js"); html->SetJsonPath("strings.js");
html->AddResourcePath("network_config.js", IDR_NETWORK_CONFIG_JS); html->AddResourcePath("network_config.js", IDR_NETWORK_CONFIG_JS);
html->AddResourcePath("network_ui.css", IDR_NETWORK_UI_CSS); html->AddResourcePath("network_ui.css", IDR_NETWORK_UI_CSS);
html->AddResourcePath("network_ui.js", IDR_NETWORK_UI_JS); html->AddResourcePath("network_ui.js", IDR_NETWORK_UI_JS);
html->SetDefaultResource(IDR_NETWORK_UI_HTML); html->SetDefaultResource(IDR_NETWORK_UI_HTML);
content::WebUIDataSource::Add( content::WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(),
web_ui->GetWebContents()->GetBrowserContext(), html); html);
} }
NetworkUI::~NetworkUI() { NetworkUI::~NetworkUI() {
......
...@@ -915,6 +915,8 @@ ...@@ -915,6 +915,8 @@
'browser/ui/webui/chromeos/cryptohome_ui.h', 'browser/ui/webui/chromeos/cryptohome_ui.h',
'browser/ui/webui/chromeos/cryptohome_web_ui_handler.cc', 'browser/ui/webui/chromeos/cryptohome_web_ui_handler.cc',
'browser/ui/webui/chromeos/cryptohome_web_ui_handler.h', 'browser/ui/webui/chromeos/cryptohome_web_ui_handler.h',
'browser/ui/webui/chromeos/device_log_ui.cc',
'browser/ui/webui/chromeos/device_log_ui.h',
'browser/ui/webui/chromeos/drive_internals_ui.cc', 'browser/ui/webui/chromeos/drive_internals_ui.cc',
'browser/ui/webui/chromeos/drive_internals_ui.h', 'browser/ui/webui/chromeos/drive_internals_ui.h',
'browser/ui/webui/chromeos/first_run/first_run_actor.cc', 'browser/ui/webui/chromeos/first_run/first_run_actor.cc',
......
...@@ -268,6 +268,7 @@ const char kChromeUIBluetoothPairingHost[] = "bluetooth-pairing"; ...@@ -268,6 +268,7 @@ const char kChromeUIBluetoothPairingHost[] = "bluetooth-pairing";
const char kChromeUICertificateManagerHost[] = "certificate-manager"; const char kChromeUICertificateManagerHost[] = "certificate-manager";
const char kChromeUIChooseMobileNetworkHost[] = "choose-mobile-network"; const char kChromeUIChooseMobileNetworkHost[] = "choose-mobile-network";
const char kChromeUICryptohomeHost[] = "cryptohome"; const char kChromeUICryptohomeHost[] = "cryptohome";
const char kChromeUIDeviceLogHost[] = "device-log";
const char kChromeUIDiscardsHost[] = "discards"; const char kChromeUIDiscardsHost[] = "discards";
const char kChromeUIFirstRunHost[] = "first-run"; const char kChromeUIFirstRunHost[] = "first-run";
const char kChromeUIIdleLogoutDialogHost[] = "idle-logout"; const char kChromeUIIdleLogoutDialogHost[] = "idle-logout";
...@@ -626,6 +627,7 @@ const char* const kChromeHostURLs[] = { ...@@ -626,6 +627,7 @@ const char* const kChromeHostURLs[] = {
kChromeUICertificateManagerHost, kChromeUICertificateManagerHost,
kChromeUIChooseMobileNetworkHost, kChromeUIChooseMobileNetworkHost,
kChromeUICryptohomeHost, kChromeUICryptohomeHost,
kChromeUIDeviceLogHost,
kChromeUIDiscardsHost, kChromeUIDiscardsHost,
kChromeUIDriveInternalsHost, kChromeUIDriveInternalsHost,
kChromeUIFirstRunHost, kChromeUIFirstRunHost,
......
...@@ -259,6 +259,7 @@ extern const char kChromeUIBluetoothPairingHost[]; ...@@ -259,6 +259,7 @@ extern const char kChromeUIBluetoothPairingHost[];
extern const char kChromeUICertificateManagerHost[]; extern const char kChromeUICertificateManagerHost[];
extern const char kChromeUIChooseMobileNetworkHost[]; extern const char kChromeUIChooseMobileNetworkHost[];
extern const char kChromeUICryptohomeHost[]; extern const char kChromeUICryptohomeHost[];
extern const char kChromeUIDeviceLogHost[];
extern const char kChromeUIDiagnosticsHost[]; extern const char kChromeUIDiagnosticsHost[];
extern const char kChromeUIDiscardsHost[]; extern const char kChromeUIDiscardsHost[];
extern const char kChromeUIFirstRunHost[]; extern const char kChromeUIFirstRunHost[];
......
...@@ -42,7 +42,8 @@ namespace chromeos { ...@@ -42,7 +42,8 @@ namespace chromeos {
namespace device_event_log { namespace device_event_log {
// Used to specify the type of event. NOTE: Be sure to update LogTypeFromString // Used to specify the type of event. NOTE: Be sure to update LogTypeFromString
// and GetLogTypeString when adding entries to this enum. // and GetLogTypeString when adding entries to this enum. Also consider
// updating chrome://device-log (see device_log_ui.cc).
enum LogType { enum LogType {
// Shill / network configuration related events. // Shill / network configuration related events.
LOG_TYPE_NETWORK, LOG_TYPE_NETWORK,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment