blob: c7c27b0fd7dadc95cdbbdaa22ea28a71e37bb9fa [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @typedef {{hasChildren: boolean,
* id: string,
* idPath: string,
* title: string,
* totalUsage: string,
* type: string}}
*/
let CookieDetails;
/**
* @typedef {{content: string,
* label: string}}
*/
let CookieDataForDisplay;
// This structure maps the various cookie type names from C++ (hence the
// underscores) to arrays of the different types of data each has, along with
// the i18n name for the description of that data type.
// This structure serves three purposes:
// 1) to list what subset of the cookie data we want to show in the UI.
// 2) What order to show it in.
// 3) What user friendly label to prefix the data with.
const cookieInfo = {
'cookie': [
['name', 'cookieName'], ['content', 'cookieContent'],
['domain', 'cookieDomain'], ['path', 'cookiePath'],
['sendfor', 'cookieSendFor'],
['accessibleToScript', 'cookieAccessibleToScript'],
['created', 'cookieCreated'], ['expires', 'cookieExpires']
],
'app_cache': [
['manifest', 'appCacheManifest'], ['size', 'localStorageSize'],
['created', 'cookieCreated'], ['accessed', 'cookieLastAccessed']
],
'database': [
['name', 'cookieName'], ['desc', 'webdbDesc'], ['size', 'localStorageSize'],
['modified', 'localStorageLastModified']
],
'local_storage': [
['origin', 'localStorageOrigin'], ['size', 'localStorageSize'],
['modified', 'localStorageLastModified']
],
'indexed_db': [
['origin', 'indexedDbOrigin'], ['size', 'indexedDbSize'],
['modified', 'indexedDbLastModified']
],
'file_system': [
['origin', 'fileSystemOrigin'], ['persistent', 'fileSystemPersistentUsage'],
['temporary', 'fileSystemTemporaryUsage']
],
'channel_id': [
['serverId', 'channelIdServerId'], ['certType', 'channelIdType'],
['created', 'channelIdCreated']
],
'service_worker': [
['origin', 'serviceWorkerOrigin'], ['size', 'serviceWorkerSize'],
['scopes', 'serviceWorkerScopes']
],
'shared_worker':
[['worker', 'sharedWorkerWorker'], ['name', 'sharedWorkerName']],
'cache_storage': [
['origin', 'cacheStorageOrigin'], ['size', 'cacheStorageSize'],
['modified', 'cacheStorageLastModified']
],
'flash_lso': [['domain', 'cookieDomain']],
'media_license': [
['origin', 'mediaLicenseOrigin'], ['size', 'mediaLicenseSize'],
['modified', 'mediaLicenseLastModified']
],
};
/**
* Get cookie data for a given HTML node.
* @param {CookieDetails} data The contents of the cookie.
* @return {!Array<CookieDataForDisplay>}
*/
const getCookieData = function(data) {
/** @type {!Array<CookieDataForDisplay>} */
const out = [];
const fields = cookieInfo[data.type];
for (let i = 0; i < fields.length; i++) {
const field = fields[i];
// Iterate through the keys found in |cookieInfo| for the given |type|
// and see if those keys are present in the data. If so, display them
// (in the order determined by |cookieInfo|).
const key = field[0];
if (data[key].length > 0) {
const entry = /** @type {CookieDataForDisplay} */ ({
label: loadTimeData.getString(field[1]),
content: data[key],
});
out.push(entry);
}
}
return out;
};