blob: 599b8eb9390f40e1452da9d90a15d1f403186cdb [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {html} from 'chrome://resources/lit/v3_0/lit.rollup.js';
import type {IdbPartitionMetadata} from './indexed_db_internals.mojom-webui.js';
import {origin as mojoOriginToString, schemefulSite, time} from './mojo_utils.js';
export function getHtml(
partitions: IdbPartitionMetadata[], originFilter: string) {
// clang-format off
return html`
${partitions.map(partition => html`
<div id="indexeddb-partition">
<div class="indexeddb-summary">
${partition.partitionPath.path ? html`
<span>
<span>Instances in: </span>
<span>${partition.partitionPath.path}</span>
</span>
` : html`
<span>
<span>Instances: Incognito </span>
</span>
`}
</div>
${partition.originList.map(origin => html`
${originFilter === '' ||
mojoOriginToString(origin.origin).includes(originFilter) ? html `
<div class="indexeddb-origin">
<span>
Origin:
<a class="indexeddb-url"
href="${mojoOriginToString(origin.origin)}" target="_blank">
${mojoOriginToString(origin.origin)}
</a>
</span>
${origin.storageKeys.map(key => html`
<div class="metadata-list-item">
<span>Storage partition - top level site:
<span>
<a class="indexeddb-url" target="_blank">
${schemefulSite(key.topLevelSite)}
</a>
</span>
</span>
<div>
<span>Storage key:</span>
<span>${key.serializedStorageKey}</span>
</div>
${key.buckets.map(bucket => html`
<indexeddb-bucket class="metadata-list-item"
.idbBucketId="${bucket.bucketLocator.id}">
<div>
<span>Bucket:</span>
<span>${bucket.name}</span>
</div>
<div class="indexeddb-size">
<span>Size:</span>
<span>${bucket.size}</span>
</div>
<div class="indexeddb-last-modified">
<span>Last modified:</span>
<span>${time(bucket.lastModified)}</span>
</div>
<div>
<span>Open connections:</span>
<span class="connection-count">
${bucket.connectionCount}
</span>
</div>
<div class="indexeddb-paths">
<span>Paths:</span>
${bucket.paths.map(path => html`
<span class="indexeddb-path">
<span>${path.path}</span>
</span>
`)}
</div>
<div class="controls">
<span class="control force-close">Force close</span>
<span class="control download">Download</span>
<span class="control start-record">
Start Recording
</span>
<span class="control stop-record" hidden>
Stop Recording
</span>
<span class="download-status" style="display: none">
Loading...
</span>
</div>
<div class="snapshots" hidden>
<div class="message"></div>
<div class="controls">
<button class="prev">←</button>
<input type="range" min="0" max="100" value="50"
class="slider">
<button class="next">→</button>
<span>Snapshot:
<span class="current-snapshot"></span> /
<span class="total-snapshots"></span>
(<span class="snapshot-delta"></span>)
</span>
</div>
</div>
<div class="database-view">
${bucket.databases.map(database => html`
<indexeddb-database class="metadata-list-item"
.clients="${bucket.clients}" .data="${database}">
</indexeddb-database>
`)}
</div>
</indexeddb-bucket>
`)}
</div>
`)}
</div>
`: ''}
`)}
</div>
`)}
`;
// clang-format on
}