blob: efda8c40a49be3d4e06e362648a53407c9b86dd5 [file] [log] [blame]
Blink Reformat4c46d092018-04-07 15:32:371// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Tim van der Lippe0efccf02020-02-12 15:15:395import * as Common from '../common/common.js';
6import * as DataGrid from '../data_grid/data_grid.js';
7import * as Network from '../network/network.js';
Simon Zünd055385d2020-03-02 09:54:448import * as Platform from '../platform/platform.js';
Tim van der Lippe0efccf02020-02-12 15:15:399import * as SDK from '../sdk/sdk.js';
10import * as UI from '../ui/ui.js';
11
12export class ServiceWorkerCacheView extends UI.View.SimpleView {
Blink Reformat4c46d092018-04-07 15:32:3713 /**
Tim van der Lippe0efccf02020-02-12 15:15:3914 * @param {!SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel} model
Blink Reformat4c46d092018-04-07 15:32:3715 * @param {!SDK.ServiceWorkerCacheModel.Cache} cache
16 */
17 constructor(model, cache) {
Tim van der Lippe0efccf02020-02-12 15:15:3918 super(Common.UIString.UIString('Cache'));
Jack Franklin71519f82020-11-03 12:08:5919 this.registerRequiredCSS('resources/serviceWorkerCacheViews.css', {enableLegacyPatching: true});
Blink Reformat4c46d092018-04-07 15:32:3720
21 this._model = model;
22 this._entriesForTest = null;
23
24 this.element.classList.add('service-worker-cache-data-view');
25 this.element.classList.add('storage-view');
26
Tim van der Lippe0efccf02020-02-12 15:15:3927 const editorToolbar = new UI.Toolbar.Toolbar('data-view-toolbar', this.element);
28 this._splitWidget = new UI.SplitWidget.SplitWidget(false, false);
Blink Reformat4c46d092018-04-07 15:32:3729 this._splitWidget.show(this.element);
30
Tim van der Lippe0efccf02020-02-12 15:15:3931 this._previewPanel = new UI.Widget.VBox();
Blink Reformat4c46d092018-04-07 15:32:3732 const resizer = this._previewPanel.element.createChild('div', 'cache-preview-panel-resizer');
33 this._splitWidget.setMainWidget(this._previewPanel);
34 this._splitWidget.installResizer(resizer);
35
Tim van der Lippe0efccf02020-02-12 15:15:3936 /** @type {?UI.Widget.Widget} */
Blink Reformat4c46d092018-04-07 15:32:3737 this._preview = null;
38
39 this._cache = cache;
Tim van der Lippeb842a762020-10-15 13:12:3340 /** @type {?DataGrid.DataGrid.DataGridImpl<!DataGridNode>} */
Blink Reformat4c46d092018-04-07 15:32:3741 this._dataGrid = null;
Tim van der Lippe0efccf02020-02-12 15:15:3942 this._refreshThrottler = new Common.Throttler.Throttler(300);
43 this._refreshButton = new UI.Toolbar.ToolbarButton(Common.UIString.UIString('Refresh'), 'largeicon-refresh');
44 this._refreshButton.addEventListener(UI.Toolbar.ToolbarButton.Events.Click, this._refreshButtonClicked, this);
Blink Reformat4c46d092018-04-07 15:32:3745 editorToolbar.appendToolbarItem(this._refreshButton);
46
Tim van der Lippe0efccf02020-02-12 15:15:3947 this._deleteSelectedButton =
48 new UI.Toolbar.ToolbarButton(Common.UIString.UIString('Delete Selected'), 'largeicon-delete');
Tim van der Lippe37a35ff2020-03-03 13:49:0249 this._deleteSelectedButton.addEventListener(UI.Toolbar.ToolbarButton.Events.Click, event => {
50 this._deleteButtonClicked(null);
51 });
Blink Reformat4c46d092018-04-07 15:32:3752 editorToolbar.appendToolbarItem(this._deleteSelectedButton);
53
Tim van der Lippe0efccf02020-02-12 15:15:3954 const entryPathFilterBox = new UI.Toolbar.ToolbarInput(ls`Filter by Path`, '', 1);
Harley Li574c7202018-12-03 19:55:5455 editorToolbar.appendToolbarItem(entryPathFilterBox);
Tim van der Lippe0efccf02020-02-12 15:15:3956 const entryPathFilterThrottler = new Common.Throttler.Throttler(300);
Harley Li574c7202018-12-03 19:55:5457 this._entryPathFilter = '';
Tim van der Lippe0efccf02020-02-12 15:15:3958 entryPathFilterBox.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged, () => {
Harley Li574c7202018-12-03 19:55:5459 entryPathFilterThrottler.schedule(() => {
60 this._entryPathFilter = entryPathFilterBox.value();
Harley Li574c7202018-12-03 19:55:5461 return this._updateData(true);
62 });
63 });
64
Harley Li2ba8ce72019-03-26 21:17:2165 this._returnCount = /** @type {?number} */ (null);
66 this._summaryBarElement = /** @type {?Element} */ (null);
Tim van der Lippeb842a762020-10-15 13:12:3367 /** @type {?Promise<!{entries: !Array<!Protocol.CacheStorage.DataEntry>, returnCount: number}>} */
68 this._loadingPromise = null;
Blink Reformat4c46d092018-04-07 15:32:3769
70 this.update(cache);
71 }
72
Harley Li574c7202018-12-03 19:55:5473 _resetDataGrid() {
Tim van der Lippe1d6e57a2019-09-30 11:55:3474 if (this._dataGrid) {
Harley Li574c7202018-12-03 19:55:5475 this._dataGrid.asWidget().detach();
Tim van der Lippe1d6e57a2019-09-30 11:55:3476 }
Harley Li574c7202018-12-03 19:55:5477 this._dataGrid = this._createDataGrid();
Harley Li2ba8ce72019-03-26 21:17:2178 const dataGridWidget = this._dataGrid.asWidget();
79 this._splitWidget.setSidebarWidget(dataGridWidget);
80 dataGridWidget.setMinimumSize(0, 250);
Harley Li574c7202018-12-03 19:55:5481 }
82
Blink Reformat4c46d092018-04-07 15:32:3783 /**
84 * @override
85 */
86 wasShown() {
87 this._model.addEventListener(
88 SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this);
89 this._updateData(true);
90 }
91
92 /**
93 * @override
94 */
95 willHide() {
96 this._model.removeEventListener(
97 SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this);
98 }
99
100 /**
Tim van der Lippe0efccf02020-02-12 15:15:39101 * @param {?UI.Widget.Widget} preview
Blink Reformat4c46d092018-04-07 15:32:37102 */
103 _showPreview(preview) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34104 if (preview && this._preview === preview) {
Blink Reformat4c46d092018-04-07 15:32:37105 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34106 }
107 if (this._preview) {
Blink Reformat4c46d092018-04-07 15:32:37108 this._preview.detach();
Tim van der Lippe1d6e57a2019-09-30 11:55:34109 }
110 if (!preview) {
Tim van der Lippe0efccf02020-02-12 15:15:39111 preview = new UI.EmptyWidget.EmptyWidget(Common.UIString.UIString('Select a cache entry above to preview'));
Tim van der Lippe1d6e57a2019-09-30 11:55:34112 }
Blink Reformat4c46d092018-04-07 15:32:37113 this._preview = preview;
114 this._preview.show(this._previewPanel.element);
115 }
116
117 /**
Tim van der Lippeb842a762020-10-15 13:12:33118 * @return {!DataGrid.DataGrid.DataGridImpl<!DataGridNode>}
Blink Reformat4c46d092018-04-07 15:32:37119 */
120 _createDataGrid() {
Tim van der Lippe9a9aba82020-02-14 14:52:29121 const columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([
Harley Li2ba8ce72019-03-26 21:17:21122 {id: 'number', title: '#', sortable: false, width: '3px'},
Tim van der Lippe0efccf02020-02-12 15:15:39123 {id: 'name', title: Common.UIString.UIString('Name'), weight: 4, sortable: true},
Harley Li044c7ac2018-10-26 15:14:20124 {id: 'responseType', title: ls`Response-Type`, weight: 1, align: DataGrid.DataGrid.Align.Right, sortable: true},
Tim van der Lippe0efccf02020-02-12 15:15:39125 {id: 'contentType', title: Common.UIString.UIString('Content-Type'), weight: 1, sortable: true}, {
Blink Reformat4c46d092018-04-07 15:32:37126 id: 'contentLength',
Tim van der Lippe0efccf02020-02-12 15:15:39127 title: Common.UIString.UIString('Content-Length'),
Blink Reformat4c46d092018-04-07 15:32:37128 weight: 1,
129 align: DataGrid.DataGrid.Align.Right,
130 sortable: true
131 },
132 {
133 id: 'responseTime',
Tim van der Lippe0efccf02020-02-12 15:15:39134 title: Common.UIString.UIString('Time Cached'),
Blink Reformat4c46d092018-04-07 15:32:37135 width: '12em',
136 weight: 1,
137 align: DataGrid.DataGrid.Align.Right,
138 sortable: true
139 }
140 ]);
Tim van der Lippe0efccf02020-02-12 15:15:39141 const dataGrid = new DataGrid.DataGrid.DataGridImpl({
Michael Liao18769f22019-12-12 19:01:25142 displayName: ls`Service Worker Cache`,
143 columns,
144 deleteCallback: this._deleteButtonClicked.bind(this),
Tim van der Lippeb842a762020-10-15 13:12:33145 refreshCallback: this._updateData.bind(this, true),
146 editCallback: undefined,
Michael Liao18769f22019-12-12 19:01:25147 });
Blink Reformat4c46d092018-04-07 15:32:37148
149 dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, this._sortingChanged, this);
150
Tim van der Lippe37a35ff2020-03-03 13:49:02151 dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode, event => {
152 this._previewCachedResponse(event.data.data);
153 }, this);
Blink Reformat4c46d092018-04-07 15:32:37154 dataGrid.setStriped(true);
155 return dataGrid;
156 }
157
158 _sortingChanged() {
Tim van der Lippe1d6e57a2019-09-30 11:55:34159 if (!this._dataGrid) {
Blink Reformat4c46d092018-04-07 15:32:37160 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34161 }
Blink Reformat4c46d092018-04-07 15:32:37162
Tim van der Lippeb842a762020-10-15 13:12:33163 const dataGrid = this._dataGrid;
164
165 const accending = dataGrid.isSortOrderAscending();
166 const columnId = dataGrid.sortColumnId();
167 /** @type {function(!DataGridNode, !DataGridNode): number} */
Blink Reformat4c46d092018-04-07 15:32:37168 let comparator;
Tim van der Lippe1d6e57a2019-09-30 11:55:34169 if (columnId === 'name') {
Jan Scheffler059ec112019-09-05 16:54:51170 comparator = (a, b) => a._name.localeCompare(b._name);
Tim van der Lippe1d6e57a2019-09-30 11:55:34171 } else if (columnId === 'contentType') {
Blink Reformat4c46d092018-04-07 15:32:37172 comparator = (a, b) => a.data.mimeType.localeCompare(b.data.mimeType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34173 } else if (columnId === 'contentLength') {
Blink Reformat4c46d092018-04-07 15:32:37174 comparator = (a, b) => a.data.resourceSize - b.data.resourceSize;
Tim van der Lippe1d6e57a2019-09-30 11:55:34175 } else if (columnId === 'responseTime') {
Blink Reformat4c46d092018-04-07 15:32:37176 comparator = (a, b) => a.data.endTime - b.data.endTime;
Tim van der Lippe1d6e57a2019-09-30 11:55:34177 } else if (columnId === 'responseType') {
Jan Scheffler17b984e2019-09-05 13:40:56178 comparator = (a, b) => a._responseType.localeCompare(b._responseType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34179 }
Blink Reformat4c46d092018-04-07 15:32:37180
Tim van der Lippeb842a762020-10-15 13:12:33181 const children = dataGrid.rootNode().children.slice();
182 dataGrid.rootNode().removeChildren();
Blink Reformat4c46d092018-04-07 15:32:37183 children.sort((a, b) => {
Andres Olivares21ab05b2020-10-21 14:00:02184 const result = comparator(/** @type {!DataGridNode} */ (a), /** @type {!DataGridNode} */ (b));
Blink Reformat4c46d092018-04-07 15:32:37185 return accending ? result : -result;
186 });
Tim van der Lippeb842a762020-10-15 13:12:33187 children.forEach(child => dataGrid.rootNode().appendChild(child));
Blink Reformat4c46d092018-04-07 15:32:37188 }
189
190 /**
Tim van der Lippeb842a762020-10-15 13:12:33191 * @param {?DataGrid.DataGrid.DataGridNode<!DataGridNode>} node
Blink Reformat4c46d092018-04-07 15:32:37192 */
193 async _deleteButtonClicked(node) {
194 if (!node) {
195 node = this._dataGrid && this._dataGrid.selectedNode;
Tim van der Lippe1d6e57a2019-09-30 11:55:34196 if (!node) {
Blink Reformat4c46d092018-04-07 15:32:37197 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34198 }
Blink Reformat4c46d092018-04-07 15:32:37199 }
200 await this._model.deleteCacheEntry(this._cache, /** @type {string} */ (node.data.url()));
201 node.remove();
202 }
203
204 /**
205 * @param {!SDK.ServiceWorkerCacheModel.Cache} cache
206 */
207 update(cache) {
208 this._cache = cache;
Harley Li574c7202018-12-03 19:55:54209 this._resetDataGrid();
Blink Reformat4c46d092018-04-07 15:32:37210 this._updateData(true);
211 }
212
Harley Li2ba8ce72019-03-26 21:17:21213 _updateSummaryBar() {
Tim van der Lippe1d6e57a2019-09-30 11:55:34214 if (!this._summaryBarElement) {
Harley Li2ba8ce72019-03-26 21:17:21215 this._summaryBarElement = this.element.createChild('div', 'cache-storage-summary-bar');
Tim van der Lippe1d6e57a2019-09-30 11:55:34216 }
Harley Li2ba8ce72019-03-26 21:17:21217 this._summaryBarElement.removeChildren();
218
219 const span = this._summaryBarElement.createChild('span');
Tim van der Lippe1d6e57a2019-09-30 11:55:34220 if (this._entryPathFilter) {
Harley Li2ba8ce72019-03-26 21:17:21221 span.textContent = ls`Matching entries: ${this._returnCount}`;
Tim van der Lippe1d6e57a2019-09-30 11:55:34222 } else {
Harley Li2ba8ce72019-03-26 21:17:21223 span.textContent = ls`Total entries: ${this._returnCount}`;
Tim van der Lippe1d6e57a2019-09-30 11:55:34224 }
Harley Li2ba8ce72019-03-26 21:17:21225 }
226
Blink Reformat4c46d092018-04-07 15:32:37227 /**
228 * @param {number} skipCount
229 * @param {!Array<!Protocol.CacheStorage.DataEntry>} entries
Harley Li2ba8ce72019-03-26 21:17:21230 * @param {number} returnCount
Tim van der Lippe097cdec2020-01-06 14:44:17231 * @this {ServiceWorkerCacheView}
Blink Reformat4c46d092018-04-07 15:32:37232 */
Harley Li2ba8ce72019-03-26 21:17:21233 _updateDataCallback(skipCount, entries, returnCount) {
Tim van der Lippeb842a762020-10-15 13:12:33234 if (!this._dataGrid) {
235 return;
236 }
Blink Reformat4c46d092018-04-07 15:32:37237 const selected = this._dataGrid.selectedNode && this._dataGrid.selectedNode.data.url();
238 this._refreshButton.setEnabled(true);
239 this._entriesForTest = entries;
Harley Li2ba8ce72019-03-26 21:17:21240 this._returnCount = returnCount;
241 this._updateSummaryBar();
Blink Reformat4c46d092018-04-07 15:32:37242
Tim van der Lippeb842a762020-10-15 13:12:33243 /** @type {!Map<string, !DataGridNode>} */
Blink Reformat4c46d092018-04-07 15:32:37244 const oldEntries = new Map();
245 const rootNode = this._dataGrid.rootNode();
Tim van der Lippe1d6e57a2019-09-30 11:55:34246 for (const node of rootNode.children) {
Andres Olivares21ab05b2020-10-21 14:00:02247 oldEntries.set(node.data.url, /** @type {!DataGridNode} */ (node));
Tim van der Lippe1d6e57a2019-09-30 11:55:34248 }
Blink Reformat4c46d092018-04-07 15:32:37249 rootNode.removeChildren();
250 let selectedNode = null;
Harley Li2ba8ce72019-03-26 21:17:21251 for (let i = 0; i < entries.length; ++i) {
252 const entry = entries[i];
Blink Reformat4c46d092018-04-07 15:32:37253 let node = oldEntries.get(entry.requestURL);
254 if (!node || node.data.responseTime !== entry.responseTime) {
Tim van der Lippe097cdec2020-01-06 14:44:17255 node = new DataGridNode(i, this._createRequest(entry), entry.responseType);
Blink Reformat4c46d092018-04-07 15:32:37256 node.selectable = true;
Harley Li2ba8ce72019-03-26 21:17:21257 } else {
Jan Schefflerf46e2032019-11-05 14:53:34258 node.data.number = i;
Blink Reformat4c46d092018-04-07 15:32:37259 }
260 rootNode.appendChild(node);
Tim van der Lippe1d6e57a2019-09-30 11:55:34261 if (entry.requestURL === selected) {
Blink Reformat4c46d092018-04-07 15:32:37262 selectedNode = node;
Tim van der Lippe1d6e57a2019-09-30 11:55:34263 }
Blink Reformat4c46d092018-04-07 15:32:37264 }
Tim van der Lippe1d6e57a2019-09-30 11:55:34265 if (!selectedNode) {
Blink Reformat4c46d092018-04-07 15:32:37266 this._showPreview(null);
Tim van der Lippe1d6e57a2019-09-30 11:55:34267 } else {
Blink Reformat4c46d092018-04-07 15:32:37268 selectedNode.revealAndSelect();
Tim van der Lippe1d6e57a2019-09-30 11:55:34269 }
Blink Reformat4c46d092018-04-07 15:32:37270 this._updatedForTest();
271 }
272
273 /**
274 * @param {boolean} force
275 */
Jan Schefflerf46e2032019-11-05 14:53:34276 async _updateData(force) {
277 if (!force && this._loadingPromise) {
278 return this._loadingPromise;
Tim van der Lippe1d6e57a2019-09-30 11:55:34279 }
Blink Reformat4c46d092018-04-07 15:32:37280 this._refreshButton.setEnabled(false);
Harley Li574c7202018-12-03 19:55:54281
Jan Schefflerf46e2032019-11-05 14:53:34282 if (this._loadingPromise) {
283 return this._loadingPromise;
284 }
285
286 this._loadingPromise = new Promise(resolve => {
287 this._model.loadAllCacheData(this._cache, this._entryPathFilter, (entries, returnCount) => {
Tim van der Lippeb842a762020-10-15 13:12:33288 resolve({entries, returnCount});
Harley Li574c7202018-12-03 19:55:54289 });
290 });
Jan Schefflerf46e2032019-11-05 14:53:34291
Tim van der Lippeb842a762020-10-15 13:12:33292 const {entries, returnCount} = await this._loadingPromise;
Jan Schefflerf46e2032019-11-05 14:53:34293 this._updateDataCallback(0, entries, returnCount);
294 this._loadingPromise = null;
Tim van der Lippeb842a762020-10-15 13:12:33295 return;
Blink Reformat4c46d092018-04-07 15:32:37296 }
297
298 /**
Tim van der Lippec02a97c2020-02-14 14:39:27299 * @param {!Common.EventTarget.EventTargetEvent} event
Blink Reformat4c46d092018-04-07 15:32:37300 */
301 _refreshButtonClicked(event) {
302 this._updateData(true);
303 }
304
305 /**
Tim van der Lippec02a97c2020-02-14 14:39:27306 * @param {!Common.EventTarget.EventTargetEvent} event
Blink Reformat4c46d092018-04-07 15:32:37307 */
308 _cacheContentUpdated(event) {
309 const nameAndOrigin = event.data;
Tim van der Lippe1d6e57a2019-09-30 11:55:34310 if (this._cache.securityOrigin !== nameAndOrigin.origin || this._cache.cacheName !== nameAndOrigin.cacheName) {
Blink Reformat4c46d092018-04-07 15:32:37311 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34312 }
Blink Reformat4c46d092018-04-07 15:32:37313 this._refreshThrottler.schedule(() => Promise.resolve(this._updateData(true)), true);
314 }
315
316 /**
Tim van der Lippe0efccf02020-02-12 15:15:39317 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37318 */
319 async _previewCachedResponse(request) {
Tim van der Lippeb842a762020-10-15 13:12:33320 let preview = networkRequestToPreview.get(request);
Blink Reformat4c46d092018-04-07 15:32:37321 if (!preview) {
Tim van der Lippe097cdec2020-01-06 14:44:17322 preview = new RequestView(request);
Tim van der Lippeb842a762020-10-15 13:12:33323 networkRequestToPreview.set(request, preview);
Blink Reformat4c46d092018-04-07 15:32:37324 }
325
326 // It is possible that table selection changes before the preview opens.
Tim van der Lippeb842a762020-10-15 13:12:33327 if (this._dataGrid && this._dataGrid.selectedNode && request === this._dataGrid.selectedNode.data) {
Blink Reformat4c46d092018-04-07 15:32:37328 this._showPreview(preview);
Tim van der Lippe1d6e57a2019-09-30 11:55:34329 }
Blink Reformat4c46d092018-04-07 15:32:37330 }
331
332 /**
333 * @param {!Protocol.CacheStorage.DataEntry} entry
Tim van der Lippe0efccf02020-02-12 15:15:39334 * @return {!SDK.NetworkRequest.NetworkRequest}
Blink Reformat4c46d092018-04-07 15:32:37335 */
336 _createRequest(entry) {
Tim van der Lippe0efccf02020-02-12 15:15:39337 const request =
338 new SDK.NetworkRequest.NetworkRequest('cache-storage-' + entry.requestURL, entry.requestURL, '', '', '', null);
Blink Reformat4c46d092018-04-07 15:32:37339 request.requestMethod = entry.requestMethod;
340 request.setRequestHeaders(entry.requestHeaders);
341 request.statusCode = entry.responseStatus;
342 request.statusText = entry.responseStatusText;
Tim van der Lippe0efccf02020-02-12 15:15:39343 request.protocol = new Common.ParsedURL.ParsedURL(entry.requestURL).scheme;
Blink Reformat4c46d092018-04-07 15:32:37344 request.responseHeaders = entry.responseHeaders;
345 request.setRequestHeadersText('');
346 request.endTime = entry.responseTime;
347
348 let header = entry.responseHeaders.find(header => header.name.toLowerCase() === 'content-type');
Tim van der Lippeaa800782020-05-01 11:33:11349 const contentType = header ? header.value : SDK.NetworkRequest.MIME_TYPE.PLAIN;
350 request.mimeType = /** @type {!SDK.NetworkRequest.MIME_TYPE} */ (contentType);
Blink Reformat4c46d092018-04-07 15:32:37351
352 header = entry.responseHeaders.find(header => header.name.toLowerCase() === 'content-length');
Tim van der Lippeb842a762020-10-15 13:12:33353 request.resourceSize = (header && Number(header.value)) || 0;
Blink Reformat4c46d092018-04-07 15:32:37354
Tim van der Lippe0efccf02020-02-12 15:15:39355 let resourceType = Common.ResourceType.ResourceType.fromMimeType(contentType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34356 if (!resourceType) {
Tim van der Lippe0efccf02020-02-12 15:15:39357 resourceType =
358 Common.ResourceType.ResourceType.fromURL(entry.requestURL) || Common.ResourceType.resourceTypes.Other;
Tim van der Lippe1d6e57a2019-09-30 11:55:34359 }
Blink Reformat4c46d092018-04-07 15:32:37360 request.setResourceType(resourceType);
361 request.setContentDataProvider(this._requestContent.bind(this, request));
362 return request;
363 }
364
365 /**
Tim van der Lippe0efccf02020-02-12 15:15:39366 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37367 * @return {!Promise<!SDK.NetworkRequest.ContentData>}
368 */
369 async _requestContent(request) {
370 const isText = request.resourceType().isTextType();
Tim van der Lippeb842a762020-10-15 13:12:33371 /** @type {!SDK.NetworkRequest.ContentData} */
Blink Reformat4c46d092018-04-07 15:32:37372 const contentData = {error: null, content: null, encoded: !isText};
Harley Li915e7e42019-02-07 17:53:55373 const response = await this._cache.requestCachedResponse(request.url(), request.requestHeaders());
Tim van der Lippe1d6e57a2019-09-30 11:55:34374 if (response) {
Blink Reformat4c46d092018-04-07 15:32:37375 contentData.content = isText ? window.atob(response.body) : response.body;
Tim van der Lippe1d6e57a2019-09-30 11:55:34376 }
Blink Reformat4c46d092018-04-07 15:32:37377 return contentData;
378 }
379
380 _updatedForTest() {
381 }
Tim van der Lippe097cdec2020-01-06 14:44:17382}
Blink Reformat4c46d092018-04-07 15:32:37383
Tim van der Lippeb842a762020-10-15 13:12:33384/** @type {!WeakMap<!SDK.NetworkRequest.NetworkRequest, !RequestView>} */
385const networkRequestToPreview = new WeakMap();
386
Tim van der Lippe097cdec2020-01-06 14:44:17387ServiceWorkerCacheView._previewSymbol = Symbol('preview');
Blink Reformat4c46d092018-04-07 15:32:37388
Tim van der Lippeb842a762020-10-15 13:12:33389/**
390 * @extends {DataGrid.DataGrid.DataGridNode<!DataGridNode>}
391 */
Tim van der Lippe0efccf02020-02-12 15:15:39392export class DataGridNode extends DataGrid.DataGrid.DataGridNode {
Blink Reformat4c46d092018-04-07 15:32:37393 /**
Harley Li2ba8ce72019-03-26 21:17:21394 * @param {number} number
Tim van der Lippe0efccf02020-02-12 15:15:39395 * @param {!SDK.NetworkRequest.NetworkRequest} request
Harley Li044c7ac2018-10-26 15:14:20396 * @param {!Protocol.CacheStorage.CachedResponseType} responseType
Blink Reformat4c46d092018-04-07 15:32:37397 */
Harley Li2ba8ce72019-03-26 21:17:21398 constructor(number, request, responseType) {
Blink Reformat4c46d092018-04-07 15:32:37399 super(request);
Harley Li2ba8ce72019-03-26 21:17:21400 this._number = number;
Tim van der Lippe0efccf02020-02-12 15:15:39401 const parsed = new Common.ParsedURL.ParsedURL(request.url());
Tim van der Lippe1d6e57a2019-09-30 11:55:34402 if (parsed.isValid) {
Simon Zünd055385d2020-03-02 09:54:44403 this._name = Platform.StringUtilities.trimURL(request.url(), parsed.domain());
Tim van der Lippe1d6e57a2019-09-30 11:55:34404 } else {
Harley Li7e328932019-04-18 18:41:01405 this._name = request.url();
Tim van der Lippe1d6e57a2019-09-30 11:55:34406 }
Blink Reformat4c46d092018-04-07 15:32:37407 this._request = request;
Harley Li044c7ac2018-10-26 15:14:20408 this._responseType = responseType;
Blink Reformat4c46d092018-04-07 15:32:37409 }
410
411 /**
412 * @override
413 * @param {string} columnId
Sigurd Schneider11657912020-06-30 13:26:52414 * @return {!HTMLElement}
Blink Reformat4c46d092018-04-07 15:32:37415 */
416 createCell(columnId) {
417 const cell = this.createTD(columnId);
418 let value;
Harley Li2ba8ce72019-03-26 21:17:21419 if (columnId === 'number') {
420 value = String(this._number);
Harley Li7e328932019-04-18 18:41:01421 } else if (columnId === 'name') {
422 value = this._name;
Harley Li044c7ac2018-10-26 15:14:20423 } else if (columnId === 'responseType') {
Tim van der Lippe1d6e57a2019-09-30 11:55:34424 if (this._responseType === 'opaqueResponse') {
Harley Li6b1c2da2018-11-29 23:19:30425 value = 'opaque';
Tim van der Lippe1d6e57a2019-09-30 11:55:34426 } else if (this._responseType === 'opaqueRedirect') {
Harley Li044c7ac2018-10-26 15:14:20427 value = 'opaqueredirect';
Tim van der Lippe1d6e57a2019-09-30 11:55:34428 } else {
Harley Li044c7ac2018-10-26 15:14:20429 value = this._responseType;
Tim van der Lippe1d6e57a2019-09-30 11:55:34430 }
Harley Li044c7ac2018-10-26 15:14:20431 } else if (columnId === 'contentType') {
Blink Reformat4c46d092018-04-07 15:32:37432 value = this._request.mimeType;
Harley Li044c7ac2018-10-26 15:14:20433 } else if (columnId === 'contentLength') {
Blink Reformat4c46d092018-04-07 15:32:37434 value = (this._request.resourceSize | 0).toLocaleString('en-US');
Harley Li044c7ac2018-10-26 15:14:20435 } else if (columnId === 'responseTime') {
Blink Reformat4c46d092018-04-07 15:32:37436 value = new Date(this._request.endTime * 1000).toLocaleString();
Harley Li044c7ac2018-10-26 15:14:20437 }
Tim van der Lippe0efccf02020-02-12 15:15:39438 DataGrid.DataGrid.DataGridImpl.setElementText(cell, value || '', true);
Harley Li7e328932019-04-18 18:41:01439 cell.title = this._request.url();
Blink Reformat4c46d092018-04-07 15:32:37440 return cell;
441 }
Tim van der Lippe097cdec2020-01-06 14:44:17442}
Blink Reformat4c46d092018-04-07 15:32:37443
Tim van der Lippe0efccf02020-02-12 15:15:39444export class RequestView extends UI.Widget.VBox {
Blink Reformat4c46d092018-04-07 15:32:37445 /**
Tim van der Lippe0efccf02020-02-12 15:15:39446 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37447 */
448 constructor(request) {
449 super();
450
Tim van der Lippe0efccf02020-02-12 15:15:39451 this._tabbedPane = new UI.TabbedPane.TabbedPane();
Blink Reformat4c46d092018-04-07 15:32:37452 this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected, this._tabSelected, this);
Paul Lewis2d7d65c2020-03-16 17:26:30453 this._resourceViewTabSetting = Common.Settings.Settings.instance().createSetting('cacheStorageViewTab', 'preview');
Blink Reformat4c46d092018-04-07 15:32:37454
Tim van der Lippe0efccf02020-02-12 15:15:39455 this._tabbedPane.appendTab(
456 'headers', Common.UIString.UIString('Headers'), new Network.RequestHeadersView.RequestHeadersView(request));
457 this._tabbedPane.appendTab(
458 'preview', Common.UIString.UIString('Preview'), new Network.RequestPreviewView.RequestPreviewView(request));
Blink Reformat4c46d092018-04-07 15:32:37459 this._tabbedPane.show(this.element);
460 }
461
462 /**
463 * @override
464 */
465 wasShown() {
466 super.wasShown();
467 this._selectTab();
468 }
469
470 /**
471 * @param {string=} tabId
472 */
473 _selectTab(tabId) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34474 if (!tabId) {
Blink Reformat4c46d092018-04-07 15:32:37475 tabId = this._resourceViewTabSetting.get();
Tim van der Lippe1d6e57a2019-09-30 11:55:34476 }
Tim van der Lippeb842a762020-10-15 13:12:33477 if (tabId && !this._tabbedPane.selectTab(tabId)) {
Blink Reformat4c46d092018-04-07 15:32:37478 this._tabbedPane.selectTab('headers');
Tim van der Lippe1d6e57a2019-09-30 11:55:34479 }
Blink Reformat4c46d092018-04-07 15:32:37480 }
481
Tim van der Lippeb842a762020-10-15 13:12:33482 /**
483 * @param {!Common.EventTarget.EventTargetEvent} event
484 */
Blink Reformat4c46d092018-04-07 15:32:37485 _tabSelected(event) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34486 if (!event.data.isUserGesture) {
Blink Reformat4c46d092018-04-07 15:32:37487 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34488 }
Blink Reformat4c46d092018-04-07 15:32:37489 this._resourceViewTabSetting.set(event.data.tabId);
490 }
Tim van der Lippe097cdec2020-01-06 14:44:17491}