Index: chrome/browser/resources/sync_internals/data.js |
diff --git a/chrome/browser/resources/sync_internals/data.js b/chrome/browser/resources/sync_internals/data.js |
index c0ef90e6eb77f5d587c001325a9d622e9f3a587d..6de42c706a7f7289e04aebc898fdf3dd1b82552b 100644 |
--- a/chrome/browser/resources/sync_internals/data.js |
+++ b/chrome/browser/resources/sync_internals/data.js |
@@ -57,7 +57,11 @@ function versionToDateString(version) { |
return date.toString(); |
} |
-function getFields(node) { |
+/** |
+ * @param {!Object} node A JavaScript represenation of a sync entity. |
+ * @return {string} A string representation of the sync entity. |
+ */ |
+function serializeNode(node) { |
return allFields.map(function(field) { |
var fieldVal; |
if (field == 'SERVER_VERSION_TIME') { |
@@ -79,8 +83,11 @@ function getFields(node) { |
}); |
} |
-function isSelectedDatatype(node) { |
- var type = node.serverModelType; |
+/** |
+ * @param {string} type The name of a sync model type. |
+ * @return {boolean} True if the type's checkbox is selected. |
+ */ |
+function isSelectedDatatype(type) { |
var typeCheckbox = $(type); |
// Some types, such as 'Top level folder', appear in the list of nodes |
// but not in the list of selectable items. |
@@ -116,7 +123,13 @@ function makeDateUserAgentHeader() { |
return dateUaHeader; |
} |
-function triggerDataDownload(data) { |
+/** |
+ * Builds a summary of current state and exports it as a downloaded file. |
+ * |
+ * @param {!Array.<{type: string, nodes: !Array<!Object>}>} nodesMap |
+ * Summary of local state by model type. |
+ */ |
+function triggerDataDownload(nodesMap) { |
// Prepend a header with ISO date and useragent. |
var output = [makeDateUserAgentHeader()]; |
output.push('====='); |
@@ -124,16 +137,17 @@ function triggerDataDownload(data) { |
var aboutInfo = JSON.stringify(chrome.sync.aboutInfo, null, 2); |
output.push(aboutInfo); |
- if (data != null && data.length > 0) { |
+ // Filter out non-selected types. |
+ var selectedTypesNodes = nodesMap.filter(function(x) { |
+ return isSelectedDatatype(x.type); |
+ }); |
+ |
+ // Serialize the remaining nodes and add them to the output. |
+ selectedTypesNodes.forEach(function(typeNodes) { |
output.push('====='); |
- var fieldLabels = allFields.join(','); |
- output.push(fieldLabels); |
+ output.push(typeNodes.nodes.map(serializeNode).join('\n')); |
+ }); |
- var data = data.filter(isSelectedDatatype); |
- data = data.map(getFields); |
- var dataAsString = data.join('\n'); |
- output.push(dataAsString); |
- } |
output = output.join('\n'); |
var anchor = $('dump-to-file-anchor'); |