// Copyright 2013 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. /** * WebUI to monitor File Metadata per Extension ID. */ var FileMetadata = (function() { 'use strict'; var FileMetadata = {}; /** * Gets extension data so the select drop down can be filled. */ function getExtensions() { chrome.send('getExtensions'); } /** * Renders result of getFileMetadata as a table. * @param {Array} list of dictionaries containing 'extensionName', * 'extensionID', 'status'. */ FileMetadata.onGetExtensions = function(extensionStatuses) { var select = $('extensions-select'); // Record existing drop down extension ID. If it's still there after the // refresh then keep it as the selected value. var oldSelectedExtension = getSelectedExtensionId(); select.textContent = ''; for (var i = 0; i < extensionStatuses.length; i++) { var originEntry = extensionStatuses[i]; var tr = document.createElement('tr'); var title = originEntry.extensionName + ' [' + originEntry.status + ']'; select.options.add(new Option(title, originEntry.extensionID)); // If option was the previously only selected, make it selected again. if (originEntry.extensionID != oldSelectedExtension) continue; select.options[select.options.length - 1].selected = true; } // After drop down has been loaded with options, file metadata can be loaded getFileMetadata(); } /** * @return {string} extension ID that's currently selected in drop down box. */ function getSelectedExtensionId() { var 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 getFileMetadata() { var dropDown = $('extensions-select'); if (dropDown.options.length === 0) { $('file-metadata-header').textContent = ''; $('file-metadata-entries').textContent = 'No file metadata available.'; return; } var selectedExtensionId = getSelectedExtensionId(); chrome.send('getFileMetadata', [selectedExtensionId]); } /** * Renders result of getFileMetadata as a table. */ FileMetadata.onGetFileMetadata = function(fileMetadataMap) { var header = $('file-metadata-header'); // Only draw the header if it hasn't been drawn yet if (header.children.length === 0) { var 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. var itemContainer = $('file-metadata-entries'); itemContainer.textContent = ''; for (var i = 0; i < fileMetadataMap.length; i++) { var metadatEntry = fileMetadataMap[i]; var tr = document.createElement('tr'); tr.appendChild(createFileIconCell(metadatEntry.type)); tr.appendChild(createElementFromText('td', metadatEntry.status)); tr.appendChild(createElementFromText('td', metadatEntry.path)); tr.appendChild(createElementFromDictionary('td', metadatEntry.details)); itemContainer.appendChild(tr); } } /** * @param {string} file type string. * @return {HTMLElement} TD with file or folder icon depending on type. */ function createFileIconCell(type) { var td = createElementFromText('td', type); td.setAttribute('class', type.toLowerCase() + '-icon'); return td; } function main() { getExtensions(); $('refresh-metadata-button').addEventListener('click', getExtensions); $('extensions-select').addEventListener('change', getFileMetadata); } document.addEventListener('DOMContentLoaded', main); return FileMetadata; })();