Commit 04131fca authored by dpapad's avatar dpapad Committed by Chromium LUCI CQ

Run clang-format under c/b/r/sync_file_system_internals

This step was intentionally skipped in previous CL that migrated
this UI to JS modules to make reviewing easier.

Fixed: 1154192
Change-Id: I505e3960bcb5a86a8de11b548b08834ce6fd1f77
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567462
Commit-Queue: John Lee <johntlee@chromium.org>
Auto-Submit: dpapad <dpapad@chromium.org>
Reviewed-by: default avatarJohn Lee <johntlee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833407}
parent d931ed0b
...@@ -10,72 +10,72 @@ import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; ...@@ -10,72 +10,72 @@ import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
import {$} from 'chrome://resources/js/util.m.js'; import {$} from 'chrome://resources/js/util.m.js';
import {createElementFromText} from './utils.js'; import {createElementFromText} from './utils.js';
/** /**
* Get the database dump. * Get the database dump.
*/ */
function refreshDatabaseDump() { function refreshDatabaseDump() {
sendWithPromise('getDatabaseDump').then(onGetDatabaseDump); sendWithPromise('getDatabaseDump').then(onGetDatabaseDump);
} }
/**
* Creates a table by filling |header| and |body|.
* @param {!HTMLElement} div The outer container of the table to be
* renderered.
* @param {!HTMLElement} header The table header element to be fillied by
* this function.
* @param {!HTMLElement} body The table body element to be filled by this
* function.
* @param {Array} databaseDump List of dictionaries for the database dump.
* The first element must have metadata of the entry.
* The remaining elements must be dictionaries for the database dump,
* which can be iterated using the 'keys' fields given by the first
* element.
*/
function createDatabaseDumpTable(div, header, body, databaseDump) {
const metadata = databaseDump.shift();
div.appendChild(createElementFromText('h3', metadata['title']));
let tr = document.createElement('tr'); /**
for (let i = 0; i < metadata.keys.length; ++i) { * Creates a table by filling |header| and |body|.
tr.appendChild(createElementFromText('td', metadata.keys[i])); * @param {!HTMLElement} div The outer container of the table to be
} * renderered.
header.appendChild(tr); * @param {!HTMLElement} header The table header element to be fillied by
* this function.
* @param {!HTMLElement} body The table body element to be filled by this
* function.
* @param {Array} databaseDump List of dictionaries for the database dump.
* The first element must have metadata of the entry.
* The remaining elements must be dictionaries for the database dump,
* which can be iterated using the 'keys' fields given by the first
* element.
*/
function createDatabaseDumpTable(div, header, body, databaseDump) {
const metadata = databaseDump.shift();
div.appendChild(createElementFromText('h3', metadata['title']));
for (let i = 0; i < databaseDump.length; i++) { let tr = document.createElement('tr');
const entry = databaseDump[i]; for (let i = 0; i < metadata.keys.length; ++i) {
tr = document.createElement('tr'); tr.appendChild(createElementFromText('td', metadata.keys[i]));
for (let k = 0; k < metadata.keys.length; ++k) {
tr.appendChild(createElementFromText('td', entry[metadata.keys[k]]));
}
body.appendChild(tr);
}
} }
header.appendChild(tr);
/** for (let i = 0; i < databaseDump.length; i++) {
* Handles callback from onGetDatabaseDump. const entry = databaseDump[i];
* @param {Array} databaseDump List of lists for the database dump. tr = document.createElement('tr');
*/ for (let k = 0; k < metadata.keys.length; ++k) {
function onGetDatabaseDump(databaseDump) { tr.appendChild(createElementFromText('td', entry[metadata.keys[k]]));
const placeholder = $('dump-database-placeholder');
placeholder.innerHTML = trustedTypes.emptyHTML;
for (let i = 0; i < databaseDump.length; ++i) {
const div = /** @type {!HTMLElement} */ (document.createElement('div'));
const table = document.createElement('table');
const header =
/** @type {!HTMLElement} */ (document.createElement('thead'));
const body =
/** @type {!HTMLElement} */ (document.createElement('tbody'));
createDatabaseDumpTable(div, header, body, databaseDump[i]);
table.appendChild(header);
table.appendChild(body);
div.appendChild(table);
placeholder.appendChild(div);
} }
body.appendChild(tr);
} }
}
function main() { /**
refreshDatabaseDump(); * Handles callback from onGetDatabaseDump.
$('refresh-database-dump').addEventListener('click', refreshDatabaseDump); * @param {Array} databaseDump List of lists for the database dump.
*/
function onGetDatabaseDump(databaseDump) {
const placeholder = $('dump-database-placeholder');
placeholder.innerHTML = trustedTypes.emptyHTML;
for (let i = 0; i < databaseDump.length; ++i) {
const div = /** @type {!HTMLElement} */ (document.createElement('div'));
const table = document.createElement('table');
const header =
/** @type {!HTMLElement} */ (document.createElement('thead'));
const body =
/** @type {!HTMLElement} */ (document.createElement('tbody'));
createDatabaseDumpTable(div, header, body, databaseDump[i]);
table.appendChild(header);
table.appendChild(body);
div.appendChild(table);
placeholder.appendChild(div);
} }
}
function main() {
refreshDatabaseDump();
$('refresh-database-dump').addEventListener('click', refreshDatabaseDump);
}
document.addEventListener('DOMContentLoaded', main); document.addEventListener('DOMContentLoaded', main);
...@@ -10,40 +10,40 @@ import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; ...@@ -10,40 +10,40 @@ import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
import {$} from 'chrome://resources/js/util.m.js'; import {$} from 'chrome://resources/js/util.m.js';
import {createElementFromText} from './utils.js'; import {createElementFromText} from './utils.js';
/** /**
* Get initial map of extension statuses (pending batch sync, enabled and * Get initial map of extension statuses (pending batch sync, enabled and
* disabled). * disabled).
*/ */
function refreshExtensionStatuses() { function refreshExtensionStatuses() {
sendWithPromise('getExtensionStatuses').then(onGetExtensionStatuses); sendWithPromise('getExtensionStatuses').then(onGetExtensionStatuses);
} }
/** /**
* Handles callback from onGetExtensionStatuses. * Handles callback from onGetExtensionStatuses.
* @param {!Array<!{ * @param {!Array<!{
* extensionName: string, * extensionName: string,
* extensionID: string, * extensionID: string,
* status: string, * status: string,
* }>} extensionStatuses * }>} extensionStatuses
*/ */
function onGetExtensionStatuses(extensionStatuses) { function onGetExtensionStatuses(extensionStatuses) {
const itemContainer = $('extension-entries'); const itemContainer = $('extension-entries');
itemContainer.textContent = ''; itemContainer.textContent = '';
for (let i = 0; i < extensionStatuses.length; i++) { for (let i = 0; i < extensionStatuses.length; i++) {
const originEntry = extensionStatuses[i]; const originEntry = extensionStatuses[i];
const tr = document.createElement('tr'); const tr = document.createElement('tr');
tr.appendChild(createElementFromText('td', originEntry.extensionName)); tr.appendChild(createElementFromText('td', originEntry.extensionName));
tr.appendChild(createElementFromText('td', originEntry.extensionID)); tr.appendChild(createElementFromText('td', originEntry.extensionID));
tr.appendChild(createElementFromText('td', originEntry.status)); tr.appendChild(createElementFromText('td', originEntry.status));
itemContainer.appendChild(tr); itemContainer.appendChild(tr);
}
} }
}
function main() { function main() {
refreshExtensionStatuses(); refreshExtensionStatuses();
$('refresh-extensions-statuses') $('refresh-extensions-statuses')
.addEventListener('click', refreshExtensionStatuses); .addEventListener('click', refreshExtensionStatuses);
} }
document.addEventListener('DOMContentLoaded', main); document.addEventListener('DOMContentLoaded', main);
...@@ -12,133 +12,133 @@ import {$} from 'chrome://resources/js/util.m.js'; ...@@ -12,133 +12,133 @@ import {$} from 'chrome://resources/js/util.m.js';
import {createElementFromDictionary, createElementFromText} from './utils.js'; import {createElementFromDictionary, createElementFromText} from './utils.js';
/** /**
* Gets extension data so the select drop down can be filled. * Gets extension data so the select drop down can be filled.
*/ */
function refreshExtensions() { function refreshExtensions() {
sendWithPromise('getExtensions').then(onGetExtensions); sendWithPromise('getExtensions').then(onGetExtensions);
} }
/** /**
* Renders result of getFileMetadata as a table. * Renders result of getFileMetadata as a table.
* @param {!Array<!{ * @param {!Array<!{
* extensionName: string, * extensionName: string,
* extensionID: string, * extensionID: string,
* status: string, * status: string,
* }>} extensionStatuses of dictionaries containing 'extensionName', * }>} extensionStatuses of dictionaries containing 'extensionName',
* 'extensionID', 'status'. * 'extensionID', 'status'.
*/ */
function onGetExtensions(extensionStatuses) { function onGetExtensions(extensionStatuses) {
const select = $('extensions-select'); const select = $('extensions-select');
// Record existing drop down extension ID. If it's still there after the // Record existing drop down extension ID. If it's still there after the
// refresh then keep it as the selected value. // refresh then keep it as the selected value.
const oldSelectedExtension = getSelectedExtensionId(); const oldSelectedExtension = getSelectedExtensionId();
select.textContent = ''; select.textContent = '';
for (let i = 0; i < extensionStatuses.length; i++) { for (let i = 0; i < extensionStatuses.length; i++) {
const originEntry = extensionStatuses[i]; const originEntry = extensionStatuses[i];
const tr = document.createElement('tr'); const tr = document.createElement('tr');
const title = originEntry.extensionName + ' [' + originEntry.status + ']'; const title = originEntry.extensionName + ' [' + originEntry.status + ']';
select.options.add(new Option(title, originEntry.extensionID)); select.options.add(new Option(title, originEntry.extensionID));
// If option was the previously only selected, make it selected again. // If option was the previously only selected, make it selected again.
if (originEntry.extensionID != oldSelectedExtension) { if (originEntry.extensionID != oldSelectedExtension) {
continue; continue;
}
select.options[select.options.length - 1].selected = true;
} }
select.options[select.options.length - 1].selected = true;
// After drop down has been loaded with options, file metadata can be loaded
refreshFileMetadata();
} }
/** // After drop down has been loaded with options, file metadata can be loaded
* @return {?string} extension ID that's currently selected in drop down box. refreshFileMetadata();
*/ }
function getSelectedExtensionId() {
const dropDown = $('extensions-select').options;
if (dropDown.selectedIndex >= 0) {
return dropDown[dropDown.selectedIndex].value;
}
return null; /**
* @return {?string} extension ID that's currently selected in drop down box.
*/
function getSelectedExtensionId() {
const dropDown = $('extensions-select').options;
if (dropDown.selectedIndex >= 0) {
return dropDown[dropDown.selectedIndex].value;
} }
/** return null;
* Get File Metadata depending on which extension is selected from the drop }
* down if any.
*/
function refreshFileMetadata() {
const dropDown = $('extensions-select');
if (dropDown.options.length === 0) {
$('file-metadata-header').textContent = '';
$('file-metadata-entries').textContent = 'No file metadata available.';
return;
}
const selectedExtensionId = getSelectedExtensionId(); /**
sendWithPromise('getFileMetadata', selectedExtensionId) * Get File Metadata depending on which extension is selected from the drop
.then(onGetFileMetadata); * down if any.
*/
function refreshFileMetadata() {
const dropDown = $('extensions-select');
if (dropDown.options.length === 0) {
$('file-metadata-header').textContent = '';
$('file-metadata-entries').textContent = 'No file metadata available.';
return;
} }
/** const selectedExtensionId = getSelectedExtensionId();
* Renders result of getFileMetadata as a table. sendWithPromise('getFileMetadata', selectedExtensionId)
*/ .then(onGetFileMetadata);
function onGetFileMetadata(fileMetadataMap) { }
const header = $('file-metadata-header');
// Only draw the header if it hasn't been drawn yet
if (header.children.length === 0) {
const tr = document.createElement('tr');
tr.appendChild(createElementFromText('td', 'Type'));
tr.appendChild(createElementFromText('td', 'Status'));
tr.appendChild(createElementFromText('td', 'Path', {width: '250px'}));
tr.appendChild(createElementFromText('td', 'Details'));
header.appendChild(tr);
}
// Add row entries. /**
const itemContainer = $('file-metadata-entries'); * Renders result of getFileMetadata as a table.
itemContainer.textContent = ''; */
for (let i = 0; i < fileMetadataMap.length; i++) { function onGetFileMetadata(fileMetadataMap) {
const metadatEntry = fileMetadataMap[i]; const header = $('file-metadata-header');
const tr = document.createElement('tr'); // Only draw the header if it hasn't been drawn yet
tr.appendChild(createFileIconCell(metadatEntry.type)); if (header.children.length === 0) {
tr.appendChild(createElementFromText('td', metadatEntry.status)); const tr = document.createElement('tr');
tr.appendChild(createElementFromText('td', metadatEntry.path)); tr.appendChild(createElementFromText('td', 'Type'));
tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); tr.appendChild(createElementFromText('td', 'Status'));
itemContainer.appendChild(tr); tr.appendChild(createElementFromText('td', 'Path', {width: '250px'}));
} tr.appendChild(createElementFromText('td', 'Details'));
header.appendChild(tr);
} }
/** // Add row entries.
* @param {string} type file type string. const itemContainer = $('file-metadata-entries');
* @return {!HTMLElement} TD with file or folder icon depending on type. itemContainer.textContent = '';
*/ for (let i = 0; i < fileMetadataMap.length; i++) {
function createFileIconCell(type) { const metadatEntry = fileMetadataMap[i];
const img = document.createElement('div'); const tr = document.createElement('tr');
const lowerType = type.toLowerCase(); tr.appendChild(createFileIconCell(metadatEntry.type));
if (lowerType == 'file') { tr.appendChild(createElementFromText('td', metadatEntry.status));
img.style.content = getImage('chrome://theme/IDR_DEFAULT_FAVICON'); tr.appendChild(createElementFromText('td', metadatEntry.path));
} else if (lowerType == 'folder') { tr.appendChild(createElementFromDictionary('td', metadatEntry.details));
img.style.content = getImage('chrome://theme/IDR_FOLDER_CLOSED'); itemContainer.appendChild(tr);
img.className = 'folder-image';
}
const imgWrapper = document.createElement('div');
imgWrapper.appendChild(img);
const td = /** @type {!HTMLElement} */ (document.createElement('td'));
td.className = 'file-icon-cell';
td.appendChild(imgWrapper);
td.appendChild(document.createTextNode(type));
return td;
} }
}
function main() { /**
refreshExtensions(); * @param {string} type file type string.
$('refresh-metadata-button').addEventListener('click', refreshExtensions); * @return {!HTMLElement} TD with file or folder icon depending on type.
$('extensions-select').addEventListener('change', refreshFileMetadata); */
function createFileIconCell(type) {
const img = document.createElement('div');
const lowerType = type.toLowerCase();
if (lowerType == 'file') {
img.style.content = getImage('chrome://theme/IDR_DEFAULT_FAVICON');
} else if (lowerType == 'folder') {
img.style.content = getImage('chrome://theme/IDR_FOLDER_CLOSED');
img.className = 'folder-image';
} }
document.addEventListener('DOMContentLoaded', main); const imgWrapper = document.createElement('div');
imgWrapper.appendChild(img);
const td = /** @type {!HTMLElement} */ (document.createElement('td'));
td.className = 'file-icon-cell';
td.appendChild(imgWrapper);
td.appendChild(document.createTextNode(type));
return td;
}
function main() {
refreshExtensions();
$('refresh-metadata-button').addEventListener('click', refreshExtensions);
$('extensions-select').addEventListener('change', refreshFileMetadata);
}
document.addEventListener('DOMContentLoaded', main);
...@@ -13,91 +13,91 @@ import {$} from 'chrome://resources/js/util.m.js'; ...@@ -13,91 +13,91 @@ import {$} from 'chrome://resources/js/util.m.js';
import {createElementFromText} from './utils.js'; import {createElementFromText} from './utils.js';
/** /**
* Request Sync Service Status. * Request Sync Service Status.
*/ */
function refreshServiceStatus() { function refreshServiceStatus() {
sendWithPromise('getServiceStatus').then(onGetServiceStatus); sendWithPromise('getServiceStatus').then(onGetServiceStatus);
} }
/** /**
* Called when service status is initially retrieved or updated via events. * Called when service status is initially retrieved or updated via events.
* @param {string} statusString Service status enum as a string. * @param {string} statusString Service status enum as a string.
*/ */
function onGetServiceStatus(statusString) { function onGetServiceStatus(statusString) {
$('service-status').textContent = statusString; $('service-status').textContent = statusString;
} }
/** /**
* Request Google Drive Notification Source. e.g. XMPP or polling. * Request Google Drive Notification Source. e.g. XMPP or polling.
*/ */
function refreshNotificationSource() { function refreshNotificationSource() {
sendWithPromise('getNotificationSource').then(onGetNotificationSource); sendWithPromise('getNotificationSource').then(onGetNotificationSource);
} }
/** /**
* Handles callback from getNotificationSource. * Handles callback from getNotificationSource.
* @param {string} sourceString Notification source as a string. * @param {string} sourceString Notification source as a string.
*/ */
function onGetNotificationSource(sourceString) { function onGetNotificationSource(sourceString) {
$('notification-source').textContent = sourceString; $('notification-source').textContent = sourceString;
} }
// Keeps track of the last log event seen so it's not reprinted. // Keeps track of the last log event seen so it's not reprinted.
let lastLogEventId = -1; let lastLogEventId = -1;
/** /**
* Request debug log. * Request debug log.
*/ */
function refreshLog() { function refreshLog() {
sendWithPromise('getLog', lastLogEventId).then(onGetLog); sendWithPromise('getLog', lastLogEventId).then(onGetLog);
} }
/** /**
* Clear old logs. * Clear old logs.
*/ */
function clearLogs() { function clearLogs() {
chrome.send('clearLogs'); chrome.send('clearLogs');
$('log-entries').innerHTML = trustedTypes.emptyHTML; $('log-entries').innerHTML = trustedTypes.emptyHTML;
} }
/** /**
* Handles callback from getUpdateLog. * Handles callback from getUpdateLog.
* @param {!Array<!{ * @param {!Array<!{
* id: number, * id: number,
* logEvent: string, * logEvent: string,
* time: string, * time: string,
* }>} logEntries List of dictionaries containing 'id', 'time', 'logEvent'. * }>} logEntries List of dictionaries containing 'id', 'time', 'logEvent'.
*/ */
function onGetLog(logEntries) { function onGetLog(logEntries) {
const itemContainer = $('log-entries'); const itemContainer = $('log-entries');
for (let i = 0; i < logEntries.length; i++) { for (let i = 0; i < logEntries.length; i++) {
const logEntry = logEntries[i]; const logEntry = logEntries[i];
const tr = document.createElement('tr'); const tr = document.createElement('tr');
const error = /ERROR/.test(logEntry.logEvent) ? ' error' : ''; const error = /ERROR/.test(logEntry.logEvent) ? ' error' : '';
tr.appendChild( tr.appendChild(
createElementFromText('td', logEntry.time, {'class': 'log-time'})); createElementFromText('td', logEntry.time, {'class': 'log-time'}));
tr.appendChild(createElementFromText( tr.appendChild(createElementFromText(
'td', logEntry.logEvent, {'class': 'log-event' + error})); 'td', logEntry.logEvent, {'class': 'log-event' + error}));
itemContainer.appendChild(tr); itemContainer.appendChild(tr);
lastLogEventId = logEntry.id; lastLogEventId = logEntry.id;
}
} }
}
/** /**
* Get initial sync service values and set listeners to get updated values. * Get initial sync service values and set listeners to get updated values.
*/ */
function main() { function main() {
decorate('tabbox', TabBox); decorate('tabbox', TabBox);
$('clear-log-button').addEventListener('click', clearLogs); $('clear-log-button').addEventListener('click', clearLogs);
refreshServiceStatus(); refreshServiceStatus();
refreshNotificationSource(); refreshNotificationSource();
addWebUIListener('service-status-changed', onGetServiceStatus); addWebUIListener('service-status-changed', onGetServiceStatus);
// TODO: Look for a way to push entries to the page when necessary. // TODO: Look for a way to push entries to the page when necessary.
window.setInterval(refreshLog, 1000); window.setInterval(refreshLog, 1000);
} }
document.addEventListener('DOMContentLoaded', main); document.addEventListener('DOMContentLoaded', main);
...@@ -6,53 +6,53 @@ import {addWebUIListener} from 'chrome://resources/js/cr.m.js'; ...@@ -6,53 +6,53 @@ import {addWebUIListener} from 'chrome://resources/js/cr.m.js';
import {$} from 'chrome://resources/js/util.m.js'; import {$} from 'chrome://resources/js/util.m.js';
import {createElementFromText} from './utils.js'; import {createElementFromText} from './utils.js';
const nextTaskLogSeq = 1; const nextTaskLogSeq = 1;
/** /**
* Handles per-task log event. * Handles per-task log event.
* @param {!{ * @param {!{
* duration: number, * duration: number,
* task_description: string, * task_description: string,
* result_description: string, * result_description: string,
* details: !Array, * details: !Array,
* }} taskLog * }} taskLog
*/ */
function onTaskLogRecorded(taskLog) { function onTaskLogRecorded(taskLog) {
const details = document.createElement('td'); const details = document.createElement('td');
details.classList.add('task-log-details'); details.classList.add('task-log-details');
const label = document.createElement('label'); const label = document.createElement('label');
details.appendChild(label); details.appendChild(label);
const collapseCheck = document.createElement('input'); const collapseCheck = document.createElement('input');
collapseCheck.setAttribute('type', 'checkbox'); collapseCheck.setAttribute('type', 'checkbox');
collapseCheck.classList.add('task-log-collapse-check'); collapseCheck.classList.add('task-log-collapse-check');
label.appendChild(collapseCheck); label.appendChild(collapseCheck);
const ul = document.createElement('ul'); const ul = document.createElement('ul');
for (let i = 0; i < taskLog.details.length; ++i) { for (let i = 0; i < taskLog.details.length; ++i) {
ul.appendChild(createElementFromText('li', taskLog.details[i])); ul.appendChild(createElementFromText('li', taskLog.details[i]));
}
label.appendChild(ul);
const tr = document.createElement('tr');
tr.appendChild(createElementFromText(
'td', taskLog.duration.toString(), {'class': 'task-log-duration'}));
tr.appendChild(createElementFromText(
'td', taskLog.task_description, {'class': 'task-log-description'}));
tr.appendChild(createElementFromText(
'td', taskLog.result_description, {'class': 'task-log-result'}));
tr.appendChild(details);
$('task-log-entries').appendChild(tr);
} }
label.appendChild(ul);
/**
* Get initial sync service values and set listeners to get updated values. const tr = document.createElement('tr');
*/ tr.appendChild(createElementFromText(
function main() { 'td', taskLog.duration.toString(), {'class': 'task-log-duration'}));
addWebUIListener('task-log-recorded', onTaskLogRecorded); tr.appendChild(createElementFromText(
chrome.send('observeTaskLog'); 'td', taskLog.task_description, {'class': 'task-log-description'}));
} tr.appendChild(createElementFromText(
'td', taskLog.result_description, {'class': 'task-log-result'}));
document.addEventListener('DOMContentLoaded', main); tr.appendChild(details);
$('task-log-entries').appendChild(tr);
}
/**
* Get initial sync service values and set listeners to get updated values.
*/
function main() {
addWebUIListener('task-log-recorded', onTaskLogRecorded);
chrome.send('observeTaskLog');
}
document.addEventListener('DOMContentLoaded', main);
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