Skip to content

Commit cef3f7f

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Fix boolean columns in the cookies table
Bug: 397870169 Change-Id: Ie6a97725085b95c13c66605e99317aa23dda14a9 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6286011 Reviewed-by: Philip Pfaffe <[email protected]> Commit-Queue: Danil Somsikov <[email protected]> Commit-Queue: Philip Pfaffe <[email protected]> Auto-Submit: Danil Somsikov <[email protected]>
1 parent 6360ff0 commit cef3f7f

File tree

2 files changed

+37
-29
lines changed

2 files changed

+37
-29
lines changed

front_end/ui/legacy/components/cookie_table/CookiesTable.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,17 +259,16 @@ export class CookiesTable extends UI.Widget.VBox {
259259
${cookie.expires}
260260
</td>
261261
<td>${cookie.size}</td>
262-
<td>${cookie['http-only']}</td>
263-
<td>
262+
<td data-value=${Boolean(cookie['http-only'])}></td>
263+
<td data-value=${Boolean(cookie.secure)}>
264264
${cookie.icons?.secure}
265-
${cookie.secure}
266265
</td>
267266
<td>
268267
${cookie.icons?.['same-site']}
269268
${cookie['same-site']}
270269
</td>
271270
<td>${cookie['partition-key-site']}</td>
272-
<td>${cookie['has-cross-site-ancestor']}</td>
271+
<td data-value=${Boolean(cookie['has-cross-site-ancestor'])}></td>
273272
<td data-value=${ifDefined(cookie.priorityValue)}>
274273
${cookie.priority}
275274
</td>
@@ -478,7 +477,7 @@ export class CookiesTable extends UI.Widget.VBox {
478477
SDK.Cookie.Attribute.SAME_SITE, SDK.Cookie.Attribute.SOURCE_SCHEME, SDK.Cookie.Attribute.SOURCE_PORT,
479478
SDK.Cookie.Attribute.PRIORITY]) {
480479
if (cookie.hasAttribute(attribute)) {
481-
data[attribute] = String(cookie.getAttribute(attribute));
480+
data[attribute] = String(cookie.getAttribute(attribute) ?? true);
482481
}
483482
}
484483
data[SDK.Cookie.Attribute.DOMAIN] = cookie.domain() || (isRequest ? i18nString(UIStrings.na) : '');

front_end/ui/legacy/components/data_grid/DataGridElement.ts

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type * as TextUtils from '../../../../models/text_utils/text_utils.js';
77
import inspectorCommonStyles from '../../inspectorCommon.css.js';
88

99
import dataGridStyles from './dataGrid.css.js';
10-
import {Align, Events as DataGridEvents} from './DataGrid.js';
10+
import {Align, type ColumnDescriptor, DataType, Events as DataGridEvents} from './DataGrid.js';
1111
import {SortableDataGrid, SortableDataGridNode} from './SortableDataGrid.js';
1212

1313
const DUMMY_COLUMN_ID = 'dummy'; // SortableDataGrid.create requires at least one column.
@@ -37,7 +37,6 @@ const DUMMY_COLUMN_ID = 'dummy'; // SortableDataGrid.create requires at least o
3737
*
3838
* @attr striped
3939
* @attr displayName
40-
* @prop columnsOrder
4140
* @prop filters
4241
*/
4342
class DataGridElement extends HTMLElement {
@@ -51,7 +50,7 @@ class DataGridElement extends HTMLElement {
5150
}
5251
});
5352
#shadowRoot: ShadowRoot;
54-
#columnsOrder: string[] = [];
53+
#columns: ColumnDescriptor[] = [];
5554
#hideableColumns = new Set<string>();
5655
#hiddenColumns = new Set<string>();
5756
#usedCreationNode: DataGridElementNode|null = null;
@@ -80,18 +79,18 @@ class DataGridElement extends HTMLElement {
8079
new CustomEvent('contextmenu', {detail: {menu, element: (node as DataGridElementNode).configElement}}));
8180
});
8281
this.#dataGrid.setHeaderContextMenuCallback(menu => {
83-
for (const columnId of this.#columnsOrder) {
84-
if (this.#hideableColumns.has(columnId)) {
82+
for (const column of this.#columns) {
83+
if (this.#hideableColumns.has(column.id)) {
8584
menu.defaultSection().appendCheckboxItem(
86-
this.#dataGrid.columns[columnId].title as Platform.UIString.LocalizedString, () => {
87-
if (this.#hiddenColumns.has(columnId)) {
88-
this.#hiddenColumns.delete(columnId);
85+
this.#dataGrid.columns[column.id].title as Platform.UIString.LocalizedString, () => {
86+
if (this.#hiddenColumns.has(column.id)) {
87+
this.#hiddenColumns.delete(column.id);
8988
} else {
90-
this.#hiddenColumns.add(columnId);
89+
this.#hiddenColumns.add(column.id);
9190
}
9291
this.#dataGrid.setColumnsVisibility(
93-
new Set(this.#columnsOrder.filter(column => !this.#hiddenColumns.has(column))));
94-
}, {checked: !this.#hiddenColumns.has(columnId)});
92+
new Set(this.#columns.map(({id}) => id).filter(column => !this.#hiddenColumns.has(column))));
93+
}, {checked: !this.#hiddenColumns.has(column.id)});
9594
}
9695
}
9796
});
@@ -148,20 +147,19 @@ class DataGridElement extends HTMLElement {
148147
this.#dataGrid.element.setAttribute('aria-rowcount', String(this.#dataGrid.getNumberOfRows()));
149148
}
150149

151-
get columnsOrder(): string[] {
152-
return this.#columnsOrder;
150+
get columns(): ColumnDescriptor[] {
151+
return this.#columns;
153152
}
154153

155154
#updateColumns(): void {
156155
for (const column of Object.keys(this.#dataGrid.columns)) {
157156
this.#dataGrid.removeColumn(column);
158157
}
159158
this.#hideableColumns.clear();
160-
this.#columnsOrder = [];
159+
this.#columns = [];
161160
let hasEditableColumn = false;
162161
for (const column of this.querySelectorAll('th[id]') || []) {
163162
const id = column.id as Lowercase<string>;
164-
this.#columnsOrder.push(id);
165163
let title = column.textContent?.trim() || '';
166164
const titleDOMFragment = column.firstElementChild ? document.createDocumentFragment() : undefined;
167165
if (titleDOMFragment) {
@@ -178,12 +176,13 @@ class DataGridElement extends HTMLElement {
178176
if (align !== Align.CENTER && align !== Align.RIGHT) {
179177
align = undefined;
180178
}
179+
const dataType = column.getAttribute('type') === 'boolean' ? DataType.BOOLEAN : DataType.STRING;
181180
const weight = parseFloat(column.getAttribute('weight') || '') ?? undefined;
182181
const editable = column.hasAttribute('editable');
183182
if (editable) {
184183
hasEditableColumn = true;
185184
}
186-
this.#dataGrid.addColumn({
185+
const columnDescriptor = {
187186
id,
188187
title: title as Platform.UIString.LocalizedString,
189188
titleDOMFragment,
@@ -192,13 +191,16 @@ class DataGridElement extends HTMLElement {
192191
width,
193192
align,
194193
weight,
195-
editable
196-
});
194+
editable,
195+
dataType,
196+
};
197+
this.#dataGrid.addColumn(columnDescriptor);
198+
this.#columns.push(columnDescriptor);
197199
if (hasBooleanAttribute(column, 'hideable')) {
198200
this.#hideableColumns.add(id);
199201
}
200202
}
201-
const visibleColumns = new Set(this.#columnsOrder.filter(column => !this.#hiddenColumns.has(column)));
203+
const visibleColumns = new Set(this.#columns.map(({id}) => id).filter(id => !this.#hiddenColumns.has(id)));
202204
if (visibleColumns.size) {
203205
this.#dataGrid.setColumnsVisibility(visibleColumns);
204206
}
@@ -337,8 +339,8 @@ class DataGridElement extends HTMLElement {
337339
if (node.isCreationNode) {
338340
this.#usedCreationNode = node;
339341
if (moveDirection === 'forward') {
340-
const hasNextEditableColumn = this.columnsOrder.slice(this.columnsOrder.indexOf(columnId) + 1)
341-
.some(columnId => this.#dataGrid.columns[columnId].editable);
342+
const hasNextEditableColumn =
343+
this.#columns.slice(this.#columns.findIndex(({id}) => id === columnId) + 1).some(({editable}) => editable);
342344
if (!hasNextEditableColumn) {
343345
node.deselect();
344346
}
@@ -398,8 +400,12 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
398400
const cells = this.#configElement.querySelectorAll('td');
399401
for (let i = 0; i < cells.length; ++i) {
400402
const cell = cells[i];
401-
const columnId = this.#dataGridElement.columnsOrder[i];
402-
this.data[columnId] = cell.dataset.value ?? cell.textContent ?? '';
403+
const column = this.#dataGridElement.columns[i];
404+
if (column.dataType === DataType.BOOLEAN) {
405+
this.data[column.id] = hasBooleanAttribute(cell, 'data-value');
406+
} else {
407+
this.data[column.id] = cell.dataset.value ?? cell.textContent ?? '';
408+
}
403409
}
404410
}
405411

@@ -455,11 +461,14 @@ class DataGridElementNode extends SortableDataGridNode<DataGridElementNode> {
455461
}
456462

457463
override createCell(columnId: string): HTMLElement {
464+
const index = this.#dataGridElement.columns.findIndex(({id}) => id === columnId);
465+
if (this.#dataGridElement.columns[index].dataType === DataType.BOOLEAN) {
466+
return super.createCell(columnId);
467+
}
458468
const cell = this.createTD(columnId);
459469
if (this.isCreationNode) {
460470
return cell;
461471
}
462-
const index = this.#dataGridElement.columnsOrder.indexOf(columnId);
463472
const configCell = this.#configElement.querySelectorAll('td')[index];
464473
if (!configCell) {
465474
throw new Error(`Column ${columnId} not found in the data grid`);

0 commit comments

Comments
 (0)