export class CookiesTable extends UI.VBox{constructor(renderInline,saveCallback,refreshCallback,selectedCallback,deleteCallback){super();this._saveCallback=saveCallback;this._refreshCallback=refreshCallback;this._deleteCallback=deleteCallback;const editable=!!saveCallback;const columns=([{id:SDK.Cookie.Attributes.Name,title:ls`Name`,sortable:true,disclosure:editable,sort:DataGrid.DataGrid.Order.Ascending,longText:true,weight:24,editable:editable},{id:SDK.Cookie.Attributes.Value,title:ls`Value`,sortable:true,longText:true,weight:34,editable:editable},{id:SDK.Cookie.Attributes.Domain,title:ls`Domain`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Path,title:ls`Path`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Expires,title:ls`Expires / Max-Age`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Size,title:ls`Size`,sortable:true,align:DataGrid.DataGrid.Align.Right,weight:7},{id:SDK.Cookie.Attributes.HttpOnly,title:ls`HttpOnly`,sortable:true,align:DataGrid.DataGrid.Align.Center,weight:7},{id:SDK.Cookie.Attributes.Secure,title:ls`Secure`,sortable:true,align:DataGrid.DataGrid.Align.Center,weight:7},{id:SDK.Cookie.Attributes.SameSite,title:ls`SameSite`,sortable:true,weight:7}]);if(editable){this._dataGrid=new DataGrid.DataGrid(columns,this._onUpdateCookie.bind(this),this._onDeleteCookie.bind(this),refreshCallback);}else{this._dataGrid=new DataGrid.DataGrid(columns);} this._dataGrid.setStriped(true);this._dataGrid.setName('cookiesTable');this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._rebuildTable,this);if(renderInline){this._dataGrid.renderInline();} if(selectedCallback){this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,selectedCallback,this);} this._lastEditedColumnId=null;this._dataGrid.asWidget().show(this.element);this._data=[];this._cookieDomain='';this._cookieToBlockedReasons=null;} setCookies(cookies,cookieToBlockedReasons){this.setCookieFolders([{cookies:cookies}],cookieToBlockedReasons);} setCookieFolders(cookieFolders,cookieToBlockedReasons){this._data=cookieFolders;this._cookieToBlockedReasons=cookieToBlockedReasons||null;this._rebuildTable();} setCookieDomain(cookieDomain){this._cookieDomain=cookieDomain;} selectedCookie(){const node=this._dataGrid.selectedNode;return node?node.cookie:null;} _getSelectionCookies(){const node=this._dataGrid.selectedNode;const nextNeighbor=node&&node.traverseNextNode(true);const previousNeighbor=node&&node.traversePreviousNode(true);return{current:node&&node.cookie,neighbor:(nextNeighbor&&nextNeighbor.cookie)||(previousNeighbor&&previousNeighbor.cookie)};} willHide(){this._lastEditedColumnId=null;} _findSelectedCookie(selectionCookies,cookies){if(!cookies){return null;} const current=selectionCookies.current;const foundCurrent=cookies.find(cookie=>this._isSameCookie(cookie,current));if(foundCurrent){return foundCurrent;} const neighbor=selectionCookies.neighbor;const foundNeighbor=cookies.find(cookie=>this._isSameCookie(cookie,neighbor));if(foundNeighbor){return foundNeighbor;} return null;} _isSameCookie(cookieA,cookieB){return!!cookieB&&cookieB.name()===cookieA.name()&&cookieB.domain()===cookieA.domain()&&cookieB.path()===cookieA.path();} _rebuildTable(){const selectionCookies=this._getSelectionCookies();const lastEditedColumnId=this._lastEditedColumnId;this._lastEditedColumnId=null;this._dataGrid.rootNode().removeChildren();for(let i=0;ithis._refresh());}} _onUpdateCookie(editingNode,columnIdentifier,oldText,newText){this._lastEditedColumnId=columnIdentifier;this._setDefaults(editingNode);if(this._isValidCookieData(editingNode.data)){this._saveNode(editingNode);}else{editingNode.setDirty(true);}} _setDefaults(node){if(node.data[SDK.Cookie.Attributes.Name]===null){node.data[SDK.Cookie.Attributes.Name]='';} if(node.data[SDK.Cookie.Attributes.Value]===null){node.data[SDK.Cookie.Attributes.Value]='';} if(node.data[SDK.Cookie.Attributes.Domain]===null){node.data[SDK.Cookie.Attributes.Domain]=this._cookieDomain;} if(node.data[SDK.Cookie.Attributes.Path]===null){node.data[SDK.Cookie.Attributes.Path]='/';} if(node.data[SDK.Cookie.Attributes.Expires]===null){node.data[SDK.Cookie.Attributes.Expires]=_expiresSessionValue;}} _saveNode(node){const oldCookie=node.cookie;const newCookie=this._createCookieFromData(node.data);node.cookie=newCookie;this._saveCallback(newCookie,oldCookie).then(success=>{if(success){this._refresh();}else{node.setDirty(true);}});} _createCookieFromData(data){const cookie=new SDK.Cookie(data[SDK.Cookie.Attributes.Name],data[SDK.Cookie.Attributes.Value],null);cookie.addAttribute(SDK.Cookie.Attributes.Domain,data[SDK.Cookie.Attributes.Domain]);cookie.addAttribute(SDK.Cookie.Attributes.Path,data[SDK.Cookie.Attributes.Path]);if(data.expires&&data.expires!==_expiresSessionValue){cookie.addAttribute(SDK.Cookie.Attributes.Expires,(new Date(data[SDK.Cookie.Attributes.Expires])).toUTCString());} if(data[SDK.Cookie.Attributes.HttpOnly]){cookie.addAttribute(SDK.Cookie.Attributes.HttpOnly);} if(data[SDK.Cookie.Attributes.Secure]){cookie.addAttribute(SDK.Cookie.Attributes.Secure);} if(data[SDK.Cookie.Attributes.SameSite]){cookie.addAttribute(SDK.Cookie.Attributes.SameSite,data[SDK.Cookie.Attributes.SameSite]);} cookie.setSize(data[SDK.Cookie.Attributes.Name].length+data[SDK.Cookie.Attributes.Value].length);return cookie;} _isValidCookieData(data){return(data.name||data.value)&&this._isValidDomain(data.domain)&&this._isValidPath(data.path)&&this._isValidDate(data.expires);} _isValidDomain(domain){if(!domain){return true;} const parsedURL=('http://'+domain).asParsedURL();return!!parsedURL&&parsedURL.domain()===domain;} _isValidPath(path){const parsedURL=('http://example.com'+path).asParsedURL();return!!parsedURL&&parsedURL.path===path;} _isValidDate(date){return date===''||date===_expiresSessionValue||!isNaN(Date.parse(date));} _refresh(){if(this._refreshCallback){this._refreshCallback();}}} export class DataGridNode extends DataGrid.DataGridNode{constructor(data,cookie,blockedReasons){super(data);this.cookie=cookie;this._blockedReasons=blockedReasons;} createCells(element){super.createCells(element);if(this._blockedReasons&&this._blockedReasons.length){element.classList.add('flagged-cookie-attribute-row');}} createCell(columnId){const cell=super.createCell(columnId);cell.title=cell.textContent;let blockedReasonString='';if(this._blockedReasons){for(const blockedReason of this._blockedReasons){const attributeMatches=blockedReason.attribute===(columnId);const useNameColumn=!blockedReason.attribute&&columnId===SDK.Cookie.Attributes.Name;if(attributeMatches||useNameColumn){if(blockedReasonString){blockedReasonString+='\n';} blockedReasonString+=blockedReason.uiString;}}} if(blockedReasonString){const infoElement=UI.Icon.create('smallicon-info','cookie-warning-icon');infoElement.title=blockedReasonString;cell.insertBefore(infoElement,cell.firstChild);cell.classList.add('flagged-cookie-attribute-cell');} return cell;}} export const _expiresSessionValue=Common.UIString('Session');self.CookieTable=self.CookieTable||{};CookieTable=CookieTable||{};CookieTable.CookiesTable=CookiesTable;CookieTable.CookiesTable._expiresSessionValue=_expiresSessionValue;CookieTable.DataGridNode=DataGridNode;CookieTable.BlockedReason;