blob: 6aa87c560752873c601a219a494fe878f45e2c70 [file] [log] [blame]
WebInspector.CookiesTable=function(expandable,refreshCallback,selectedCallback)
{WebInspector.VBox.call(this);var readOnly=expandable;this._refreshCallback=refreshCallback;var columns=[{id:"name",title:WebInspector.UIString("Name"),sortable:true,disclosure:expandable,sort:WebInspector.DataGrid.Order.Ascending,longText:true,weight:24},{id:"value",title:WebInspector.UIString("Value"),sortable:true,longText:true,weight:34},{id:"domain",title:WebInspector.UIString("Domain"),sortable:true,weight:7},{id:"path",title:WebInspector.UIString("Path"),sortable:true,weight:7},{id:"expires",title:WebInspector.UIString("Expires / Max-Age"),sortable:true,weight:7},{id:"size",title:WebInspector.UIString("Size"),sortable:true,align:WebInspector.DataGrid.Align.Right,weight:7},{id:"httpOnly",title:WebInspector.UIString("HTTP"),sortable:true,align:WebInspector.DataGrid.Align.Center,weight:7},{id:"secure",title:WebInspector.UIString("Secure"),sortable:true,align:WebInspector.DataGrid.Align.Center,weight:7},{id:"firstPartyOnly",title:WebInspector.UIString("First-Party"),sortable:true,align:WebInspector.DataGrid.Align.Center,weight:7}];if(readOnly)
this._dataGrid=new WebInspector.DataGrid(columns);else
this._dataGrid=new WebInspector.DataGrid(columns,undefined,this._onDeleteCookie.bind(this),refreshCallback,this._onContextMenu.bind(this));this._dataGrid.setName("cookiesTable");this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged,this._rebuildTable,this);if(selectedCallback)
this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode,selectedCallback,this);this._nextSelectedCookie=(null);this._dataGrid.asWidget().show(this.element);this._data=[];}
WebInspector.CookiesTable.prototype={_clearAndRefresh:function(domain)
{this.clear(domain);this._refresh();},_onContextMenu:function(contextMenu,node)
{if(node===this._dataGrid.creationNode)
return;var cookie=node.cookie;var domain=cookie.domain();if(domain)
contextMenu.appendItem(WebInspector.UIString.capitalize("Clear ^all from \"%s\"",domain),this._clearAndRefresh.bind(this,domain));contextMenu.appendItem(WebInspector.UIString.capitalize("Clear ^all"),this._clearAndRefresh.bind(this,null));},setCookies:function(cookies)
{this.setCookieFolders([{cookies:cookies}]);},setCookieFolders:function(cookieFolders)
{this._data=cookieFolders;this._rebuildTable();},selectedCookie:function()
{var node=this._dataGrid.selectedNode;return node?node.cookie:null;},clear:function(domain)
{for(var i=0,length=this._data.length;i<length;++i){var cookies=this._data[i].cookies;for(var j=0,cookieCount=cookies.length;j<cookieCount;++j){if(!domain||cookies[j].domain()===domain)
cookies[j].remove();}}},_rebuildTable:function()
{var selectedCookie=this._nextSelectedCookie||this.selectedCookie();this._nextSelectedCookie=null;this._dataGrid.rootNode().removeChildren();for(var i=0;i<this._data.length;++i){var item=this._data[i];if(item.folderName){var groupData={name:item.folderName,value:"",domain:"",path:"",expires:"",size:this._totalSize(item.cookies),httpOnly:"",secure:"",firstPartyOnly:""};var groupNode=new WebInspector.DataGridNode(groupData);groupNode.selectable=true;this._dataGrid.rootNode().appendChild(groupNode);groupNode.element().classList.add("row-group");this._populateNode(groupNode,item.cookies,selectedCookie);groupNode.expand();}else
this._populateNode(this._dataGrid.rootNode(),item.cookies,selectedCookie);}},_populateNode:function(parentNode,cookies,selectedCookie)
{parentNode.removeChildren();if(!cookies)
return;this._sortCookies(cookies);for(var i=0;i<cookies.length;++i){var cookie=cookies[i];var cookieNode=this._createGridNode(cookie);parentNode.appendChild(cookieNode);if(selectedCookie&&selectedCookie.name()===cookie.name()&&selectedCookie.domain()===cookie.domain()&&selectedCookie.path()===cookie.path())
cookieNode.select();}},_totalSize:function(cookies)
{var totalSize=0;for(var i=0;cookies&&i<cookies.length;++i)
totalSize+=cookies[i].size();return totalSize;},_sortCookies:function(cookies)
{var sortDirection=this._dataGrid.isSortOrderAscending()?1:-1;function compareTo(getter,cookie1,cookie2)
{return sortDirection*(getter.apply(cookie1)+"").compareTo(getter.apply(cookie2)+"");}
function numberCompare(getter,cookie1,cookie2)
{return sortDirection*(getter.apply(cookie1)-getter.apply(cookie2));}
function expiresCompare(cookie1,cookie2)
{if(cookie1.session()!==cookie2.session())
return sortDirection*(cookie1.session()?1:-1);if(cookie1.session())
return 0;if(cookie1.maxAge()&&cookie2.maxAge())
return sortDirection*(cookie1.maxAge()-cookie2.maxAge());if(cookie1.expires()&&cookie2.expires())
return sortDirection*(cookie1.expires()-cookie2.expires());return sortDirection*(cookie1.expires()?1:-1);}
var comparator;switch(this._dataGrid.sortColumnIdentifier()){case"name":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.name);break;case"value":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.value);break;case"domain":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.domain);break;case"path":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.path);break;case"expires":comparator=expiresCompare;break;case"size":comparator=numberCompare.bind(null,WebInspector.Cookie.prototype.size);break;case"httpOnly":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.httpOnly);break;case"secure":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.secure);break;case"firstPartyOnly":comparator=compareTo.bind(null,WebInspector.Cookie.prototype.firstPartyOnly);break;default:compareTo.bind(null,WebInspector.Cookie.prototype.name);}
cookies.sort(comparator);},_createGridNode:function(cookie)
{var data={};data.name=cookie.name();data.value=cookie.value();if(cookie.type()===WebInspector.Cookie.Type.Request){data.domain=WebInspector.UIString("N/A");data.path=WebInspector.UIString("N/A");data.expires=WebInspector.UIString("N/A");}else{data.domain=cookie.domain()||"";data.path=cookie.path()||"";if(cookie.maxAge())
data.expires=Number.secondsToString(parseInt(cookie.maxAge(),10));else if(cookie.expires())
data.expires=new Date(cookie.expires()).toISOString();else
data.expires=WebInspector.UIString("Session");}
data.size=cookie.size();const checkmark="\u2713";data.httpOnly=(cookie.httpOnly()?checkmark:"");data.secure=(cookie.secure()?checkmark:"");data.firstPartyOnly=(cookie.firstPartyOnly()?checkmark:"");var node=new WebInspector.DataGridNode(data);node.cookie=cookie;node.selectable=true;return node;},_onDeleteCookie:function(node)
{var cookie=node.cookie;var neighbour=node.traverseNextNode()||node.traversePreviousNode();if(neighbour)
this._nextSelectedCookie=neighbour.cookie;cookie.remove();this._refresh();},_refresh:function()
{if(this._refreshCallback)
this._refreshCallback();},__proto__:WebInspector.VBox.prototype};WebInspector.FilmStripModel=function(tracingModel,zeroTime)
{this._tracingModel=tracingModel;this._zeroTime=zeroTime||tracingModel.minimumRecordTime();this._frames=[];var browserProcess=tracingModel.processByName("Browser");if(!browserProcess)
return;var mainThread=browserProcess.threadByName("CrBrowserMain");if(!mainThread)
return;var events=mainThread.events();for(var i=0;i<events.length;++i){var event=events[i];if(event.startTime<this._zeroTime)
continue;if(!event.hasCategory(WebInspector.FilmStripModel._category))
continue;if(event.name===WebInspector.FilmStripModel.TraceEvents.CaptureFrame){var data=event.args["data"];if(data)
this._frames.push(WebInspector.FilmStripModel.Frame._fromEvent(this,event,this._frames.length));}else if(event.name===WebInspector.FilmStripModel.TraceEvents.Screenshot){this._frames.push(WebInspector.FilmStripModel.Frame._fromSnapshot(this,(event),this._frames.length));}}}
WebInspector.FilmStripModel._category="disabled-by-default-devtools.screenshot";WebInspector.FilmStripModel.TraceEvents={CaptureFrame:"CaptureFrame",Screenshot:"Screenshot"}
WebInspector.FilmStripModel.prototype={frames:function()
{return this._frames;},zeroTime:function()
{return this._zeroTime;},frameByTimestamp:function(timestamp)
{function comparator(timestamp,frame)
{return timestamp-frame.timestamp;}
var index=this._frames.lowerBound(timestamp,comparator);return index<this._frames.length?this._frames[index]:null;}}
WebInspector.FilmStripModel.Frame=function(model,timestamp,index)
{this._model=model;this.timestamp=timestamp;this.index=index;this._imageData=null;this._snapshot=null;}
WebInspector.FilmStripModel.Frame._fromEvent=function(model,event,index)
{var frame=new WebInspector.FilmStripModel.Frame(model,event.startTime,index);frame._imageData=event.args["data"];return frame;}
WebInspector.FilmStripModel.Frame._fromSnapshot=function(model,snapshot,index)
{var frame=new WebInspector.FilmStripModel.Frame(model,snapshot.startTime,index);frame._snapshot=snapshot;return frame;}
WebInspector.FilmStripModel.Frame.prototype={model:function()
{return this._model;},imageDataPromise:function()
{if(this._imageData||!this._snapshot)
return Promise.resolve(this._imageData);return(this._snapshot.objectPromise());}};WebInspector.FilmStripView=function()
{WebInspector.HBox.call(this,true);this.registerRequiredCSS("components_lazy/filmStripView.css");this.contentElement.classList.add("film-strip-view");this._statusLabel=this.contentElement.createChild("div","label");this.reset();this.setMode(WebInspector.FilmStripView.Modes.TimeBased);}
WebInspector.FilmStripView.Events={FrameSelected:"FrameSelected",FrameEnter:"FrameEnter",FrameExit:"FrameExit",}
WebInspector.FilmStripView.Modes={TimeBased:"TimeBased",FrameBased:"FrameBased"}
WebInspector.FilmStripView.prototype={setMode:function(mode)
{this._mode=mode;this.contentElement.classList.toggle("time-based",mode===WebInspector.FilmStripView.Modes.TimeBased);this.update();},setModel:function(filmStripModel,zeroTime,spanTime)
{this._model=filmStripModel;this._zeroTime=zeroTime;this._spanTime=spanTime;var frames=filmStripModel.frames();if(!frames.length){this.reset();return;}
this.update();},createFrameElement:function(frame)
{var time=frame.timestamp;var element=createElementWithClass("div","frame");element.title=WebInspector.UIString("Doubleclick to zoom image. Click to view preceding requests.");element.createChild("div","time").textContent=Number.millisToString(time-this._zeroTime);var imageElement=element.createChild("div","thumbnail").createChild("img");element.addEventListener("mousedown",this._onMouseEvent.bind(this,WebInspector.FilmStripView.Events.FrameSelected,time),false);element.addEventListener("mouseenter",this._onMouseEvent.bind(this,WebInspector.FilmStripView.Events.FrameEnter,time),false);element.addEventListener("mouseout",this._onMouseEvent.bind(this,WebInspector.FilmStripView.Events.FrameExit,time),false);element.addEventListener("dblclick",this._onDoubleClick.bind(this,frame),false);return frame.imageDataPromise().then(WebInspector.FilmStripView._setImageData.bind(null,imageElement)).then(returnElement);function returnElement()
{return element;}},frameByTime:function(time)
{function comparator(time,frame)
{return time-frame.timestamp;}
var frames=this._model.frames();var index=Math.max(frames.upperBound(time,comparator)-1,0);return frames[index];},update:function()
{if(!this._model)
return;var frames=this._model.frames();if(!frames.length)
return;if(this._mode===WebInspector.FilmStripView.Modes.FrameBased){Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendElements.bind(this));return;}
var width=this.contentElement.clientWidth;var scale=this._spanTime/width;this.createFrameElement(frames[0]).then(continueWhenFrameImageLoaded.bind(this));function continueWhenFrameImageLoaded(element0)
{var frameWidth=Math.ceil(WebInspector.measurePreferredSize(element0,this.contentElement).width);if(!frameWidth)
return;var promises=[];for(var pos=frameWidth;pos<width;pos+=frameWidth){var time=pos*scale+this._zeroTime;promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWidth));}
Promise.all(promises).then(appendElements.bind(this));function fixWidth(element)
{element.style.width=frameWidth+"px";return element;}}
function appendElements(elements)
{this.contentElement.removeChildren();for(var i=0;i<elements.length;++i)
this.contentElement.appendChild(elements[i]);}},onResize:function()
{if(this._mode===WebInspector.FilmStripView.Modes.FrameBased)
return;this.update();},_onMouseEvent:function(eventName,timestamp)
{this.dispatchEventToListeners(eventName,timestamp);},_onDoubleClick:function(filmStripFrame)
{new WebInspector.FilmStripView.Dialog(filmStripFrame,this._zeroTime);},reset:function()
{this._zeroTime=0;this.contentElement.removeChildren();this.contentElement.appendChild(this._statusLabel);},setStatusText:function(text)
{this._statusLabel.textContent=text;},__proto__:WebInspector.HBox.prototype}
WebInspector.FilmStripView._setImageData=function(imageElement,data)
{if(data)
imageElement.src="data:image/jpg;base64,"+data;}
WebInspector.FilmStripView.Dialog=function(filmStripFrame,zeroTime)
{WebInspector.VBox.call(this,true);this.registerRequiredCSS("components_lazy/filmStripDialog.css");this.contentElement.classList.add("filmstrip-dialog");this.contentElement.tabIndex=0;this._frames=filmStripFrame.model().frames();this._index=filmStripFrame.index;this._zeroTime=zeroTime||filmStripFrame.model().zeroTime();this._imageElement=this.contentElement.createChild("img");var footerElement=this.contentElement.createChild("div","filmstrip-dialog-footer");footerElement.createChild("div","flex-auto");var prevButton=createTextButton("\u25C0",this._onPrevFrame.bind(this),undefined,WebInspector.UIString("Previous frame"));footerElement.appendChild(prevButton);this._timeLabel=footerElement.createChild("div","filmstrip-dialog-label");var nextButton=createTextButton("\u25B6",this._onNextFrame.bind(this),undefined,WebInspector.UIString("Next frame"));footerElement.appendChild(nextButton);footerElement.createChild("div","flex-auto");this.contentElement.addEventListener("keydown",this._keyDown.bind(this),false);this.setDefaultFocusedElement(this.contentElement);this._render();}
WebInspector.FilmStripView.Dialog.prototype={_resize:function()
{if(!this._dialog){this._dialog=new WebInspector.Dialog();this.show(this._dialog.element);this._dialog.setWrapsContent(true);this._dialog.show();}
this._dialog.contentResized();},_keyDown:function(event)
{switch(event.key){case"Left":if(WebInspector.isMac()&&event.metaKey)
this._onFirstFrame();else
this._onPrevFrame();break;case"Right":if(WebInspector.isMac()&&event.metaKey)
this._onLastFrame();else
this._onNextFrame();break;case"Home":this._onFirstFrame();break;case"End":this._onLastFrame();break;}},_onPrevFrame:function()
{if(this._index>0)
--this._index;this._render();},_onNextFrame:function()
{if(this._index<this._frames.length-1)
++this._index;this._render();},_onFirstFrame:function()
{this._index=0;this._render();},_onLastFrame:function()
{this._index=this._frames.length-1;this._render();},_render:function()
{var frame=this._frames[this._index];this._timeLabel.textContent=Number.millisToString(frame.timestamp-this._zeroTime);return frame.imageDataPromise().then(WebInspector.FilmStripView._setImageData.bind(null,this._imageElement)).then(this._resize.bind(this));},__proto__:WebInspector.VBox.prototype};Runtime.cachedResources["components_lazy/filmStripDialog.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n flex: none !important;\n}\n\n.filmstrip-dialog {\n margin: 12px;\n}\n\n.filmstrip-dialog > img {\n border: 1px solid #ddd;\n max-height: 80vh;\n max-width: 80vw;\n}\n\n.filmstrip-dialog-footer {\n display: flex;\n align-items: center;\n margin-top: 10px;\n}\n\n.filmstrip-dialog-label {\n margin: 8px 8px;\n}\n\n/*# sourceURL=components_lazy/filmStripDialog.css */";Runtime.cachedResources["components_lazy/filmStripView.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.film-strip-view {\n overflow-x: auto;\n overflow-y: hidden;\n align-content: flex-start;\n min-height: 81px;\n}\n\n.film-strip-view.time-based .frame .time {\n display: none;\n}\n\n.film-strip-view .label {\n margin: auto;\n font-size: 18px;\n color: #999;\n}\n\n.film-strip-view .frame {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 4px;\n flex: none;\n cursor: pointer;\n}\n\n.film-strip-view .frame-limit-reached {\n font-size: 24px;\n color: #888;\n justify-content: center;\n display: inline-flex;\n flex-direction: column;\n flex: none;\n}\n\n.film-strip-view .frame .thumbnail {\n min-width: 24px;\n display: flex;\n flex-direction: row;\n align-items: center;\n pointer-events: none;\n margin: 4px 0 2px;\n border: 2px solid transparent;\n}\n\n.film-strip-view .frame:hover .thumbnail {\n border-color: #FBCA46;\n}\n\n.film-strip-view .frame .thumbnail img {\n height: auto;\n width: auto;\n max-width: 80px;\n max-height: 50px;\n pointer-events: none;\n box-shadow: 0 0 3px #bbb;\n flex: 0 0 auto;\n}\n\n.film-strip-view .frame:hover .thumbnail img {\n box-shadow: none;\n}\n\n.film-strip-view .frame .time {\n font-size: 10px;\n margin-top: 2px;\n}\n\n/*# sourceURL=components_lazy/filmStripView.css */";