Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(736)

Side by Side Diff: chrome/browser/resources/sync_internals/data.js

Issue 224563004: sync: Re-implement getAllNodes WebUI function (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Many updates Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 (function() { 5 (function() {
6 var dumpToTextButton = $('dump-to-text'); 6 var dumpToTextButton = $('dump-to-text');
7 var dataDump = $('data-dump'); 7 var dataDump = $('data-dump');
8 dumpToTextButton.addEventListener('click', function(event) { 8 dumpToTextButton.addEventListener('click', function(event) {
9 // TODO(akalin): Add info like Chrome version, OS, date dumped, etc. 9 // TODO(akalin): Add info like Chrome version, OS, date dumped, etc.
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 ]; 50 ];
51 51
52 function versionToDateString(version) { 52 function versionToDateString(version) {
53 // TODO(mmontgomery): ugly? Hacky? Is there a better way? 53 // TODO(mmontgomery): ugly? Hacky? Is there a better way?
54 var epochLength = Date.now().toString().length; 54 var epochLength = Date.now().toString().length;
55 var epochTime = parseInt(version.slice(0, epochLength)); 55 var epochTime = parseInt(version.slice(0, epochLength));
56 var date = new Date(epochTime); 56 var date = new Date(epochTime);
57 return date.toString(); 57 return date.toString();
58 } 58 }
59 59
60 function getFields(node) { 60 /**
61 * @param {!Object} node A JavaScript represenation of a sync entity.
62 * @return {string} A string representation of the sync entity.
63 */
64 function serializeNode(node) {
61 return allFields.map(function(field) { 65 return allFields.map(function(field) {
62 var fieldVal; 66 var fieldVal;
63 if (field == 'SERVER_VERSION_TIME') { 67 if (field == 'SERVER_VERSION_TIME') {
64 var version = node['SERVER_VERSION']; 68 var version = node['SERVER_VERSION'];
65 fieldVal = versionToDateString(version); 69 fieldVal = versionToDateString(version);
66 } if (field == 'BASE_VERSION_TIME') { 70 } if (field == 'BASE_VERSION_TIME') {
67 var version = node['BASE_VERSION']; 71 var version = node['BASE_VERSION'];
68 fieldVal = versionToDateString(version); 72 fieldVal = versionToDateString(version);
69 } else if ((field == 'SERVER_SPECIFICS' || field == 'SPECIFICS') && 73 } else if ((field == 'SERVER_SPECIFICS' || field == 'SPECIFICS') &&
70 (!$('include-specifics').checked)) { 74 (!$('include-specifics').checked)) {
71 fieldVal = 'REDACTED'; 75 fieldVal = 'REDACTED';
72 } else if ((field == 'SERVER_SPECIFICS' || field == 'SPECIFICS') && 76 } else if ((field == 'SERVER_SPECIFICS' || field == 'SPECIFICS') &&
73 $('include-specifics').checked) { 77 $('include-specifics').checked) {
74 fieldVal = JSON.stringify(node[field]); 78 fieldVal = JSON.stringify(node[field]);
75 } else { 79 } else {
76 fieldVal = node[field]; 80 fieldVal = node[field];
77 } 81 }
78 return fieldVal; 82 return fieldVal;
79 }); 83 });
80 } 84 }
81 85
82 function isSelectedDatatype(node) { 86 /**
83 var type = node.serverModelType; 87 * @param {string} type The name of a sync model type.
88 * @return {boolean} True if the type's checkbox is selected.
89 */
90 function isSelectedDatatype(type) {
84 var typeCheckbox = $(type); 91 var typeCheckbox = $(type);
85 // Some types, such as 'Top level folder', appear in the list of nodes 92 // Some types, such as 'Top level folder', appear in the list of nodes
86 // but not in the list of selectable items. 93 // but not in the list of selectable items.
87 if (typeCheckbox == null) { 94 if (typeCheckbox == null) {
88 return false; 95 return false;
89 } 96 }
90 return typeCheckbox.checked; 97 return typeCheckbox.checked;
91 } 98 }
92 99
93 function makeBlobUrl(data) { 100 function makeBlobUrl(data) {
(...skipping 15 matching lines...) Expand all
109 return [name, 'csv'].join('.'); 116 return [name, 'csv'].join('.');
110 } 117 }
111 118
112 function makeDateUserAgentHeader() { 119 function makeDateUserAgentHeader() {
113 var now = new Date(); 120 var now = new Date();
114 var userAgent = window.navigator.userAgent; 121 var userAgent = window.navigator.userAgent;
115 var dateUaHeader = [now.toISOString(), userAgent].join(','); 122 var dateUaHeader = [now.toISOString(), userAgent].join(',');
116 return dateUaHeader; 123 return dateUaHeader;
117 } 124 }
118 125
119 function triggerDataDownload(data) { 126 /**
127 * Builds a summary of current state and exports it as a downloaded file.
128 *
129 * @param {!Array.<{type: string, nodes: !Array<!Object>}>} nodesMap
130 * Summary of local state by model type.
131 */
132 function triggerDataDownload(nodesMap) {
120 // Prepend a header with ISO date and useragent. 133 // Prepend a header with ISO date and useragent.
121 var output = [makeDateUserAgentHeader()]; 134 var output = [makeDateUserAgentHeader()];
122 output.push('====='); 135 output.push('=====');
123 136
124 var aboutInfo = JSON.stringify(chrome.sync.aboutInfo, null, 2); 137 var aboutInfo = JSON.stringify(chrome.sync.aboutInfo, null, 2);
125 output.push(aboutInfo); 138 output.push(aboutInfo);
126 139
127 if (data != null && data.length > 0) { 140 // Filter out non-selected types.
141 var selectedTypesNodes = nodesMap.filter(function(x) {
142 return isSelectedDatatype(x.type);
143 });
144
145 // Serialize the remaining nodes and add them to the output.
146 selectedTypesNodes.forEach(function(typeNodes) {
128 output.push('====='); 147 output.push('=====');
129 var fieldLabels = allFields.join(','); 148 output.push(typeNodes.nodes.map(serializeNode).join('\n'));
130 output.push(fieldLabels); 149 });
131 150
132 var data = data.filter(isSelectedDatatype);
133 data = data.map(getFields);
134 var dataAsString = data.join('\n');
135 output.push(dataAsString);
136 }
137 output = output.join('\n'); 151 output = output.join('\n');
138 152
139 var anchor = $('dump-to-file-anchor'); 153 var anchor = $('dump-to-file-anchor');
140 anchor.href = makeBlobUrl(output); 154 anchor.href = makeBlobUrl(output);
141 anchor.download = makeDownloadName(); 155 anchor.download = makeDownloadName();
142 anchor.click(); 156 anchor.click();
143 } 157 }
144 158
145 function createTypesCheckboxes(types) { 159 function createTypesCheckboxes(types) {
146 var containerElt = $('node-type-checkboxes'); 160 var containerElt = $('node-type-checkboxes');
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 'onReceivedListOfTypes', 192 'onReceivedListOfTypes',
179 onReceivedListOfTypes); 193 onReceivedListOfTypes);
180 chrome.sync.requestListOfTypes(); 194 chrome.sync.requestListOfTypes();
181 }); 195 });
182 196
183 var dumpToFileLink = $('dump-to-file'); 197 var dumpToFileLink = $('dump-to-file');
184 dumpToFileLink.addEventListener('click', function(event) { 198 dumpToFileLink.addEventListener('click', function(event) {
185 chrome.sync.getAllNodes(triggerDataDownload); 199 chrome.sync.getAllNodes(triggerDataDownload);
186 }); 200 });
187 })(); 201 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698