blob: a15765b476c36e25c0a6410f7f9cf4d1945fa9f9 [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'));
Blink Reformat4c46d092018-04-07 15:32:3719 this.registerRequiredCSS('resources/serviceWorkerCacheViews.css');
20
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 Lippe0efccf02020-02-12 15:15:3940 /** @type {?DataGrid.DataGrid.DataGridImpl} */
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);
Jan Schefflerf46e2032019-11-05 14:53:3467 this._loadingPromise = /** @type {?Promise} */ (null);
Blink Reformat4c46d092018-04-07 15:32:3768
69 this.update(cache);
70 }
71
Harley Li574c7202018-12-03 19:55:5472 _resetDataGrid() {
Tim van der Lippe1d6e57a2019-09-30 11:55:3473 if (this._dataGrid) {
Harley Li574c7202018-12-03 19:55:5474 this._dataGrid.asWidget().detach();
Tim van der Lippe1d6e57a2019-09-30 11:55:3475 }
Harley Li574c7202018-12-03 19:55:5476 this._dataGrid = this._createDataGrid();
Harley Li2ba8ce72019-03-26 21:17:2177 const dataGridWidget = this._dataGrid.asWidget();
78 this._splitWidget.setSidebarWidget(dataGridWidget);
79 dataGridWidget.setMinimumSize(0, 250);
Harley Li574c7202018-12-03 19:55:5480 }
81
Blink Reformat4c46d092018-04-07 15:32:3782 /**
83 * @override
84 */
85 wasShown() {
86 this._model.addEventListener(
87 SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this);
88 this._updateData(true);
89 }
90
91 /**
92 * @override
93 */
94 willHide() {
95 this._model.removeEventListener(
96 SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this);
97 }
98
99 /**
Tim van der Lippe0efccf02020-02-12 15:15:39100 * @param {?UI.Widget.Widget} preview
Blink Reformat4c46d092018-04-07 15:32:37101 */
102 _showPreview(preview) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34103 if (preview && this._preview === preview) {
Blink Reformat4c46d092018-04-07 15:32:37104 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34105 }
106 if (this._preview) {
Blink Reformat4c46d092018-04-07 15:32:37107 this._preview.detach();
Tim van der Lippe1d6e57a2019-09-30 11:55:34108 }
109 if (!preview) {
Tim van der Lippe0efccf02020-02-12 15:15:39110 preview = new UI.EmptyWidget.EmptyWidget(Common.UIString.UIString('Select a cache entry above to preview'));
Tim van der Lippe1d6e57a2019-09-30 11:55:34111 }
Blink Reformat4c46d092018-04-07 15:32:37112 this._preview = preview;
113 this._preview.show(this._previewPanel.element);
114 }
115
116 /**
Tim van der Lippe0efccf02020-02-12 15:15:39117 * @return {!DataGrid.DataGrid.DataGridImpl}
Blink Reformat4c46d092018-04-07 15:32:37118 */
119 _createDataGrid() {
Tim van der Lippe9a9aba82020-02-14 14:52:29120 const columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([
Harley Li2ba8ce72019-03-26 21:17:21121 {id: 'number', title: '#', sortable: false, width: '3px'},
Tim van der Lippe0efccf02020-02-12 15:15:39122 {id: 'name', title: Common.UIString.UIString('Name'), weight: 4, sortable: true},
Harley Li044c7ac2018-10-26 15:14:20123 {id: 'responseType', title: ls`Response-Type`, weight: 1, align: DataGrid.DataGrid.Align.Right, sortable: true},
Tim van der Lippe0efccf02020-02-12 15:15:39124 {id: 'contentType', title: Common.UIString.UIString('Content-Type'), weight: 1, sortable: true}, {
Blink Reformat4c46d092018-04-07 15:32:37125 id: 'contentLength',
Tim van der Lippe0efccf02020-02-12 15:15:39126 title: Common.UIString.UIString('Content-Length'),
Blink Reformat4c46d092018-04-07 15:32:37127 weight: 1,
128 align: DataGrid.DataGrid.Align.Right,
129 sortable: true
130 },
131 {
132 id: 'responseTime',
Tim van der Lippe0efccf02020-02-12 15:15:39133 title: Common.UIString.UIString('Time Cached'),
Blink Reformat4c46d092018-04-07 15:32:37134 width: '12em',
135 weight: 1,
136 align: DataGrid.DataGrid.Align.Right,
137 sortable: true
138 }
139 ]);
Tim van der Lippe0efccf02020-02-12 15:15:39140 const dataGrid = new DataGrid.DataGrid.DataGridImpl({
Michael Liao18769f22019-12-12 19:01:25141 displayName: ls`Service Worker Cache`,
142 columns,
143 deleteCallback: this._deleteButtonClicked.bind(this),
144 refreshCallback: this._updateData.bind(this, true)
145 });
Blink Reformat4c46d092018-04-07 15:32:37146
147 dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, this._sortingChanged, this);
148
Tim van der Lippe37a35ff2020-03-03 13:49:02149 dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode, event => {
150 this._previewCachedResponse(event.data.data);
151 }, this);
Blink Reformat4c46d092018-04-07 15:32:37152 dataGrid.setStriped(true);
153 return dataGrid;
154 }
155
156 _sortingChanged() {
Tim van der Lippe1d6e57a2019-09-30 11:55:34157 if (!this._dataGrid) {
Blink Reformat4c46d092018-04-07 15:32:37158 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34159 }
Blink Reformat4c46d092018-04-07 15:32:37160
161 const accending = this._dataGrid.isSortOrderAscending();
162 const columnId = this._dataGrid.sortColumnId();
163 let comparator;
Tim van der Lippe1d6e57a2019-09-30 11:55:34164 if (columnId === 'name') {
Jan Scheffler059ec112019-09-05 16:54:51165 comparator = (a, b) => a._name.localeCompare(b._name);
Tim van der Lippe1d6e57a2019-09-30 11:55:34166 } else if (columnId === 'contentType') {
Blink Reformat4c46d092018-04-07 15:32:37167 comparator = (a, b) => a.data.mimeType.localeCompare(b.data.mimeType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34168 } else if (columnId === 'contentLength') {
Blink Reformat4c46d092018-04-07 15:32:37169 comparator = (a, b) => a.data.resourceSize - b.data.resourceSize;
Tim van der Lippe1d6e57a2019-09-30 11:55:34170 } else if (columnId === 'responseTime') {
Blink Reformat4c46d092018-04-07 15:32:37171 comparator = (a, b) => a.data.endTime - b.data.endTime;
Tim van der Lippe1d6e57a2019-09-30 11:55:34172 } else if (columnId === 'responseType') {
Jan Scheffler17b984e2019-09-05 13:40:56173 comparator = (a, b) => a._responseType.localeCompare(b._responseType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34174 }
Blink Reformat4c46d092018-04-07 15:32:37175
176 const children = this._dataGrid.rootNode().children.slice();
177 this._dataGrid.rootNode().removeChildren();
178 children.sort((a, b) => {
179 const result = comparator(a, b);
180 return accending ? result : -result;
181 });
182 children.forEach(child => this._dataGrid.rootNode().appendChild(child));
183 }
184
185 /**
Tim van der Lippe0efccf02020-02-12 15:15:39186 * @param {?DataGrid.DataGrid.DataGridNode} node
Blink Reformat4c46d092018-04-07 15:32:37187 */
188 async _deleteButtonClicked(node) {
189 if (!node) {
190 node = this._dataGrid && this._dataGrid.selectedNode;
Tim van der Lippe1d6e57a2019-09-30 11:55:34191 if (!node) {
Blink Reformat4c46d092018-04-07 15:32:37192 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34193 }
Blink Reformat4c46d092018-04-07 15:32:37194 }
195 await this._model.deleteCacheEntry(this._cache, /** @type {string} */ (node.data.url()));
196 node.remove();
197 }
198
199 /**
200 * @param {!SDK.ServiceWorkerCacheModel.Cache} cache
201 */
202 update(cache) {
203 this._cache = cache;
Harley Li574c7202018-12-03 19:55:54204 this._resetDataGrid();
Blink Reformat4c46d092018-04-07 15:32:37205 this._updateData(true);
206 }
207
Harley Li2ba8ce72019-03-26 21:17:21208 _updateSummaryBar() {
Tim van der Lippe1d6e57a2019-09-30 11:55:34209 if (!this._summaryBarElement) {
Harley Li2ba8ce72019-03-26 21:17:21210 this._summaryBarElement = this.element.createChild('div', 'cache-storage-summary-bar');
Tim van der Lippe1d6e57a2019-09-30 11:55:34211 }
Harley Li2ba8ce72019-03-26 21:17:21212 this._summaryBarElement.removeChildren();
213
214 const span = this._summaryBarElement.createChild('span');
Tim van der Lippe1d6e57a2019-09-30 11:55:34215 if (this._entryPathFilter) {
Harley Li2ba8ce72019-03-26 21:17:21216 span.textContent = ls`Matching entries: ${this._returnCount}`;
Tim van der Lippe1d6e57a2019-09-30 11:55:34217 } else {
Harley Li2ba8ce72019-03-26 21:17:21218 span.textContent = ls`Total entries: ${this._returnCount}`;
Tim van der Lippe1d6e57a2019-09-30 11:55:34219 }
Harley Li2ba8ce72019-03-26 21:17:21220 }
221
Blink Reformat4c46d092018-04-07 15:32:37222 /**
223 * @param {number} skipCount
224 * @param {!Array<!Protocol.CacheStorage.DataEntry>} entries
Harley Li2ba8ce72019-03-26 21:17:21225 * @param {number} returnCount
Tim van der Lippe097cdec2020-01-06 14:44:17226 * @this {ServiceWorkerCacheView}
Blink Reformat4c46d092018-04-07 15:32:37227 */
Harley Li2ba8ce72019-03-26 21:17:21228 _updateDataCallback(skipCount, entries, returnCount) {
Blink Reformat4c46d092018-04-07 15:32:37229 const selected = this._dataGrid.selectedNode && this._dataGrid.selectedNode.data.url();
230 this._refreshButton.setEnabled(true);
231 this._entriesForTest = entries;
Harley Li2ba8ce72019-03-26 21:17:21232 this._returnCount = returnCount;
233 this._updateSummaryBar();
Blink Reformat4c46d092018-04-07 15:32:37234
Tim van der Lippe0efccf02020-02-12 15:15:39235 /** @type {!Map<string, !DataGrid.DataGrid.DataGridNode>} */
Blink Reformat4c46d092018-04-07 15:32:37236 const oldEntries = new Map();
237 const rootNode = this._dataGrid.rootNode();
Tim van der Lippe1d6e57a2019-09-30 11:55:34238 for (const node of rootNode.children) {
Blink Reformat4c46d092018-04-07 15:32:37239 oldEntries.set(node.data.url, node);
Tim van der Lippe1d6e57a2019-09-30 11:55:34240 }
Blink Reformat4c46d092018-04-07 15:32:37241 rootNode.removeChildren();
242 let selectedNode = null;
Harley Li2ba8ce72019-03-26 21:17:21243 for (let i = 0; i < entries.length; ++i) {
244 const entry = entries[i];
Blink Reformat4c46d092018-04-07 15:32:37245 let node = oldEntries.get(entry.requestURL);
246 if (!node || node.data.responseTime !== entry.responseTime) {
Tim van der Lippe097cdec2020-01-06 14:44:17247 node = new DataGridNode(i, this._createRequest(entry), entry.responseType);
Blink Reformat4c46d092018-04-07 15:32:37248 node.selectable = true;
Harley Li2ba8ce72019-03-26 21:17:21249 } else {
Jan Schefflerf46e2032019-11-05 14:53:34250 node.data.number = i;
Blink Reformat4c46d092018-04-07 15:32:37251 }
252 rootNode.appendChild(node);
Tim van der Lippe1d6e57a2019-09-30 11:55:34253 if (entry.requestURL === selected) {
Blink Reformat4c46d092018-04-07 15:32:37254 selectedNode = node;
Tim van der Lippe1d6e57a2019-09-30 11:55:34255 }
Blink Reformat4c46d092018-04-07 15:32:37256 }
Tim van der Lippe1d6e57a2019-09-30 11:55:34257 if (!selectedNode) {
Blink Reformat4c46d092018-04-07 15:32:37258 this._showPreview(null);
Tim van der Lippe1d6e57a2019-09-30 11:55:34259 } else {
Blink Reformat4c46d092018-04-07 15:32:37260 selectedNode.revealAndSelect();
Tim van der Lippe1d6e57a2019-09-30 11:55:34261 }
Blink Reformat4c46d092018-04-07 15:32:37262 this._updatedForTest();
263 }
264
265 /**
266 * @param {boolean} force
267 */
Jan Schefflerf46e2032019-11-05 14:53:34268 async _updateData(force) {
269 if (!force && this._loadingPromise) {
270 return this._loadingPromise;
Tim van der Lippe1d6e57a2019-09-30 11:55:34271 }
Blink Reformat4c46d092018-04-07 15:32:37272 this._refreshButton.setEnabled(false);
Harley Li574c7202018-12-03 19:55:54273
Jan Schefflerf46e2032019-11-05 14:53:34274 if (this._loadingPromise) {
275 return this._loadingPromise;
276 }
277
278 this._loadingPromise = new Promise(resolve => {
279 this._model.loadAllCacheData(this._cache, this._entryPathFilter, (entries, returnCount) => {
280 resolve([entries, returnCount]);
Harley Li574c7202018-12-03 19:55:54281 });
282 });
Jan Schefflerf46e2032019-11-05 14:53:34283
284 const [entries, returnCount] = await this._loadingPromise;
285 this._updateDataCallback(0, entries, returnCount);
286 this._loadingPromise = null;
Blink Reformat4c46d092018-04-07 15:32:37287 }
288
289 /**
Tim van der Lippec02a97c2020-02-14 14:39:27290 * @param {!Common.EventTarget.EventTargetEvent} event
Blink Reformat4c46d092018-04-07 15:32:37291 */
292 _refreshButtonClicked(event) {
293 this._updateData(true);
294 }
295
296 /**
Tim van der Lippec02a97c2020-02-14 14:39:27297 * @param {!Common.EventTarget.EventTargetEvent} event
Blink Reformat4c46d092018-04-07 15:32:37298 */
299 _cacheContentUpdated(event) {
300 const nameAndOrigin = event.data;
Tim van der Lippe1d6e57a2019-09-30 11:55:34301 if (this._cache.securityOrigin !== nameAndOrigin.origin || this._cache.cacheName !== nameAndOrigin.cacheName) {
Blink Reformat4c46d092018-04-07 15:32:37302 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34303 }
Blink Reformat4c46d092018-04-07 15:32:37304 this._refreshThrottler.schedule(() => Promise.resolve(this._updateData(true)), true);
305 }
306
307 /**
Tim van der Lippe0efccf02020-02-12 15:15:39308 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37309 */
310 async _previewCachedResponse(request) {
Tim van der Lippe097cdec2020-01-06 14:44:17311 let preview = request[ServiceWorkerCacheView._previewSymbol];
Blink Reformat4c46d092018-04-07 15:32:37312 if (!preview) {
Tim van der Lippe097cdec2020-01-06 14:44:17313 preview = new RequestView(request);
314 request[ServiceWorkerCacheView._previewSymbol] = preview;
Blink Reformat4c46d092018-04-07 15:32:37315 }
316
317 // It is possible that table selection changes before the preview opens.
Tim van der Lippe1d6e57a2019-09-30 11:55:34318 if (request === this._dataGrid.selectedNode.data) {
Blink Reformat4c46d092018-04-07 15:32:37319 this._showPreview(preview);
Tim van der Lippe1d6e57a2019-09-30 11:55:34320 }
Blink Reformat4c46d092018-04-07 15:32:37321 }
322
323 /**
324 * @param {!Protocol.CacheStorage.DataEntry} entry
Tim van der Lippe0efccf02020-02-12 15:15:39325 * @return {!SDK.NetworkRequest.NetworkRequest}
Blink Reformat4c46d092018-04-07 15:32:37326 */
327 _createRequest(entry) {
Tim van der Lippe0efccf02020-02-12 15:15:39328 const request =
329 new SDK.NetworkRequest.NetworkRequest('cache-storage-' + entry.requestURL, entry.requestURL, '', '', '', null);
Blink Reformat4c46d092018-04-07 15:32:37330 request.requestMethod = entry.requestMethod;
331 request.setRequestHeaders(entry.requestHeaders);
332 request.statusCode = entry.responseStatus;
333 request.statusText = entry.responseStatusText;
Tim van der Lippe0efccf02020-02-12 15:15:39334 request.protocol = new Common.ParsedURL.ParsedURL(entry.requestURL).scheme;
Blink Reformat4c46d092018-04-07 15:32:37335 request.responseHeaders = entry.responseHeaders;
336 request.setRequestHeadersText('');
337 request.endTime = entry.responseTime;
338
339 let header = entry.responseHeaders.find(header => header.name.toLowerCase() === 'content-type');
340 const contentType = header ? header.value : 'text/plain';
341 request.mimeType = contentType;
342
343 header = entry.responseHeaders.find(header => header.name.toLowerCase() === 'content-length');
344 request.resourceSize = (header && header.value) | 0;
345
Tim van der Lippe0efccf02020-02-12 15:15:39346 let resourceType = Common.ResourceType.ResourceType.fromMimeType(contentType);
Tim van der Lippe1d6e57a2019-09-30 11:55:34347 if (!resourceType) {
Tim van der Lippe0efccf02020-02-12 15:15:39348 resourceType =
349 Common.ResourceType.ResourceType.fromURL(entry.requestURL) || Common.ResourceType.resourceTypes.Other;
Tim van der Lippe1d6e57a2019-09-30 11:55:34350 }
Blink Reformat4c46d092018-04-07 15:32:37351 request.setResourceType(resourceType);
352 request.setContentDataProvider(this._requestContent.bind(this, request));
353 return request;
354 }
355
356 /**
Tim van der Lippe0efccf02020-02-12 15:15:39357 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37358 * @return {!Promise<!SDK.NetworkRequest.ContentData>}
359 */
360 async _requestContent(request) {
361 const isText = request.resourceType().isTextType();
362 const contentData = {error: null, content: null, encoded: !isText};
Harley Li915e7e42019-02-07 17:53:55363 const response = await this._cache.requestCachedResponse(request.url(), request.requestHeaders());
Tim van der Lippe1d6e57a2019-09-30 11:55:34364 if (response) {
Blink Reformat4c46d092018-04-07 15:32:37365 contentData.content = isText ? window.atob(response.body) : response.body;
Tim van der Lippe1d6e57a2019-09-30 11:55:34366 }
Blink Reformat4c46d092018-04-07 15:32:37367 return contentData;
368 }
369
370 _updatedForTest() {
371 }
Tim van der Lippe097cdec2020-01-06 14:44:17372}
Blink Reformat4c46d092018-04-07 15:32:37373
Tim van der Lippe097cdec2020-01-06 14:44:17374ServiceWorkerCacheView._previewSymbol = Symbol('preview');
Blink Reformat4c46d092018-04-07 15:32:37375
Tim van der Lippe0efccf02020-02-12 15:15:39376export class DataGridNode extends DataGrid.DataGrid.DataGridNode {
Blink Reformat4c46d092018-04-07 15:32:37377 /**
Harley Li2ba8ce72019-03-26 21:17:21378 * @param {number} number
Tim van der Lippe0efccf02020-02-12 15:15:39379 * @param {!SDK.NetworkRequest.NetworkRequest} request
Harley Li044c7ac2018-10-26 15:14:20380 * @param {!Protocol.CacheStorage.CachedResponseType} responseType
Blink Reformat4c46d092018-04-07 15:32:37381 */
Harley Li2ba8ce72019-03-26 21:17:21382 constructor(number, request, responseType) {
Blink Reformat4c46d092018-04-07 15:32:37383 super(request);
Harley Li2ba8ce72019-03-26 21:17:21384 this._number = number;
Tim van der Lippe0efccf02020-02-12 15:15:39385 const parsed = new Common.ParsedURL.ParsedURL(request.url());
Tim van der Lippe1d6e57a2019-09-30 11:55:34386 if (parsed.isValid) {
Simon Zünd055385d2020-03-02 09:54:44387 this._name = Platform.StringUtilities.trimURL(request.url(), parsed.domain());
Tim van der Lippe1d6e57a2019-09-30 11:55:34388 } else {
Harley Li7e328932019-04-18 18:41:01389 this._name = request.url();
Tim van der Lippe1d6e57a2019-09-30 11:55:34390 }
Blink Reformat4c46d092018-04-07 15:32:37391 this._request = request;
Harley Li044c7ac2018-10-26 15:14:20392 this._responseType = responseType;
Blink Reformat4c46d092018-04-07 15:32:37393 }
394
395 /**
396 * @override
397 * @param {string} columnId
398 * @return {!Element}
399 */
400 createCell(columnId) {
401 const cell = this.createTD(columnId);
402 let value;
Harley Li2ba8ce72019-03-26 21:17:21403 if (columnId === 'number') {
404 value = String(this._number);
Harley Li7e328932019-04-18 18:41:01405 } else if (columnId === 'name') {
406 value = this._name;
Harley Li044c7ac2018-10-26 15:14:20407 } else if (columnId === 'responseType') {
Tim van der Lippe1d6e57a2019-09-30 11:55:34408 if (this._responseType === 'opaqueResponse') {
Harley Li6b1c2da2018-11-29 23:19:30409 value = 'opaque';
Tim van der Lippe1d6e57a2019-09-30 11:55:34410 } else if (this._responseType === 'opaqueRedirect') {
Harley Li044c7ac2018-10-26 15:14:20411 value = 'opaqueredirect';
Tim van der Lippe1d6e57a2019-09-30 11:55:34412 } else {
Harley Li044c7ac2018-10-26 15:14:20413 value = this._responseType;
Tim van der Lippe1d6e57a2019-09-30 11:55:34414 }
Harley Li044c7ac2018-10-26 15:14:20415 } else if (columnId === 'contentType') {
Blink Reformat4c46d092018-04-07 15:32:37416 value = this._request.mimeType;
Harley Li044c7ac2018-10-26 15:14:20417 } else if (columnId === 'contentLength') {
Blink Reformat4c46d092018-04-07 15:32:37418 value = (this._request.resourceSize | 0).toLocaleString('en-US');
Harley Li044c7ac2018-10-26 15:14:20419 } else if (columnId === 'responseTime') {
Blink Reformat4c46d092018-04-07 15:32:37420 value = new Date(this._request.endTime * 1000).toLocaleString();
Harley Li044c7ac2018-10-26 15:14:20421 }
Tim van der Lippe0efccf02020-02-12 15:15:39422 DataGrid.DataGrid.DataGridImpl.setElementText(cell, value || '', true);
Harley Li7e328932019-04-18 18:41:01423 cell.title = this._request.url();
Blink Reformat4c46d092018-04-07 15:32:37424 return cell;
425 }
Tim van der Lippe097cdec2020-01-06 14:44:17426}
Blink Reformat4c46d092018-04-07 15:32:37427
Tim van der Lippe0efccf02020-02-12 15:15:39428export class RequestView extends UI.Widget.VBox {
Blink Reformat4c46d092018-04-07 15:32:37429 /**
Tim van der Lippe0efccf02020-02-12 15:15:39430 * @param {!SDK.NetworkRequest.NetworkRequest} request
Blink Reformat4c46d092018-04-07 15:32:37431 */
432 constructor(request) {
433 super();
434
Tim van der Lippe0efccf02020-02-12 15:15:39435 this._tabbedPane = new UI.TabbedPane.TabbedPane();
Blink Reformat4c46d092018-04-07 15:32:37436 this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected, this._tabSelected, this);
Paul Lewis6bcdb182020-01-23 11:08:05437 this._resourceViewTabSetting = self.Common.settings.createSetting('cacheStorageViewTab', 'preview');
Blink Reformat4c46d092018-04-07 15:32:37438
Tim van der Lippe0efccf02020-02-12 15:15:39439 this._tabbedPane.appendTab(
440 'headers', Common.UIString.UIString('Headers'), new Network.RequestHeadersView.RequestHeadersView(request));
441 this._tabbedPane.appendTab(
442 'preview', Common.UIString.UIString('Preview'), new Network.RequestPreviewView.RequestPreviewView(request));
Blink Reformat4c46d092018-04-07 15:32:37443 this._tabbedPane.show(this.element);
444 }
445
446 /**
447 * @override
448 */
449 wasShown() {
450 super.wasShown();
451 this._selectTab();
452 }
453
454 /**
455 * @param {string=} tabId
456 */
457 _selectTab(tabId) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34458 if (!tabId) {
Blink Reformat4c46d092018-04-07 15:32:37459 tabId = this._resourceViewTabSetting.get();
Tim van der Lippe1d6e57a2019-09-30 11:55:34460 }
461 if (!this._tabbedPane.selectTab(tabId)) {
Blink Reformat4c46d092018-04-07 15:32:37462 this._tabbedPane.selectTab('headers');
Tim van der Lippe1d6e57a2019-09-30 11:55:34463 }
Blink Reformat4c46d092018-04-07 15:32:37464 }
465
466 _tabSelected(event) {
Tim van der Lippe1d6e57a2019-09-30 11:55:34467 if (!event.data.isUserGesture) {
Blink Reformat4c46d092018-04-07 15:32:37468 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34469 }
Blink Reformat4c46d092018-04-07 15:32:37470 this._resourceViewTabSetting.set(event.data.tabId);
471 }
Tim van der Lippe097cdec2020-01-06 14:44:17472}