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

Side by Side Diff: chrome/browser/resources/offline_pages/offline_internals.js

Issue 2038963002: [Offline Pages] Link the internals page with the offline model and request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: try to fix patch dependency #2 Created 4 years, 6 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 cr.define('offlineInternals', function() { 5 cr.define('offlineInternals', function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * @typedef {{ 9 * @typedef {{
10 * onlineUrl: string, 10 * onlineUrl: string,
11 * creationTime: number, 11 * creationTime: number,
12 * status: number,
13 * id: string, 12 * id: string,
14 * namespace: string, 13 * namespace: string,
15 * size: string, 14 * size: string,
16 * filePath: string, 15 * filePath: string,
17 * lastAccessTime: number, 16 * lastAccessTime: number,
18 * accessCount: number 17 * accessCount: number
19 * }} 18 * }}
20 */ 19 */
21 var OfflinePageItem; 20 var OfflinePageItem;
22 21
23 /** 22 /**
24 * @typedef {{ 23 * @typedef {{
25 * status: string, 24 * status: string,
26 * onlineUrl: string, 25 * onlineUrl: string,
27 * creationTime: number, 26 * creationTime: number,
28 * id: string, 27 * id: string,
29 * namespace: string, 28 * namespace: string,
30 * attemptCount: number 29 * attemptCount: number
31 * }} 30 * }}
32 */ 31 */
33 var SavePageRequest; 32 var SavePageRequest;
34 33
34 var currentStoredPagesData = null;
dewittj 2016/06/03 23:12:05 needs /** @type {...} */
chili 2016/06/09 22:29:16 Done.
35 var currentRequestQueueData = null;
36
35 /** 37 /**
36 * Clear the specified table. 38 * Clear the specified table.
37 * @param {string} tableId id of the table to clear. 39 * @param {string} tableId ID of the table to clear.
38 */ 40 */
39 function clearTable(tableId) { 41 function clearTable(tableId) {
dewittj 2016/06/03 23:12:05 nit: make this take an element, then pass it in;
chili 2016/06/09 22:29:16 Done.
40 $(tableId).textContent = ''; 42 $(tableId).textContent = '';
41 } 43 }
42 44
43 /** 45 /**
44 * Fill stored pages table. 46 * Fill stored pages table.
45 * @param {HTMLElement} element A HTML element. 47 * @param {!Array<OfflinePageItem} data An array object representing
dewittj 2016/06/03 23:12:06 Missing ">"
chili 2016/06/09 22:29:16 Done.
46 * @param {!Array<OfflinePageItem>} data An array object representing
47 * stored offline pages. 48 * stored offline pages.
48 */ 49 */
49 function fillStoredPages(element, data) { 50 function fillStoredPages(data) {
51 clearTable('stored-pages');
52 var element = $('stored-pages');
53
50 for (var i = 0; i < data.length; i++) { 54 for (var i = 0; i < data.length; i++) {
51 var row = document.createElement('tr'); 55 var row = document.createElement('tr');
52 56
53 var checkboxCell = document.createElement('td'); 57 var checkboxCell = document.createElement('td');
54 var checkbox = document.createElement('input'); 58 var checkbox = document.createElement('input');
55 checkbox.setAttribute('type', 'checkbox'); 59 checkbox.setAttribute('type', 'checkbox');
56 checkbox.setAttribute('name', 'stored'); 60 checkbox.setAttribute('name', 'stored');
57 checkbox.setAttribute('value', data[i].id); 61 checkbox.setAttribute('value', data[i].id);
58 62
59 checkboxCell.appendChild(checkbox); 63 checkboxCell.appendChild(checkbox);
60 row.appendChild(checkboxCell); 64 row.appendChild(checkboxCell);
61 65
62 var cell = document.createElement('td'); 66 var cell = document.createElement('td');
63 cell.textContent = data[i].onlineUrl; 67 cell.textContent = data[i].onlineUrl;
64 row.appendChild(cell); 68 row.appendChild(cell);
65 69
66 cell = document.createElement('td'); 70 cell = document.createElement('td');
67 cell.textContent = data[i].namespace; 71 cell.textContent = data[i].namespace;
68 row.appendChild(cell); 72 row.appendChild(cell);
69 73
70 cell = document.createElement('td'); 74 cell = document.createElement('td');
71 cell.textContent = data[i].size; 75 cell.textContent = Math.round(data[i].size / 1024);
72 row.appendChild(cell); 76 row.appendChild(cell);
73 77
74 element.appendChild(row); 78 element.appendChild(row);
75 } 79 }
80 currentStoredPagesData = data;
76 } 81 }
77 82
78 /** 83 /**
79 * Fill requests table. 84 * Fill requests table.
80 * @param {HTMLElement} element A HTML element.
81 * @param {!Array<SavePageRequest>} data An array object representing 85 * @param {!Array<SavePageRequest>} data An array object representing
82 * the request queue. 86 * the request queue.
83 */ 87 */
84 function fillRequestQueue(element, data) { 88 function fillRequestQueue(data) {
89 clearTable('request-queue');
90 var element = $('request-queue');
91
85 for (var i = 0; i < data.length; i++) { 92 for (var i = 0; i < data.length; i++) {
86 var row = document.createElement('tr'); 93 var row = document.createElement('tr');
87 94
88 var cell = document.createElement('td'); 95 var cell = document.createElement('td');
89 cell.textContent = data[i].onlineUrl; 96 cell.textContent = data[i].onlineUrl;
90 row.appendChild(cell); 97 row.appendChild(cell);
91 98
92 cell = document.createElement('td'); 99 cell = document.createElement('td');
93 cell.textContent = new Date(data[i].creationTime); 100 cell.textContent = new Date(data[i].creationTime);
94 row.appendChild(cell); 101 row.appendChild(cell);
95 102
96 cell = document.createElement('td'); 103 cell = document.createElement('td');
97 cell.textContent = data[i].status; 104 cell.textContent = data[i].status;
98 row.appendChild(cell); 105 row.appendChild(cell);
99 106
100 element.appendChild(row); 107 element.appendChild(row);
101 } 108 }
109 currentRequestQueueData = data;
102 } 110 }
103 111
104 /** 112 /**
105 * Refresh all displayed information. 113 * Refresh all displayed information.
106 */ 114 */
107 function refreshAll() { 115 function refreshAll() {
108 cr.sendWithPromise('getOfflineInternalsInfo').then(setOfflineInternalsInfo); 116 cr.sendWithPromise('getStoredPagesInfo').then(fillStoredPages);
117 cr.sendWithPromise('getRequestQueueInfo').then(fillRequestQueue);
109 } 118 }
110 119
111 /** 120 /**
112 * Delete all pages in the offline store. 121 * Delete all pages in the offline store.
113 */ 122 */
114 function deleteAllPages() { 123 function deleteAllPages() {
115 cr.sendWithPromise('deleteAllPages').then(pagesDeleted); 124 cr.sendWithPromise('deleteAllPages').then(pagesDeleted);
116 } 125 }
117 126
118 /** 127 /**
119 * Callback when pages are deleted. 128 * Callback when pages are deleted.
120 * @param {string} deletePageStatus The status of delete page call. 129 * @param {string} status The status of the request.
121 */ 130 */
122 function pagesDeleted(deletePageStatus) { 131 function pagesDeleted(status) {
123 // TODO(chili): decide what to do here. Perhaps a refresh of just 132 $('random-info').textContent = status;
124 // the stored pages table? 133 cr.sendWithPromise('getStoredPagesInfo').then(fillStoredPages);
125 } 134 }
126 135
127 /** 136 /**
128 * Callback when information is loaded. 137 * Helper function to add quotes around a string.
129 * @param {{AllPages: !Array<OfflinePageItem>, 138 * @param {string} strObj The obj to add quotes around.
dewittj 2016/06/03 23:12:05 @return {string} the escaped string
chili 2016/06/09 22:29:16 Done.
130 * Queue: !Array<SavePageRequest>}} info An object containing both
131 * stored pages and request queue status.
132 */ 139 */
133 function setOfflineInternalsInfo(info) { 140 function addQuotes(strObj) {
dewittj 2016/06/03 23:12:06 need to escape backslashes and quotes in the incom
chili 2016/06/09 22:29:16 backslashes don't need to be escaped. Added escap
134 clearTable('stored-pages'); 141 return '"' + strObj + '"';
135 clearTable('request-queue');
136
137 fillStoredPages($('stored-pages'), info.AllPages);
138 fillRequestQueue($('request-queue'), info.Queue);
139 } 142 }
140 143
141 /** 144 /**
145 * Downloads all the stored page and request queue information into a file.
146 */
147 function download() {
148 var csv = '';
149 // Create header & csv for stored pages.
150 if (currentStoredPagesData && currentStoredPagesData.length > 0) {
151 csv += 'Online URL,Namespace,Size,ID,File Path,Creation Time,' +
152 'Last Accessed Time,Access Count\n';
153 for (let obj of currentStoredPagesData) {
154 var objFieldArr = [
155 obj.onlineUrl,
156 obj.namespace,
157 obj.size,
158 obj.id,
159 obj.filePath,
160 new Date(obj.creationTime).toString(),
161 new Date(obj.lastAccessedTime).toString(),
162 obj.accessCount];
163 objFieldArr = objFieldArr.map(addQuotes);
164 csv += objFieldArr.join(',') + '\n';
165 }
166 }
167 csv += '\n';
168 // Create header & csv for request queue.
169 if (currentRequestQueueData && currentRequestQueueData.length > 0) {
170 csv += 'Online URL,Creation Time,Status,Namespace,Last Attempt Time,ID\n';
171
172 for (let obj of currentRequestQueueData) {
173 var objFieldArr = [
174 obj.onlineUrl,
175 new Date(obj.creationTime).toString(),
176 obj.status,
177 obj.namespace,
178 new Date(obj.lastAttempt).toString(),
179 obj.id];
180 objFieldArr = objFieldArr.map(addQuotes);
181 csv += objFieldArr.join(',') + '\n';
182 }
183 }
184
185 var uriContent = 'data:text/csv,' + encodeURIComponent(csv);
186 window.open(uriContent, 'dump.csv');
dewittj 2016/06/03 23:12:06 Does this open a window, or does it cause a downlo
chili 2016/06/09 22:29:16 This will open a window that'll ask you to downloa
187 }
188
189 /**
142 * Delete selected pages from the offline store. 190 * Delete selected pages from the offline store.
143 */ 191 */
144 function deleteSelectedPages() { 192 function deleteSelectedPages() {
145 var checkboxes = document.getElementsByName('stored'); 193 var checkboxes = document.getElementsByName('stored');
146 var selectedIds = []; 194 var selectedIds = [];
147 for (var checkbox of checkboxes) { 195 for (var checkbox of checkboxes) {
148 if (checkbox.checked) 196 if (checkbox.checked)
149 selectedIds.push(checkbox.value); 197 selectedIds.push(checkbox.value);
150 } 198 }
151 199
152 cr.sendWithPromise('deleteSelectedPages', selectedIds).then(pagesDeleted); 200 cr.sendWithPromise('deleteSelectedPages', selectedIds).then(pagesDeleted);
153 } 201 }
154 202
155 function initialize() { 203 function initialize() {
156 $('clear-all').onclick = deleteAllPages; 204 $('clear-all').onclick = deleteAllPages;
157 $('clear-selected').onclick = deleteSelectedPages; 205 $('clear-selected').onclick = deleteSelectedPages;
158 $('refresh').onclick = refreshAll; 206 $('refresh').onclick = refreshAll;
207 $('download').onclick = download;
159 refreshAll(); 208 refreshAll();
160 } 209 }
161 210
162 // Return an object with all of the exports. 211 // Return an object with all of the exports.
163 return { 212 return {
164 initialize: initialize, 213 initialize: initialize,
165 }; 214 };
166 }); 215 });
167 216
168 document.addEventListener('DOMContentLoaded', offlineInternals.initialize); 217 document.addEventListener('DOMContentLoaded', offlineInternals.initialize);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698