NetworkPanel.js revision 2fc2651226baac27029e38c9d6ef883fa32084db
1bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen/* 2bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 5bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 6bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * Redistribution and use in source and binary forms, with or without 7bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * modification, are permitted provided that the following conditions 8bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * are met: 9bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 10bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 1. Redistributions of source code must retain the above copyright 11f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * notice, this list of conditions and the following disclaimer. 12bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright 13bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * notice, this list of conditions and the following disclaimer in the 14f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * documentation and/or other materials provided with the distribution. 15bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 16bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * its contributors may be used to endorse or promote products derived 17f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * from this software without specific prior written permission. 18bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * 19bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 20bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 23bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen */ 30bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 31bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkPanel = function() 32bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 33bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.call(this, "network"); 34bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.createSidebar(); 36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.className = "network-sidebar"; 37a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 38bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resources = []; 39e14391e94c850b8bd03680c23b38978db68687a8John Reck this._resourcesById = {}; 4028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._resourcesByURL = {}; 41bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = []; 42bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNodes = {}; 43bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = -1; 44bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = -1; 45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hiddenCategories = {}; 46a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._categories = WebInspector.resourceCategories; 48a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 49a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement = document.createElement("div"); 50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement.id = "network-container"; 51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.appendChild(this.containerElement); 52bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 53bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement = document.createElement("div"); 54bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement.id = "network-views"; 55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.className = "hidden"; 56bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.element.appendChild(this._viewsContainerElement); 57bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 5828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement = document.createElement("button"); 5928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement.id = "network-close-button"; 6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement.addEventListener("click", this._toggleGridMode.bind(this), false); 6128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._viewsContainerElement.appendChild(this._closeButtonElement); 62e14391e94c850b8bd03680c23b38978db68687a8John Reck 63bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createSortingFunctions(); 64bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createTable(); 65a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createTimelineGrid(); 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createStatusbarButtons(); 67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createFilterStatusBarItems(); 68a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createSummaryBar(); 69bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 7028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!WebInspector.settings.resourcesLargeRows) 7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._setLargerResources(WebInspector.settings.resourcesLargeRows); 7228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 73bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), true); 744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // Enable faster hint. 754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._popoverHelper.setTimeout(100); 76bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 77bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.calculator = new WebInspector.NetworkTransferTimeCalculator(); 78a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filter(this._filterAllElement, false); 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 81ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 82ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceStarted, this._onResourceStarted, this); 83ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceUpdated, this._onResourceUpdated, this); 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._onResourceUpdated, this); 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.MainResourceCommitLoad, this._onMainResourceCommitLoad, this); 86bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 87bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 88bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkPanel.prototype = { 89bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get toolbarItemLabel() 90bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 91bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return WebInspector.UIString("Network"); 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 94bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get statusBarItems() 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return [this._largerResourcesButton.element, this._preserveLogToggle.element, this._clearButton.element, this._filterBarElement]; 97bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 99bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen isCategoryVisible: function(categoryName) 100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return true; 102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen elementsToRestoreScrollPositionsFor: function() 105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return [this.containerElement, this._dataGrid.scrollContainer]; 107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resize: function() 110bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 111bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.resize.call(this); 112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 113a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._positionSummaryBar(); 114a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 115a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 11628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu updateSidebarWidth: function(width) 117a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 118a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!this._viewingResourceMode) 119a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 12028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.Panel.prototype.updateSidebarWidth.call(this, width); 121a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 122a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 123a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch updateMainViewWidth: function(width) 124a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 125a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.style.left = width + "px"; 126a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 127a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 128a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch handleShortcut: function(event) 129a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 130a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode && event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) { 131a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 132a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch event.handled = true; 133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 134a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 135a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 136a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _positionSummaryBar: function() 137a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 138a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Position the total bar. 139a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 14028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var fillerRow = this._dataGrid.dataTableBody.lastChild; 14128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (this._summaryBarElement.parentElement !== this.element && fillerRow.offsetHeight > 0) { 142a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Glue status to bottom. 143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._summaryBarRowNode) { 144a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.removeChild(this._summaryBarRowNode); 145a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._summaryBarRowNode; 146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 147a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.addStyleClass("network-summary-bar-bottom"); 148a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.appendChild(this._summaryBarElement); 149a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.style.bottom = "20px"; 150a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 151a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 152a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 15328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!this._summaryBarRowNode && !fillerRow.offsetHeight) { 154a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Glue status to table. 155a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarRowNode = new WebInspector.NetworkTotalGridNode(this._summaryBarElement); 156a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.removeStyleClass("network-summary-bar-bottom"); 157a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.appendChild(this._summaryBarRowNode); 158a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.style.bottom = 0; 159a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortItems(); 160a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 1612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 162a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 163a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 164a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _resetSummaryBar: function() 165a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 166a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._summaryBarRowNode; 167a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.parentElement.removeChild(this._summaryBarElement); 168a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._updateSummaryBar(); 169bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 170bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTimelineGrid: function() 172bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 173bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid = new WebInspector.TimelineGrid(); 174bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.element.addStyleClass("network-timeline-grid"); 175a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.appendChild(this._timelineGrid.element); 176bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 178bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTable: function() 179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 180a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var columns = {name: {}, method: {}, status: {}, type: {}, size: {}, time: {}, timeline: {}}; 181a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Name"), WebInspector.UIString("Path")); 182a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.sortable = true; 183a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.width = "20%"; 184a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.disclosure = true; 185bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 186bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.title = WebInspector.UIString("Method"); 187bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.sortable = true; 188bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.width = "7%"; 189bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 190a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.status.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Status"), WebInspector.UIString("Text")); 191bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.status.sortable = true; 192bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.status.width = "8%"; 193bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 194bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.type.title = WebInspector.UIString("Type"); 195bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.type.sortable = true; 196e14391e94c850b8bd03680c23b38978db68687a8John Reck columns.type.width = "10%"; 197bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 198a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.size.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Size"), WebInspector.UIString("Transfer")); 199bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.sortable = true; 200bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.width = "10%"; 201bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.aligned = "right"; 202bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 20328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu columns.time.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Time"), WebInspector.UIString("Latency")); 204bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.sortable = true; 205bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.width = "10%"; 206bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.aligned = "right"; 207bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 208bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.timeline.title = ""; 209a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.timeline.sortable = false; 210e14391e94c850b8bd03680c23b38978db68687a8John Reck columns.timeline.width = "37%"; 211a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.timeline.sort = "ascending"; 212bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 213bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid = new WebInspector.DataGrid(columns); 214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this._dataGrid.element.addEventListener("contextmenu", this._contextMenu.bind(this), true); 215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement.appendChild(this._dataGrid.element); 216bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.addEventListener("sorting changed", this._sortItems, this); 217bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.addEventListener("width changed", this._updateDividersIfNeeded, this); 2182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._dataGrid.scrollContainer.addEventListener("scroll", this._updateOffscreenRows.bind(this)); 219a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 220a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._patchTimelineHeader(); 221a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 223a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _makeHeaderFragment: function(title, subtitle) 224a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 225a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var fragment = document.createDocumentFragment(); 226a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch fragment.appendChild(document.createTextNode(title)); 227a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var subtitleDiv = document.createElement("div"); 228a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleDiv.className = "network-header-subtitle"; 229a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleDiv.textContent = subtitle; 230a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch fragment.appendChild(subtitleDiv); 231a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return fragment; 232a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 233a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 234a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _patchTimelineHeader: function() 235a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 236a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timelineSorting = document.createElement("select"); 237a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 238a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var option = document.createElement("option"); 239a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "startTime"; 240a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Timeline"); 241a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 242a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 243a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 244a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "startTime"; 245a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Start Time"); 246a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 247a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 248a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 249a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "responseTime"; 250a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Response Time"); 251a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 252a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 253a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 254a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "endTime"; 255a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("End Time"); 256a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 257a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 258a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 259a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "duration"; 260a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Duration"); 261a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 262a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 263a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 264a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "latency"; 265a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Latency"); 266a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 267a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 268a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var header = this._dataGrid.headerTableHeader("timeline"); 269e14391e94c850b8bd03680c23b38978db68687a8John Reck header.replaceChild(timelineSorting, header.firstChild); 270a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 271a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.addEventListener("click", function(event) { event.stopPropagation() }, false); 272a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.addEventListener("change", this._sortByTimeline.bind(this), false); 273a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineSortSelector = timelineSorting; 274bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 275bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 276bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createSortingFunctions: function() 277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 278bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sortingFunctions = {}; 279a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameComparator; 280a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.method = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "method", false); 281a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.status = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "statusCode", false); 282a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.type = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "mimeType", false); 283a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeComparator; 284a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.time = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "duration", false); 285a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "startTime", false); 286a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "startTime", false); 287a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "endTime", false); 288a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "responseReceivedTime", false); 289a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "duration", true); 290a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "latency", true); 291a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 292a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timeCalculator = new WebInspector.NetworkTransferTimeCalculator(); 293a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var durationCalculator = new WebInspector.NetworkTransferDurationCalculator(); 294a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 295a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators = {}; 296a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.timeline = timeCalculator; 297a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.startTime = timeCalculator; 298a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.endTime = timeCalculator; 299a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.responseTime = timeCalculator; 300a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.duration = durationCalculator; 301a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.latency = durationCalculator; 302bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 303bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 304a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _sortItems: function() 305bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 306a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var columnIdentifier = this._dataGrid.sortColumnIdentifier; 307a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (columnIdentifier === "timeline") { 308a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortByTimeline(); 309a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 310a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 311a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var sortingFunction = this._sortingFunctions[columnIdentifier]; 312a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!sortingFunction) 313a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 314a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 315a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.sortNodes(sortingFunction, this._dataGrid.sortOrder === "descending"); 316a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineSortSelector.selectedIndex = 0; 3172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 318a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 319a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 320a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _sortByTimeline: function() 321a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 322a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var selectedIndex = this._timelineSortSelector.selectedIndex; 323a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!selectedIndex) 324a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch selectedIndex = 1; // Sort by start time by default. 325a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var selectedOption = this._timelineSortSelector[selectedIndex]; 326a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var value = selectedOption.value; 327a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 328a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var sortingFunction = this._sortingFunctions[value]; 329a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.sortNodes(sortingFunction); 330a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.calculator = this._calculators[value]; 331a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this.calculator.startAtZero) 332a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.hideEventDividers(); 333a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else 334a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.showEventDividers(); 335a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.markColumnAsSortedBy("timeline", "ascending"); 3362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 337a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 338a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 339a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createFilterStatusBarItems: function() 340a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 341a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var filterBarElement = document.createElement("div"); 342a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.className = "scope-bar status-bar-item"; 343a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.id = "network-filter"; 344a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 345a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch function createFilterElement(category, label) 346a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 347a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var categoryElement = document.createElement("li"); 348a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.category = category; 349a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.className = category; 350a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.appendChild(document.createTextNode(label)); 351a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.addEventListener("click", this._updateFilter.bind(this), false); 352a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.appendChild(categoryElement); 353a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 354a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return categoryElement; 355a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 356a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 357a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterAllElement = createFilterElement.call(this, "all", WebInspector.UIString("All")); 358a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 359a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Add a divider 360a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var dividerElement = document.createElement("div"); 361a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch dividerElement.addStyleClass("scope-bar-divider"); 362a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.appendChild(dividerElement); 363a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 364a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var category in this._categories) 365a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createFilterElement.call(this, category, this._categories[category].title); 366a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterBarElement = filterBarElement; 367a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 368a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 369a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createSummaryBar: function() 370a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 371a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement = document.createElement("div"); 372a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.className = "network-summary-bar"; 373a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement.appendChild(this._summaryBarElement); 374a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 375a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 376a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _updateSummaryBar: function() 377a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 378a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._positionSummaryBar(); // Grid is growing. 379a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var numRequests = this._resources.length; 380a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 381a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!numRequests) { 382a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._summaryBarElement._isDisplayingWarning) 383a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 384a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement._isDisplayingWarning = true; 385a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 386a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var img = document.createElement("img"); 387a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch img.src = "Images/warningIcon.png"; 388a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.removeChildren(); 389a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.appendChild(img); 390a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.appendChild(document.createTextNode(" ")); 391a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.appendChild(document.createTextNode( 392a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.UIString("No requests captured. Reload the page to see detailed information on the network activity."))); 393a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 394a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 395a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._summaryBarElement._isDisplayingWarning; 396a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 397a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var transferSize = 0; 398a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var baseTime = -1; 399a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var maxTime = -1; 400a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._resources.length; ++i) { 401a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var resource = this._resources[i]; 4026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner transferSize += (resource.cached || !resource.transferSize) ? 0 : resource.transferSize; 403a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (resource.isMainResource) 404a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch baseTime = resource.startTime; 405f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (resource.endTime > maxTime) 406a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch maxTime = resource.endTime; 407a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 408a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var text = String.sprintf(WebInspector.UIString("%d requests"), numRequests); 409a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text += " \u2758 " + String.sprintf(WebInspector.UIString("%s transferred"), Number.bytesToString(transferSize)); 410a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (baseTime !== -1 && this._mainResourceLoadTime !== -1 && this._mainResourceDOMContentTime !== -1 && this._mainResourceDOMContentTime > baseTime) { 411a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text += " \u2758 " + String.sprintf(WebInspector.UIString("%s (onload: %s, DOMContentLoaded: %s)"), 412a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(maxTime - baseTime), 413a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(this._mainResourceLoadTime - baseTime), 414a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(this._mainResourceDOMContentTime - baseTime)); 415a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 416a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.textContent = text; 417a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 418a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 419a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _showCategory: function(category) 420a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 421a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("filter-" + category); 422a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._hiddenCategories[category]; 423a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 424a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 425a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _hideCategory: function(category) 426a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 427a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("filter-" + category); 428a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hiddenCategories[category] = true; 429bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 430bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 431bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _updateFilter: function(e) 432bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 433bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var isMac = WebInspector.isMac(); 434bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var selectMultiple = false; 435bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (isMac && e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey) 436bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen selectMultiple = true; 437bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!isMac && e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey) 438bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen selectMultiple = true; 439bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 440a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filter(e.target, selectMultiple); 44128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._positionSummaryBar(); 442bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 443bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 444a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _filter: function(target, selectMultiple) 445a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 446a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch function unselectAll() 447a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 448a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._filterBarElement.childNodes.length; ++i) { 449a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var child = this._filterBarElement.childNodes[i]; 450a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!child.category) 451a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch continue; 452a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 453a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch child.removeStyleClass("selected"); 454a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory(child.category); 455a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 456a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 457a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 458a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.category === this._filterAllElement) { 459a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.hasStyleClass("selected")) { 460a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // We can't unselect All, so we break early here 461a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 462a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 463a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 464a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If All wasn't selected, and now is, unselect everything else. 465a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unselectAll.call(this); 466a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 467a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Something other than All is being selected, so we want to unselect All. 468a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._filterAllElement.hasStyleClass("selected")) { 469a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterAllElement.removeStyleClass("selected"); 470a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory("all"); 471a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 472a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 473a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 474a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!selectMultiple) { 475a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If multiple selection is off, we want to unselect everything else 476a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // and just select ourselves. 477a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unselectAll.call(this); 478a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 479a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.addStyleClass("selected"); 480a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._showCategory(target.category); 481a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 482a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 483a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 484a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.hasStyleClass("selected")) { 485a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If selectMultiple is turned on, and we were selected, we just 486a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // want to unselect ourselves. 487a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.removeStyleClass("selected"); 488a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory(target.category); 489a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 490a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If selectMultiple is turned on, and we weren't selected, we just 491a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // want to select ourselves. 492a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.addStyleClass("selected"); 493a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._showCategory(target.category); 494a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 4952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 496a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 497a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 498bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _scheduleRefresh: function() 499bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 500bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._needsRefresh) 501bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 502bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 503bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._needsRefresh = true; 504bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 505bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.visible && !("_refreshTimeout" in this)) 506bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshTimeout = setTimeout(this.refresh.bind(this), 500); 507bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 508bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 509bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _updateDividersIfNeeded: function(force) 510bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 511a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timelineColumn = this._dataGrid.columns.timeline; 512a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._dataGrid.resizers.length; ++i) { 513a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (timelineColumn.ordinal === this._dataGrid.resizers[i].rightNeighboringColumnID) { 514a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Position timline grid location. 515a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.style.left = this._dataGrid.resizers[i].style.left; 516a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.style.right = "18px"; 517a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 518a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 519bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 520bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var proceed = true; 521bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this.visible) { 522bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._scheduleRefresh(); 523bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen proceed = false; 524bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else 525bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen proceed = this._timelineGrid.updateDividers(force, this.calculator); 526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 527bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!proceed) 528bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 529bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 530bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.calculator.startAtZero || !this.calculator.computePercentageFromEventTime) { 531bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // If our current sorting method starts at zero, that means it shows all 532bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // resources starting at the same point, and so onLoad event and DOMContent 533bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // event lines really wouldn't make much sense here, so don't render them. 534bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Additionally, if the calculator doesn't have the computePercentageFromEventTime 535bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // function defined, we are probably sorting by size, and event times aren't relevant 536bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // in this case. 537bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 538bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 539bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 540bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.removeEventDividers(); 541bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceLoadTime !== -1) { 542bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percent = this.calculator.computePercentageFromEventTime(this._mainResourceLoadTime); 543bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 544bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var loadDivider = document.createElement("div"); 545bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDivider.className = "network-event-divider network-red-divider"; 546bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 547bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var loadDividerPadding = document.createElement("div"); 548bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.className = "network-event-divider-padding"; 549bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.title = WebInspector.UIString("Load event fired"); 550bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.appendChild(loadDivider); 551bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.style.left = percent + "%"; 552bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(loadDividerPadding); 553bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 554f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 555bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceDOMContentTime !== -1) { 556bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percent = this.calculator.computePercentageFromEventTime(this._mainResourceDOMContentTime); 557bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 558bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var domContentDivider = document.createElement("div"); 559bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDivider.className = "network-event-divider network-blue-divider"; 560f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 561bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var domContentDividerPadding = document.createElement("div"); 562bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.className = "network-event-divider-padding"; 563bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.title = WebInspector.UIString("DOMContent event fired"); 564bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.appendChild(domContentDivider); 565bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.style.left = percent + "%"; 566bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(domContentDividerPadding); 567bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 568bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 569bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 570bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshIfNeeded: function() 571bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 572bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._needsRefresh) 573bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.refresh(); 574bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 575bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 576bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _invalidateAllItems: function() 577bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 578bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = this._resources.slice(); 579bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 580bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 581bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get calculator() 582bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 583bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return this._calculator; 584bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 585bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 586bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set calculator(x) 587bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 588bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!x || this._calculator === x) 589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 590bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 591bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator = x; 592bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator.reset(); 593bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 594bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._invalidateAllItems(); 595bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.refresh(); 596bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 597bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 598bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _resourceGridNode: function(resource) 599bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 600bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return this._resourceGridNodes[resource.identifier]; 601bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 602bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 603bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen revealAndSelectItem: function(resource) 604bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 605bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var node = this._resourceGridNode(resource); 606bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (node) { 607bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.reveal(); 608bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.select(true); 609bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 610bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 611bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 612bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen addEventDivider: function(divider) 613bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 614bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(divider); 615bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 616bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 617bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createStatusbarButtons: function() 618bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 61928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle = new WebInspector.StatusBarButton(WebInspector.UIString("Preserve Log upon Navigation"), "record-profile-status-bar-item"); 62028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle.addEventListener("click", this._onPreserveLogClicked.bind(this), false); 62128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 622bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-status-bar-item"); 623a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._clearButton.addEventListener("click", this._reset.bind(this), false); 624bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 625bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton = new WebInspector.StatusBarButton(WebInspector.UIString("Use small resource rows."), "network-larger-resources-status-bar-item"); 62628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._largerResourcesButton.toggled = WebInspector.settings.resourcesLargeRows; 627e14391e94c850b8bd03680c23b38978db68687a8John Reck this._largerResourcesButton.addEventListener("click", this._toggleLargerResources.bind(this), false); 628bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 629bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 630bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set mainResourceLoadTime(x) 631bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 632bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceLoadTime === x) 633bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 634f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 635bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = x || -1; 636bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Update the dividers to draw the new line 637bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 638bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 639bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 640bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set mainResourceDOMContentTime(x) 641bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 642bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceDOMContentTime === x) 643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 644bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = x || -1; 646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 647bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 648bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 649bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen show: function() 650bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 651bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.show.call(this); 652bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshIfNeeded(); 653bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) 655bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.visibleView.show(this._viewsContainerElement); 656bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 657bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 658a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._positionSummaryBar(); 659a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 660a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 661a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch hide: function() 662a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 663a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.Panel.prototype.hide.call(this); 664a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._popoverHelper.hidePopup(); 665bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 666bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 667bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get searchableViews() 668bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 669bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var views = []; 670bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return views; 671bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 672bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 673bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen searchMatchFound: function(view, matches) 674bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 675bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNode(view.resource).searchMatches = matches; 676bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 677bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 678bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen searchCanceled: function(startingNewSearch) 679bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 680bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.searchCanceled.call(this, startingNewSearch); 681bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 682bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (startingNewSearch || !this._resources) 683bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 684bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 685bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 686bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen performSearch: function(query) 687bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 688bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.performSearch.call(this, query); 689bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 690bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 691bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refresh: function() 692bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 693bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._needsRefresh = false; 694bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if ("_refreshTimeout" in this) { 695bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen clearTimeout(this._refreshTimeout); 696bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this._refreshTimeout; 697bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 698bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 69928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var wasScrolledToLastRow = this._dataGrid.isScrolledToLastRow(); 700bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var staleItemsLength = this._staleResources.length; 701bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var boundariesChanged = false; 702bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 703bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < staleItemsLength; ++i) { 704bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = this._staleResources[i]; 705bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var node = this._resourceGridNode(resource); 706bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!node) { 707bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Create the timeline tree element and graph. 708a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch node = new WebInspector.NetworkDataGridNode(this, resource); 709bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNodes[resource.identifier] = node; 710bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.appendChild(node); 711bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 712bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.refreshResource(); 713bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 714bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.calculator.updateBoundaries(resource)) 715bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen boundariesChanged = true; 716bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 717bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 718bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (boundariesChanged) { 719bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // The boundaries changed, so all item graphs are stale. 720bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._invalidateAllItems(); 721bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen staleItemsLength = this._staleResources.length; 722bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 723bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 724bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < staleItemsLength; ++i) 725bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNode(this._staleResources[i]).refreshGraph(this.calculator); 726bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 727bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = []; 728bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sortItems(); 729a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._updateSummaryBar(); 730bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 73128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 73228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (wasScrolledToLastRow) 73328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._dataGrid.scrollToLastRow(); 73428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu }, 73528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 73628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu _onPreserveLogClicked: function(e) 73728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu { 73828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle.toggled = !this._preserveLogToggle.toggled; 73928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu }, 74028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 741a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _reset: function() 742bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 743bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper.hidePopup(); 744a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._closeVisibleResource(); 745bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 746a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 747bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 748bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Begin reset timeline 749bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._calculator) 750bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator.reset(); 751bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 752bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resources = []; 753e14391e94c850b8bd03680c23b38978db68687a8John Reck this._resourcesById = {}; 75428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._resourcesByURL = {}; 755bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = []; 756bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNodes = {}; 757bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 758bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.removeChildren(); 759a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._summaryBarRowNode; 760bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 761bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // End reset timeline. 762a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 763bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = -1; 764bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = -1; 765f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 766bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement.removeChildren(); 76728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._viewsContainerElement.appendChild(this._closeButtonElement); 768a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._resetSummaryBar(); 769bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 770bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 771e14391e94c850b8bd03680c23b38978db68687a8John Reck get resources() 772e14391e94c850b8bd03680c23b38978db68687a8John Reck { 77365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return this._resources; 774e14391e94c850b8bd03680c23b38978db68687a8John Reck }, 775e14391e94c850b8bd03680c23b38978db68687a8John Reck 77665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch resourceById: function(id) 777bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 77865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return this._resourcesById[id]; 77965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 780bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 781ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _onResourceStarted: function(event) 782ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 783ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._appendResource(event.data); 784ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 785ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 786ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _appendResource: function(resource) 78765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 78865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resources.push(resource); 78965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resourcesById[resource.identifier] = resource; 79065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resourcesByURL[resource.url] = resource; 79128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 79265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Pull all the redirects of the main resource upon commit load. 79365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (resource.redirects) { 79465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (var i = 0; i < resource.redirects.length; ++i) 795ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(resource.redirects[i]); 79628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 79728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 798ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(resource); 799ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 800ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 801ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _onResourceUpdated: function(event) 802ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 803ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(event.data); 80465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 80565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 806ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _refreshResource: function(resource) 80765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 808bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources.push(resource); 809bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._scheduleRefresh(); 810f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 811cad810f21b803229eb11403f9209855525a25d57Steve Block var oldView = WebInspector.ResourceView.existingResourceViewForResource(resource); 8124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!oldView) 813bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 814bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 815cad810f21b803229eb11403f9209855525a25d57Steve Block if (WebInspector.ResourceView.resourceViewTypeMatchesResource(resource)) 8164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 817bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 818cad810f21b803229eb11403f9209855525a25d57Steve Block var newView = WebInspector.ResourceView.recreateResourceView(resource); 8194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView === oldView) 8204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView = newView; 821bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 822bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 82365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch clear: function() 82465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 82565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (this._preserveLogToggle.toggled) 82665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 82765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._reset(); 82865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 82965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 830ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _onMainResourceCommitLoad: function() 83165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 83265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (this._preserveLogToggle.toggled) 83365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 83465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 83565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._reset(); 83665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Now resurrect the main resource along with all redirects that lead to it. 83765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch var resourcesToAppend = (WebInspector.mainResource.redirects || []).concat(WebInspector.mainResource); 838ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch resourcesToAppend.forEach(this._appendResource, this); 83965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 84065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 841bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen canShowSourceLine: function(url, line) 842bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 84328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return !!this._resourcesByURL[url]; 844bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 845bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 846bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen showSourceLine: function(url, line) 847bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 84828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._showResource(this._resourcesByURL[url], line); 849bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 850bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 851a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _showResource: function(resource, line) 852bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 853bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!resource) 854bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 855bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 856bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper.hidePopup(); 857bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 858a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleViewingResourceMode(); 859bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) { 8614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView.detach(); 8624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang delete this.visibleView; 8634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 864bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var view = new WebInspector.NetworkItemView(resource); 866bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen view.show(this._viewsContainerElement); 8674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView = view; 868bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 869bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.updateSidebarWidth(); 870bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 871bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 872a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _closeVisibleResource: function() 873bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 874a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.removeStyleClass("viewing-resource"); 875bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) { 8774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView.detach(); 8784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang delete this.visibleView; 8794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 880bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 881bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._lastSelectedGraphTreeElement) 882bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._lastSelectedGraphTreeElement.select(true); 883bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 884bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.updateSidebarWidth(); 885bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 886bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 887bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _toggleLargerResources: function() 888bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 88928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.resourcesLargeRows = !WebInspector.settings.resourcesLargeRows; 89028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._setLargerResources(WebInspector.settings.resourcesLargeRows); 891bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 892bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 893bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _setLargerResources: function(enabled) 894bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 895bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.toggled = enabled; 896bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!enabled) { 897bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.title = WebInspector.UIString("Use large resource rows."); 898bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.element.addStyleClass("small"); 899a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.addStyleClass("small"); 900e14391e94c850b8bd03680c23b38978db68687a8John Reck this._viewsContainerElement.addStyleClass("small"); 901bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 902bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.title = WebInspector.UIString("Use small resource rows."); 903bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.element.removeStyleClass("small"); 904a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.removeStyleClass("small"); 905e14391e94c850b8bd03680c23b38978db68687a8John Reck this._viewsContainerElement.removeStyleClass("small"); 906bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 90728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._positionSummaryBar(); 908bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 909bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 910bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _getPopoverAnchor: function(element) 911bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 912bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var anchor = element.enclosingNodeOrSelfWithClass("network-graph-bar") || element.enclosingNodeOrSelfWithClass("network-graph-label"); 913bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!anchor) 914bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return null; 915bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = anchor.parentElement.resource; 916bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource && resource.timing ? anchor : null; 917bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 918bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 919bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _showPopover: function(anchor) 920bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 921bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = anchor.parentElement.resource; 9224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var tableElement = WebInspector.ResourceTimingView.createTimingTable(resource); 923bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var popover = new WebInspector.Popover(tableElement); 924bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen popover.show(anchor); 925bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return popover; 926bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 927bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 928a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _toggleGridMode: function() 929bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 930a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode) { 931a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewingResourceMode = false; 932a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.removeStyleClass("viewing-resource"); 933a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("viewing-resource-mode"); 934a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.addStyleClass("hidden"); 935a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.style.right = 0; 936a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.style.removeProperty("width"); 9374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this._dataGrid.selectedNode) 9384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._dataGrid.selectedNode.selected = false; 939a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 940a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 941a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._briefGrid) { 942a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("full-grid-mode"); 943a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("brief-grid-mode"); 944a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 945a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("method"); 946a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("status"); 947a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("type"); 948a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("size"); 949a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("time"); 950a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 951a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 952a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 20; 953a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.timeline = 80; 954a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 955a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("full-grid-mode"); 956a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("brief-grid-mode"); 957a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 958a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("method"); 959a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("status"); 960a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("type"); 961a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("size"); 962a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("time"); 963a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 964a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 965a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 20; 966a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.method = 7; 967a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.status = 8; 968e14391e94c850b8bd03680c23b38978db68687a8John Reck widths.type = 10; 969a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.size = 10; 970a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.time = 10; 971e14391e94c850b8bd03680c23b38978db68687a8John Reck widths.timeline = 37; 972a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 973a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 974a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("timeline"); 975a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.applyColumnWidthsMap(widths); 976a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 977a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 978a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 979a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _toggleViewingResourceMode: function() 980a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 981a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode) 982a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 983a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewingResourceMode = true; 984a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._preservedColumnWidths = this._dataGrid.columnWidthsMap(); 985a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 986a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.addStyleClass("viewing-resource"); 987a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("viewing-resource-mode"); 988a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("full-grid-mode"); 989a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("brief-grid-mode"); 990a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 991a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("method"); 992a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("status"); 993a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("type"); 994a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("size"); 995a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("time"); 996a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("timeline"); 997a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 998a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.removeStyleClass("hidden"); 999a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.updateSidebarWidth(200); 1000a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1001a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 1002a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 100; 1003a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.applyColumnWidthsMap(widths); 1004f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1005f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1006f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _contextMenu: function(event) 1007f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1008f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // createBlobURL is enabled conditionally, do not expose resource export if it's not available. 100965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (typeof window.webkitURL.createObjectURL !== "function" || !Preferences.resourceExportEnabled) 1010f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1011f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1012f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var contextMenu = new WebInspector.ContextMenu(); 1013f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var gridNode = this._dataGrid.dataGridNodeFromNode(event.target); 1014f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var resource = gridNode && gridNode._resource; 1015f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (resource) 1016f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch contextMenu.appendItem(WebInspector.UIString("Export to HAR"), this._exportResource.bind(this, resource)); 1017f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch contextMenu.appendItem(WebInspector.UIString("Export all to HAR"), this._exportAll.bind(this)); 1018f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch contextMenu.show(event); 1019f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1020f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1021f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _exportAll: function() 1022f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1023f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var harArchive = { 1024f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log: (new WebInspector.HARLog()).build() 1025f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 10262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorFrontendHost.copyText(JSON.stringify(harArchive)); 1027f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1028f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1029f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _exportResource: function(resource) 1030f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1031f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var har = (new WebInspector.HAREntry(resource)).build(); 10322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorFrontendHost.copyText(JSON.stringify(har)); 10332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 10342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _updateOffscreenRows: function(e) 10362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 10372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var dataTableBody = this._dataGrid.dataTableBody; 10382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rows = dataTableBody.children; 10392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var recordsCount = rows.length; 10402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (recordsCount < 2) 10412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; // Filler row only. 10422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var visibleTop = this._dataGrid.scrollContainer.scrollTop; 10442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var visibleBottom = visibleTop + this._dataGrid.scrollContainer.offsetHeight; 10452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rowHeight = 0; 10472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Filler is at recordsCount - 1. 10492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var unfilteredRowIndex = 0; 10502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block for (var i = 0; i < recordsCount - 1; ++i) { 10512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var row = rows[i]; 10522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Don't touch summaty - quit instead. 10532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (this._summaryBarRowNode && row === this._summaryBarRowNode.element) 10542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block break; 10552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var dataGridNode = this._dataGrid.dataGridNodeFromNode(row); 10572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (dataGridNode.isFilteredOut()) { 10582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.removeStyleClass("offscreen"); 10592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block continue; 10602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 10612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!rowHeight) 10632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block rowHeight = row.offsetHeight; 10642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rowIsVisible = unfilteredRowIndex * rowHeight < visibleBottom && (unfilteredRowIndex + 1) * rowHeight > visibleTop; 10662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (rowIsVisible !== row.rowIsVisible) { 10672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (rowIsVisible) 10682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.removeStyleClass("offscreen"); 10692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 10702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.addStyleClass("offscreen"); 10712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.rowIsVisible = rowIsVisible; 10722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 10732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block unfilteredRowIndex++; 10742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1075bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1076bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1077bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1078bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkPanel.prototype.__proto__ = WebInspector.Panel.prototype; 1079bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1080bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkBaseCalculator = function() 1081bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1082bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1083bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1084bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkBaseCalculator.prototype = { 1085bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeSummaryValues: function(items) 1086bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1087bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var total = 0; 1088bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryValues = {}; 1089bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1090bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var itemsLength = items.length; 1091bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < itemsLength; ++i) { 1092bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var item = items[i]; 1093bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var value = this._value(item); 1094bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof value === "undefined") 1095bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1096bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!(item.category.name in categoryValues)) 1097bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[item.category.name] = 0; 1098bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[item.category.name] += value; 1099bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen total += value; 1100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {categoryValues: categoryValues, total: total}; 1103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphPercentages: function(item) 1106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {start: 0, middle: 0, end: (this._value(item) / this.boundarySpan) * 100}; 1108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1110bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphLabels: function(item) 1111bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const label = this.formatValue(this._value(item)); 1113bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: label, right: label, tooltip: label}; 1114bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1115bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get boundarySpan() 1117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return this.maximumBoundary - this.minimumBoundary; 1119bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1120bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1121bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen updateBoundaries: function(item) 1122bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1123bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.minimumBoundary = 0; 1124bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1125bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var value = this._value(item); 1126bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof this.maximumBoundary === "undefined" || value > this.maximumBoundary) { 1127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.maximumBoundary = value; 1128bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return true; 1129bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return false; 1131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1132bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1133bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen reset: function() 1134bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1135bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this.minimumBoundary; 1136bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this.maximumBoundary; 1137bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1138bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1139bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _value: function(item) 1140bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1141bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1146bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return value.toString(); 1147bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1148bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1149bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1150bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator = function(startAtZero) 1151bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1152bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkBaseCalculator.call(this); 1153bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.startAtZero = startAtZero; 1154bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1155bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1156bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator.prototype = { 1157bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeSummaryValues: function(resources) 1158bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesByCategory = {}; 1160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesLength = resources.length; 1161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < resourcesLength; ++i) { 1162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = resources[i]; 1163bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!(resource.category.name in resourcesByCategory)) 1164bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[resource.category.name] = []; 1165bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[resource.category.name].push(resource); 1166bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1167bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1168bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var earliestStart; 1169bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var latestEnd; 1170bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryValues = {}; 1171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var category in resourcesByCategory) { 1172bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[category].sort(WebInspector.Resource.CompareByTime); 1173bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] = 0; 1174bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1175bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var segment = {start: -1, end: -1}; 1176bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryResources = resourcesByCategory[category]; 1178bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesLength = categoryResources.length; 1179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < resourcesLength; ++i) { 1180bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = categoryResources[i]; 1181bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime === -1 || resource.endTime === -1) 1182bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1183bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1184bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof earliestStart === "undefined") 1185bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen earliestStart = resource.startTime; 1186bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1187bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen earliestStart = Math.min(earliestStart, resource.startTime); 1188bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1189bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof latestEnd === "undefined") 1190bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen latestEnd = resource.endTime; 1191bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1192bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen latestEnd = Math.max(latestEnd, resource.endTime); 1193bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1194bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime <= segment.end) { 1195bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.end = Math.max(segment.end, resource.endTime); 1196bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1197bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1198bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1199bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] += segment.end - segment.start; 1200bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1201bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.start = resource.startTime; 1202bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.end = resource.endTime; 1203bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1204bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1205bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Add the last segment 1206bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] += segment.end - segment.start; 1207bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1208bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1209bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {categoryValues: categoryValues, total: latestEnd - earliestStart}; 1210bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1211bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1212bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphPercentages: function(resource) 1213bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1214bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime !== -1) 1215bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var start = ((resource.startTime - this.minimumBoundary) / this.boundarySpan) * 100; 1216bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1217bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var start = 0; 1218bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1219bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.responseReceivedTime !== -1) 1220bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var middle = ((resource.responseReceivedTime - this.minimumBoundary) / this.boundarySpan) * 100; 1221bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1222bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var middle = (this.startAtZero ? start : 100); 1223bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1224bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.endTime !== -1) 1225bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var end = ((resource.endTime - this.minimumBoundary) / this.boundarySpan) * 100; 1226bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1227bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var end = (this.startAtZero ? middle : 100); 1228bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1229bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.startAtZero) { 1230bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen end -= start; 1231bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen middle -= start; 1232bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen start = 0; 1233bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1234bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1235bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {start: start, middle: middle, end: end}; 1236bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1237f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1238bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computePercentageFromEventTime: function(eventTime) 1239bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1240bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // This function computes a percentage in terms of the total loading time 1241bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // of a specific event. If startAtZero is set, then this is useless, and we 1242bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // want to return 0. 1243bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (eventTime !== -1 && !this.startAtZero) 1244bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return ((eventTime - this.minimumBoundary) / this.boundarySpan) * 100; 1245bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1246bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1247bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1248bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1249bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphLabels: function(resource) 1250bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1251bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightLabel = ""; 1252bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.responseReceivedTime !== -1 && resource.endTime !== -1) 1253bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen rightLabel = this.formatValue(resource.endTime - resource.responseReceivedTime); 1254bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1255bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var hasLatency = resource.latency > 0; 1256bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (hasLatency) 1257bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftLabel = this.formatValue(resource.latency); 1258bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1259bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftLabel = rightLabel; 1260bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1261bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.timing) 1262bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: leftLabel, right: rightLabel}; 1263bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1264bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (hasLatency && rightLabel) { 1265bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var total = this.formatValue(resource.duration); 1266bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s latency, %s download (%s total)", leftLabel, rightLabel, total); 1267bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else if (hasLatency) 1268bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s latency", leftLabel); 1269bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else if (rightLabel) 1270bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s download", rightLabel); 1271bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1272bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.cached) 1273bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen tooltip = WebInspector.UIString("%s (from cache)", tooltip); 1274bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: leftLabel, right: rightLabel, tooltip: tooltip}; 1275bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1276bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen updateBoundaries: function(resource) 1278bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1279bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var didChange = false; 1280bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1281bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var lowerBound; 1282bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.startAtZero) 1283bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lowerBound = 0; 1284bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1285bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lowerBound = this._lowerBound(resource); 1286bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1287bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (lowerBound !== -1 && (typeof this.minimumBoundary === "undefined" || lowerBound < this.minimumBoundary)) { 1288bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.minimumBoundary = lowerBound; 1289bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen didChange = true; 1290bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1291bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1292bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var upperBound = this._upperBound(resource); 1293bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (upperBound !== -1 && (typeof this.maximumBoundary === "undefined" || upperBound > this.maximumBoundary)) { 1294bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.maximumBoundary = upperBound; 1295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen didChange = true; 1296bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1297bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return didChange; 1299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1300bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1301bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1302bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 130365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1304bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1305bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1306bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _lowerBound: function(resource) 1307bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1308bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1309bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1310bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1311bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1312bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1313bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1314bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1316bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator.prototype.__proto__ = WebInspector.NetworkBaseCalculator.prototype; 1318bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator = function() 1320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkTimeCalculator.call(this, false); 1322bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1323bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator.prototype = { 1325bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1326bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 132765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1328bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1329bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1330bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _lowerBound: function(resource) 1331bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1332bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.startTime; 1333bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1334bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1335bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1336bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1337bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.endTime; 1338bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1339bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1340bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1341bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator.prototype.__proto__ = WebInspector.NetworkTimeCalculator.prototype; 1342bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1343bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator = function() 1344bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1345bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkTimeCalculator.call(this, true); 1346bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1347bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1348bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator.prototype = { 1349bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1350bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 135165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1352bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1353bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1354bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1355bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1356bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.duration; 1357bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1358bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1359bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1360bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator.prototype.__proto__ = WebInspector.NetworkTimeCalculator.prototype; 1361bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1362a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode = function(panel, resource) 1363bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1364a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.DataGridNode.call(this, {}); 1365a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._panel = panel; 1366a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._resource = resource; 1367bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1368bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1369a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.prototype = { 1370a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createCells: function() 1371bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1372a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell = this._createDivInTD("name"); 1373a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._methodCell = this._createDivInTD("method"); 1374a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._statusCell = this._createDivInTD("status"); 1375a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._typeCell = this._createDivInTD("type"); 1376a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sizeCell = this._createDivInTD("size"); 1377a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timeCell = this._createDivInTD("time"); 1378a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createTimelineCell(); 13794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._nameCell.addEventListener("click", this.select.bind(this), false); 13802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._nameCell.addEventListener("dblclick", this._openInNewTab.bind(this), false); 13812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 13822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block isFilteredOut: function() 13842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 13852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!this._panel._hiddenCategories.all) 13862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 13872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return this._resource.category.name in this._panel._hiddenCategories; 1388bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1389bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1390a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch select: function() 1391bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1392a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._panel._showResource(this._resource); 13934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WebInspector.DataGridNode.prototype.select.apply(this, arguments); 1394bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1395bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 13962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _openInNewTab: function() 13972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 13982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorBackend.openInInspectedWindow(this._resource.url); 13992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 14002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1401a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch get selectable() 1402bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 14034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!this._panel._viewingResourceMode) 14044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return false; 14052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return !this.isFilteredOut(); 1406bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1407bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1408a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createDivInTD: function(columnIdentifier) 1409bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1410bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var td = document.createElement("td"); 1411a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch td.className = columnIdentifier + "-column"; 1412bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var div = document.createElement("div"); 1413bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen td.appendChild(div); 1414bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.appendChild(td); 1415bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return div; 1416bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1417bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1418bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTimelineCell: function() 1419bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1420bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement = document.createElement("div"); 1421bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.className = "network-graph-side"; 1422bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1423bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement = document.createElement("div"); 1424bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // this._barAreaElement.className = "network-graph-bar-area hidden"; 1425bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.className = "network-graph-bar-area"; 1426bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.resource = this._resource; 1427bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.appendChild(this._barAreaElement); 1428bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1429bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement = document.createElement("div"); 1430bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.className = "network-graph-bar waiting"; 1431bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._barLeftElement); 1432bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1433bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement = document.createElement("div"); 1434bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.className = "network-graph-bar"; 1435bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._barRightElement); 1436bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 14374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1438bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement = document.createElement("div"); 1439bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.className = "network-graph-label waiting"; 1440bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._labelLeftElement); 1441bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1442bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement = document.createElement("div"); 1443bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.className = "network-graph-label"; 1444bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._labelRightElement); 1445bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 14464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._graphElement.addEventListener("mouseover", this._refreshLabelPositions.bind(this), false); 14474576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1448bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineCell = document.createElement("td"); 1449a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineCell.className = "timeline-column"; 1450bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.appendChild(this._timelineCell); 1451bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineCell.appendChild(this._graphElement); 1452bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1453bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1454bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refreshResource: function() 1455bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1456a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._refreshNameCell(); 1457bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1458bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._methodCell.textContent = this._resource.requestMethod; 1459bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1460bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshStatusCell(); 1461bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1462bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.mimeType) { 1463bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.removeStyleClass("network-dim-cell"); 1464bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.textContent = this._resource.mimeType; 1465bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1466bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.addStyleClass("network-dim-cell"); 1467bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.textContent = WebInspector.UIString("Pending"); 1468bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1469bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1470bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshSizeCell(); 1471bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshTimeCell(); 1472bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1473bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.cached) 1474bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.addStyleClass("resource-cached"); 1475bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1476f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this._element.addStyleClass("network-item"); 1477bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this._element.hasStyleClass("network-category-" + this._resource.category.name)) { 1478bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.removeMatchingStyleClasses("network-category-\\w+"); 1479bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.addStyleClass("network-category-" + this._resource.category.name); 1480bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1481bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1482bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1483a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _refreshNameCell: function() 1484bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1485a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.removeChildren(); 1486bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1487bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.category === WebInspector.resourceCategories.images) { 1488bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var previewImage = document.createElement("img"); 1489bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen previewImage.className = "image-network-icon-preview"; 149065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resource.populateImageSource(previewImage); 1491bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1492bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var iconElement = document.createElement("div"); 1493bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.className = "icon"; 1494bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.appendChild(previewImage); 1495bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1496bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var iconElement = document.createElement("img"); 1497bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.className = "icon"; 1498bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1499a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.appendChild(iconElement); 1500a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.appendChild(document.createTextNode(this._fileName())); 1501bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1502bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1503bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var subtitle = this._resource.displayDomain; 1504bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1505bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.path && this._resource.lastPathComponent) { 1506bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var lastPathComponentIndex = this._resource.path.lastIndexOf("/" + this._resource.lastPathComponent); 1507bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (lastPathComponentIndex != -1) 1508bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen subtitle += this._resource.path.substring(0, lastPathComponentIndex); 1509bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1510bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1511a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._appendSubtitle(this._nameCell, subtitle); 1512a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.title = this._resource.url; 1513bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1514bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1515bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _fileName: function() 1516bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1517bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var fileName = this._resource.displayName; 1518bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.queryString) 1519bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen fileName += "?" + this._resource.queryString; 1520bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return fileName; 1521bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1522bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1523bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshStatusCell: function() 1524bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1525bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.removeChildren(); 1526bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 15274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var fromCache = this._resource.cached; 15284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (fromCache) { 15294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.textContent = WebInspector.UIString("(from cache)"); 15304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.addStyleClass("network-dim-cell"); 15314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 15324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 15334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 15344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.removeStyleClass("network-dim-cell"); 1535bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.statusCode) { 1536bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.appendChild(document.createTextNode(this._resource.statusCode)); 1537bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.removeStyleClass("network-dim-cell"); 1538bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._statusCell, this._resource.statusText); 1539bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.title = this._resource.statusCode + " " + this._resource.statusText; 1540bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1541bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.addStyleClass("network-dim-cell"); 1542bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.textContent = WebInspector.UIString("Pending"); 1543bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1544bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1545bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1546bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshSizeCell: function() 1547bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1548bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourceSize = typeof this._resource.resourceSize === "number" ? Number.bytesToString(this._resource.resourceSize) : "?"; 1549bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var transferSize = typeof this._resource.transferSize === "number" ? Number.bytesToString(this._resource.transferSize) : "?"; 1550bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var fromCache = this._resource.cached; 1551bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.textContent = !fromCache ? resourceSize : WebInspector.UIString("(from cache)"); 1552bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (fromCache) 1553bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.addStyleClass("network-dim-cell"); 1554bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1555bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.removeStyleClass("network-dim-cell"); 1556bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!fromCache) 1557bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._sizeCell, transferSize); 1558bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1559bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1560bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshTimeCell: function() 1561bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1562bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.duration > 0) { 1563bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.removeStyleClass("network-dim-cell"); 1564bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.textContent = Number.secondsToString(this._resource.duration); 1565bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._timeCell, Number.secondsToString(this._resource.latency)); 1566bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1567bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.addStyleClass("network-dim-cell"); 1568bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.textContent = WebInspector.UIString("Pending"); 1569bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1570bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1571bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1572bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _appendSubtitle: function(cellElement, subtitleText) 1573bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1574bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var subtitleElement = document.createElement("div"); 1575a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleElement.className = "network-cell-subtitle"; 1576bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen subtitleElement.textContent = subtitleText; 1577bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen cellElement.appendChild(subtitleElement); 1578bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1579bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1580bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refreshGraph: function(calculator) 1581bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1582bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percentages = calculator.computeBarGraphPercentages(this._resource); 1583bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._percentages = percentages; 1584bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1585bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.removeStyleClass("hidden"); 1586bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1587bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this._graphElement.hasStyleClass("network-category-" + this._resource.category.name)) { 1588bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.removeMatchingStyleClasses("network-category-\\w+"); 1589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.addStyleClass("network-category-" + this._resource.category.name); 1590bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1591bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1592bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.style.setProperty("left", percentages.start + "%"); 1593bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.style.setProperty("right", (100 - percentages.end) + "%"); 1594bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1595bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.style.setProperty("right", (100 - percentages.end) + "%"); 1596bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.style.setProperty("left", percentages.middle + "%"); 1597bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 15984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var labels = calculator.computeBarGraphLabels(this._resource); 1599bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.textContent = labels.left; 1600bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.textContent = labels.right; 1601bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1602bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = (labels.tooltip || ""); 1603bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.title = tooltip; 1604bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.title = tooltip; 1605bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.title = tooltip; 1606bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.title = tooltip; 1607bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1608bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1609bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshLabelPositions: function() 1610bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1611a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!this._percentages) 1612a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 1613bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.removeProperty("left"); 1614bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.removeProperty("right"); 1615bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.removeStyleClass("before"); 1616bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.removeStyleClass("hidden"); 1617bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1618bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.removeProperty("left"); 1619bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.removeProperty("right"); 1620bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.removeStyleClass("after"); 1621bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.removeStyleClass("hidden"); 1622bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1623bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelPadding = 10; 1624bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const barRightElementOffsetWidth = this._barRightElement.offsetWidth; 1625bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const barLeftElementOffsetWidth = this._barLeftElement.offsetWidth; 1626bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1627bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._barLeftElement) { 1628bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftBarWidth = barLeftElementOffsetWidth - labelPadding; 1629bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightBarWidth = (barRightElementOffsetWidth - barLeftElementOffsetWidth) - labelPadding; 1630bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1631bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftBarWidth = (barLeftElementOffsetWidth - barRightElementOffsetWidth) - labelPadding; 1632bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightBarWidth = barRightElementOffsetWidth - labelPadding; 1633bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1634bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1635bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelLeftElementOffsetWidth = this._labelLeftElement.offsetWidth; 1636bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelRightElementOffsetWidth = this._labelRightElement.offsetWidth; 1637bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1638bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelBefore = (labelLeftElementOffsetWidth > leftBarWidth); 1639bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelAfter = (labelRightElementOffsetWidth > rightBarWidth); 1640bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const graphElementOffsetWidth = this._graphElement.offsetWidth; 1641bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1642bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore && (graphElementOffsetWidth * (this._percentages.start / 100)) < (labelLeftElementOffsetWidth + 10)) 1643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftHidden = true; 1644bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelAfter && (graphElementOffsetWidth * ((100 - this._percentages.end) / 100)) < (labelRightElementOffsetWidth + 10)) 1646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightHidden = true; 1647bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1648bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (barLeftElementOffsetWidth == barRightElementOffsetWidth) { 1649bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // The left/right label data are the same, so a before/after label can be replaced by an on-bar label. 1650bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore && !labelAfter) 1651bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen leftHidden = true; 1652bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else if (labelAfter && !labelBefore) 1653bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen rightHidden = true; 1654bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1655bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1656bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore) { 1657bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (leftHidden) 1658bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.addStyleClass("hidden"); 1659bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("right", (100 - this._percentages.start) + "%"); 1660bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.addStyleClass("before"); 1661bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1662bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("left", this._percentages.start + "%"); 1663bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("right", (100 - this._percentages.middle) + "%"); 1664bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1665bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1666bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelAfter) { 1667bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (rightHidden) 1668bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.addStyleClass("hidden"); 1669bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("left", this._percentages.end + "%"); 1670bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.addStyleClass("after"); 1671bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1672bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("left", this._percentages.middle + "%"); 1673bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("right", (100 - this._percentages.end) + "%"); 1674bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1675bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1676bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1677bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1678a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.NameComparator = function(a, b) 1679bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1680bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var aFileName = a._resource.displayName + (a._resource.queryString ? a._resource.queryString : ""); 1681bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var bFileName = b._resource.displayName + (b._resource.queryString ? b._resource.queryString : ""); 1682bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (aFileName > bFileName) 1683bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 1; 1684bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (bFileName > aFileName) 1685bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return -1; 1686bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1687bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1688bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1689a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.SizeComparator = function(a, b) 1690a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 1691a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (b._resource.cached && !a._resource.cached) 1692a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 1; 1693a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (a._resource.cached && !b._resource.cached) 1694a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return -1; 1695a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1696a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (a._resource.resourceSize === b._resource.resourceSize) 1697a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 0; 1698a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1699a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return a._resource.resourceSize - b._resource.resourceSize; 1700a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 1701a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1702a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.ResourcePropertyComparator = function(propertyName, revert, a, b) 1703bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1704bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var aValue = a._resource[propertyName]; 1705bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var bValue = b._resource[propertyName]; 1706bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (aValue > bValue) 1707a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return revert ? -1 : 1; 1708bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (bValue > aValue) 1709a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return revert ? 1 : -1; 1710bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1711bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1712bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1713bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkDataGridNode.prototype.__proto__ = WebInspector.DataGridNode.prototype; 1714a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1715a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkTotalGridNode = function(element) 1716a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 1717a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement = element; 1718a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.DataGridNode.call(this, {summaryRow: true}); 1719a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 1720a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1721a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkTotalGridNode.prototype = { 17222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block isFilteredOut: function() 17232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 17242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 17252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 17262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 17272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block get selectable() 17282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 17292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 17302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 17312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1732a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createCells: function() 1733a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 1734a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var td = document.createElement("td"); 1735a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch td.setAttribute("colspan", 7); 1736a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch td.className = "network-summary"; 1737a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch td.appendChild(this._summaryBarElement); 1738a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._element.appendChild(td); 1739a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 1740a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 1741a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1742a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkTotalGridNode.prototype.__proto__ = WebInspector.DataGridNode.prototype; 1743