@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 14.4 kB
JavaScript
import*as Common from"../../../../core/common/common.js";import*as i18n from"../../../../core/i18n/i18n.js";import*as Platform from"../../../../core/platform/platform.js";import*as Root from"../../../../core/root/root.js";import*as SDK from"../../../../core/sdk/sdk.js";import*as IssuesManager from"../../../../models/issues_manager/issues_manager.js";import*as NetworkForward from"../../../../panels/network/forward/forward.js";import*as IconButton from"../../../components/icon_button/icon_button.js";import*as UI from"../../legacy.js";import*as DataGrid from"../data_grid/data_grid.js";import cookiesTableStyles from"./cookiesTable.css.js";const UIStrings={session:"Session",name:"Name",value:"Value",size:"Size",editableCookies:"Editable Cookies",cookies:"Cookies",na:"N/A",showRequestsWithThisCookie:"Show Requests With This Cookie",showIssueAssociatedWithThis:"Show issue associated with this cookie",sourcePortTooltip:"Shows the source port (range 1-65535) the cookie was set on. If the port is unknown, this shows -1.",sourceSchemeTooltip:"Shows the source scheme (`Secure`, `NonSecure`) the cookie was set on. If the scheme is unknown, this shows `Unset`.",timeAfter:"after {date}",timeAfterTooltip:"The expiration timestamp is {seconds}, which corresponds to a date after {date}",opaquePartitionKey:"(opaque)"},str_=i18n.i18n.registerUIStrings("ui/legacy/components/cookie_table/CookiesTable.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_),i18nLazyString=i18n.i18n.getLazilyComputedLocalizedString.bind(void 0,str_),expiresSessionValue=i18nLazyString(UIStrings.session);export class CookiesTable extends UI.Widget.VBox{saveCallback;refreshCallback;deleteCallback;dataGrid;lastEditedColumnId;data;cookieDomain;cookieToBlockedReasons;constructor(e,t,i,o,s){super(),this.element.classList.add("cookies-table"),this.saveCallback=t,this.refreshCallback=i,this.deleteCallback=s;const r=Boolean(t),a=[{id:SDK.Cookie.Attributes.Name,title:i18nString(UIStrings.name),sortable:!0,disclosure:r,sort:DataGrid.DataGrid.Order.Ascending,longText:!0,weight:24,editable:r},{id:SDK.Cookie.Attributes.Value,title:i18nString(UIStrings.value),sortable:!0,longText:!0,weight:34,editable:r},{id:SDK.Cookie.Attributes.Domain,title:"Domain",sortable:!0,weight:7,editable:r},{id:SDK.Cookie.Attributes.Path,title:"Path",sortable:!0,weight:7,editable:r},{id:SDK.Cookie.Attributes.Expires,title:"Expires / Max-Age",sortable:!0,weight:7,editable:r},{id:SDK.Cookie.Attributes.Size,title:i18nString(UIStrings.size),sortable:!0,align:DataGrid.DataGrid.Align.Right,weight:7},{id:SDK.Cookie.Attributes.HttpOnly,title:"HttpOnly",sortable:!0,align:DataGrid.DataGrid.Align.Center,weight:7,dataType:DataGrid.DataGrid.DataType.Boolean,editable:r},{id:SDK.Cookie.Attributes.Secure,title:"Secure",sortable:!0,align:DataGrid.DataGrid.Align.Center,weight:7,dataType:DataGrid.DataGrid.DataType.Boolean,editable:r},{id:SDK.Cookie.Attributes.SameSite,title:"SameSite",sortable:!0,weight:7,editable:r},{id:SDK.Cookie.Attributes.PartitionKey,title:"Partition Key",sortable:!0,weight:7,editable:r},{id:SDK.Cookie.Attributes.Priority,title:"Priority",sortable:!0,sort:DataGrid.DataGrid.Order.Descending,weight:7,editable:r}];if(Root.Runtime.experiments.isEnabled("experimentalCookieFeatures")){const e=[{id:SDK.Cookie.Attributes.SourceScheme,title:"SourceScheme",sortable:!0,align:DataGrid.DataGrid.Align.Center,weight:7,editable:r},{id:SDK.Cookie.Attributes.SourcePort,title:"SourcePort",sortable:!0,align:DataGrid.DataGrid.Align.Center,weight:7,editable:r}];a.push(...e)}this.dataGrid=r?new DataGrid.DataGrid.DataGridImpl({displayName:i18nString(UIStrings.editableCookies),columns:a,editCallback:this.onUpdateCookie.bind(this),deleteCallback:this.onDeleteCookie.bind(this),refreshCallback:i}):new DataGrid.DataGrid.DataGridImpl({displayName:i18nString(UIStrings.cookies),columns:a,editCallback:void 0,deleteCallback:void 0,refreshCallback:void 0}),this.dataGrid.setStriped(!0),this.dataGrid.setName("cookiesTable"),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this.rebuildTable,this),this.dataGrid.setRowContextMenuCallback(this.populateContextMenu.bind(this)),e&&this.dataGrid.renderInline(),o&&this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,o,this),this.lastEditedColumnId=null,this.dataGrid.asWidget().show(this.element),this.data=[],this.cookieDomain="",this.cookieToBlockedReasons=null}wasShown(){this.registerCSSFiles([cookiesTableStyles])}setCookies(e,t){this.setCookieFolders([{cookies:e,folderName:null}],t)}setCookieFolders(e,t){this.data=e,this.cookieToBlockedReasons=t||null,this.rebuildTable()}setCookieDomain(e){this.cookieDomain=e}selectedCookie(){const e=this.dataGrid.selectedNode;return e?e.cookie:null}getSelectionCookies(){const e=this.dataGrid.selectedNode,t=e&&e.traverseNextNode(!0),i=e&&e.traversePreviousNode(!0);return{current:e&&e.cookie,neighbor:t&&t.cookie||i&&i.cookie}}willHide(){this.lastEditedColumnId=null}findSelectedCookie(e,t){if(!t)return null;const i=e.current,o=t.find((e=>this.isSameCookie(e,i)));if(o)return o;const s=e.neighbor,r=t.find((e=>this.isSameCookie(e,s)));return r||null}isSameCookie(e,t){return null!=t&&t.name()===e.name()&&t.domain()===e.domain()&&t.path()===e.path()}rebuildTable(){const e=this.getSelectionCookies(),t=this.lastEditedColumnId;this.lastEditedColumnId=null,this.dataGrid.rootNode().removeChildren();for(let i=0;i<this.data.length;++i){const o=this.data[i],s=this.findSelectedCookie(e,o.cookies);if(o.folderName){const e={};e[SDK.Cookie.Attributes.Name]=o.folderName,e[SDK.Cookie.Attributes.Value]="",e[SDK.Cookie.Attributes.Size]=this.totalSize(o.cookies),e[SDK.Cookie.Attributes.Domain]="",e[SDK.Cookie.Attributes.Path]="",e[SDK.Cookie.Attributes.Expires]="",e[SDK.Cookie.Attributes.HttpOnly]="",e[SDK.Cookie.Attributes.Secure]="",e[SDK.Cookie.Attributes.SameSite]="",e[SDK.Cookie.Attributes.SourcePort]="",e[SDK.Cookie.Attributes.SourceScheme]="",e[SDK.Cookie.Attributes.Priority]="";const i=new DataGrid.DataGrid.DataGridNode(e);i.selectable=!0,this.dataGrid.rootNode().appendChild(i),i.element().classList.add("row-group"),this.populateNode(i,o.cookies,s,t),i.expand()}else this.populateNode(this.dataGrid.rootNode(),o.cookies,s,t)}e.current&&t&&!this.dataGrid.selectedNode&&this.addInactiveNode(this.dataGrid.rootNode(),e.current,t),this.saveCallback&&this.dataGrid.addCreationNode(!1)}populateNode(e,t,i,o){if(e.removeChildren(),t){this.sortCookies(t);for(let s=0;s<t.length;++s){const r=t[s],a=this.createGridNode(r);e.appendChild(a),this.isSameCookie(r,i)&&(a.select(),null!==o&&this.dataGrid.startEditingNextEditableColumnOfDataGridNode(a,o))}}}addInactiveNode(e,t,i){const o=this.createGridNode(t);e.appendChild(o),o.select(),o.setInactive(!0),null!==i&&this.dataGrid.startEditingNextEditableColumnOfDataGridNode(o,i)}totalSize(e){let t=0;for(let i=0;e&&i<e.length;++i)t+=e[i].size();return t}sortCookies(e){const t=this.dataGrid.isSortOrderAscending()?1:-1;function i(e,t){switch(t){case SDK.Cookie.Attributes.Name:return String(e.name());case SDK.Cookie.Attributes.Value:return String(e.value());case SDK.Cookie.Attributes.Domain:return String(e.domain());case SDK.Cookie.Attributes.Path:return String(e.path());case SDK.Cookie.Attributes.HttpOnly:return String(e.httpOnly());case SDK.Cookie.Attributes.Secure:return String(e.secure());case SDK.Cookie.Attributes.SameSite:return String(e.sameSite());case SDK.Cookie.Attributes.PartitionKey:return e.partitionKeyOpaque()?i18nString(UIStrings.opaquePartitionKey):String(e.partitionKey());case SDK.Cookie.Attributes.SourceScheme:return String(e.sourceScheme());default:return String(e.name())}}function o(e,i,o){return t*(e(i)-e(o))}let s;const r=this.dataGrid.sortColumnId()||SDK.Cookie.Attributes.Name;s=r===SDK.Cookie.Attributes.Expires?function(e,i){return e.session()!==i.session()?t*(e.session()?1:-1):e.session()?0:e.maxAge()&&i.maxAge()?t*(e.maxAge()-i.maxAge()):e.expires()&&i.expires()?t*(e.expires()-i.expires()):t*(e.expires()?1:-1)}:r===SDK.Cookie.Attributes.Size?o.bind(null,(e=>e.size())):r===SDK.Cookie.Attributes.SourcePort?o.bind(null,(e=>e.sourcePort())):r===SDK.Cookie.Attributes.Priority?function(e,i){const o=["Low","Medium","High"],s=o.indexOf(e.priority()),r=o.indexOf(i.priority());return t*(s-r)}:function(e,o,s){return t*Platform.StringUtilities.compare(i(o,e),i(s,e))}.bind(null,r),e.sort(s)}createGridNode(e){const t={};let i;if(t[SDK.Cookie.Attributes.Name]=e.name(),t[SDK.Cookie.Attributes.Value]=e.value(),e.type()===SDK.Cookie.Type.Request?(t[SDK.Cookie.Attributes.Domain]=e.domain()?e.domain():i18nString(UIStrings.na),t[SDK.Cookie.Attributes.Path]=e.path()?e.path():i18nString(UIStrings.na)):(t[SDK.Cookie.Attributes.Domain]=e.domain()||"",t[SDK.Cookie.Attributes.Path]=e.path()||""),e.maxAge())t[SDK.Cookie.Attributes.Expires]=i18n.TimeUtilities.secondsToString(Math.floor(e.maxAge()));else if(e.expires()){const o=e.expires();if(o<0)t[SDK.Cookie.Attributes.Expires]=expiresSessionValue();else{const e=864e13;if(o>e){const s=new Date(e).toISOString();t[SDK.Cookie.Attributes.Expires]=i18nString(UIStrings.timeAfter,{date:s}),i=i18nString(UIStrings.timeAfterTooltip,{seconds:o,date:s})}else t[SDK.Cookie.Attributes.Expires]=new Date(o).toISOString()}}else t[SDK.Cookie.Attributes.Expires]=e.type()===SDK.Cookie.Type.Request?i18nString(UIStrings.na):expiresSessionValue();t[SDK.Cookie.Attributes.Size]=e.size(),t[SDK.Cookie.Attributes.HttpOnly]=e.httpOnly(),t[SDK.Cookie.Attributes.Secure]=e.secure(),t[SDK.Cookie.Attributes.SameSite]=e.sameSite()||"",t[SDK.Cookie.Attributes.SourcePort]=e.sourcePort(),t[SDK.Cookie.Attributes.SourceScheme]=e.sourceScheme(),t[SDK.Cookie.Attributes.Priority]=e.priority()||"",t[SDK.Cookie.Attributes.PartitionKey]=e.partitionKey()||"";const o=this.cookieToBlockedReasons?.get(e),s=new DataGridNode(t,e,o||null);return i&&s.setExpiresTooltip(i),s.selectable=!0,s}onDeleteCookie(e){e.cookie&&this.deleteCallback&&this.deleteCallback(e.cookie,(()=>this.refresh()))}onUpdateCookie(e,t,i,o){this.lastEditedColumnId=t,this.setDefaults(e),this.isValidCookieData(e.data)?this.saveNode(e):e.setDirty(!0)}setDefaults(e){null===e.data[SDK.Cookie.Attributes.Name]&&(e.data[SDK.Cookie.Attributes.Name]=""),null===e.data[SDK.Cookie.Attributes.Value]&&(e.data[SDK.Cookie.Attributes.Value]=""),null===e.data[SDK.Cookie.Attributes.Domain]&&(e.data[SDK.Cookie.Attributes.Domain]=this.cookieDomain),null===e.data[SDK.Cookie.Attributes.Path]&&(e.data[SDK.Cookie.Attributes.Path]="/"),null===e.data[SDK.Cookie.Attributes.Expires]&&(e.data[SDK.Cookie.Attributes.Expires]=expiresSessionValue()),null===e.data[SDK.Cookie.Attributes.PartitionKey]&&(e.data[SDK.Cookie.Attributes.PartitionKey]="")}saveNode(e){const t=e.cookie,i=this.createCookieFromData(e.data);e.cookie=i,this.saveCallback&&this.saveCallback(i,t).then((t=>{t?this.refresh():e.setDirty(!0)}))}createCookieFromData(e){const t=new SDK.Cookie.Cookie(e[SDK.Cookie.Attributes.Name],e[SDK.Cookie.Attributes.Value],null,e[SDK.Cookie.Attributes.Priority]);return t.addAttribute(SDK.Cookie.Attributes.Domain,e[SDK.Cookie.Attributes.Domain]),t.addAttribute(SDK.Cookie.Attributes.Path,e[SDK.Cookie.Attributes.Path]),e.expires&&e.expires!==expiresSessionValue()&&t.addAttribute(SDK.Cookie.Attributes.Expires,new Date(e[SDK.Cookie.Attributes.Expires]).toUTCString()),e[SDK.Cookie.Attributes.HttpOnly]&&t.addAttribute(SDK.Cookie.Attributes.HttpOnly),e[SDK.Cookie.Attributes.Secure]&&t.addAttribute(SDK.Cookie.Attributes.Secure),e[SDK.Cookie.Attributes.SameSite]&&t.addAttribute(SDK.Cookie.Attributes.SameSite,e[SDK.Cookie.Attributes.SameSite]),SDK.Cookie.Attributes.SourceScheme in e&&t.addAttribute(SDK.Cookie.Attributes.SourceScheme,e[SDK.Cookie.Attributes.SourceScheme]),SDK.Cookie.Attributes.SourcePort in e&&t.addAttribute(SDK.Cookie.Attributes.SourcePort,Number.parseInt(e[SDK.Cookie.Attributes.SourcePort],10)||void 0),e[SDK.Cookie.Attributes.PartitionKey]&&t.addAttribute(SDK.Cookie.Attributes.PartitionKey,e[SDK.Cookie.Attributes.PartitionKey]),t.setSize(e[SDK.Cookie.Attributes.Name].length+e[SDK.Cookie.Attributes.Value].length),t}isValidCookieData(e){return(Boolean(e.name)||Boolean(e.value))&&this.isValidDomain(e.domain)&&this.isValidPath(e.path)&&this.isValidDate(e.expires)}isValidDomain(e){if(!e)return!0;const t=Common.ParsedURL.ParsedURL.fromString("http://"+e);return null!==t&&t.domain()===e}isValidPath(e){const t=Common.ParsedURL.ParsedURL.fromString("http://example.com"+e);return null!==t&&t.path===e}isValidDate(e){return""===e||e===expiresSessionValue()||!isNaN(Date.parse(e))}refresh(){this.refreshCallback&&this.refreshCallback()}populateContextMenu(e,t){const i=t.cookie;if(!i)return;const o=i;e.revealSection().appendItem(i18nString(UIStrings.showRequestsWithThisCookie),(()=>{const e=NetworkForward.UIFilter.UIRequestFilter.filters([{filterType:NetworkForward.UIFilter.FilterType.CookieDomain,filterValue:o.domain()},{filterType:NetworkForward.UIFilter.FilterType.CookieName,filterValue:o.name()}]);Common.Revealer.reveal(e)})),IssuesManager.RelatedIssue.hasIssues(o)&&e.revealSection().appendItem(i18nString(UIStrings.showIssueAssociatedWithThis),(()=>{IssuesManager.RelatedIssue.reveal(o)}))}}export class DataGridNode extends DataGrid.DataGrid.DataGridNode{cookie;blockedReasons;expiresTooltip;constructor(e,t,i){super(e),this.cookie=t,this.blockedReasons=i}createCells(e){super.createCells(e),this.blockedReasons&&this.blockedReasons.length&&e.classList.add("flagged-cookie-attribute-row")}setExpiresTooltip(e){this.expiresTooltip=e}createCell(e){const t=super.createCell(e);e===SDK.Cookie.Attributes.SourcePort?UI.Tooltip.Tooltip.install(t,i18nString(UIStrings.sourcePortTooltip)):e===SDK.Cookie.Attributes.SourceScheme?UI.Tooltip.Tooltip.install(t,i18nString(UIStrings.sourceSchemeTooltip)):e===SDK.Cookie.Attributes.Expires&&this.expiresTooltip?UI.Tooltip.Tooltip.install(t,this.expiresTooltip):UI.Tooltip.Tooltip.install(t,t.textContent||"");let i="";if(this.blockedReasons)for(const t of this.blockedReasons){const o=t.attribute===e,s=!t.attribute&&e===SDK.Cookie.Attributes.Name;(o||s)&&(i&&(i+="\n"),i+=t.uiString)}if(i){const e=new IconButton.Icon.Icon;e.data={iconName:"info",color:"var(--icon-info)",width:"14px",height:"14px"},UI.Tooltip.Tooltip.install(e,i),t.insertBefore(e,t.firstChild),t.classList.add("flagged-cookie-attribute-cell")}return t}}