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 = {}; 432bde8e466a4451c7319e3a072d118917957d6554Steve Block this._lastResourceGridNodeId = 0; 44bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = -1; 45bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = -1; 46a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hiddenCategories = {}; 47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 48a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._categories = WebInspector.resourceCategories; 49a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement = document.createElement("div"); 51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement.id = "network-container"; 52a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.appendChild(this.containerElement); 53bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 54bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement = document.createElement("div"); 55bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement.id = "network-views"; 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.className = "hidden"; 57bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.element.appendChild(this._viewsContainerElement); 58bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 5928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement = document.createElement("button"); 6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement.id = "network-close-button"; 6128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._closeButtonElement.addEventListener("click", this._toggleGridMode.bind(this), false); 6228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._viewsContainerElement.appendChild(this._closeButtonElement); 63e14391e94c850b8bd03680c23b38978db68687a8John Reck 64bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createSortingFunctions(); 65bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createTable(); 66a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createTimelineGrid(); 67bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._createStatusbarButtons(); 68a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createFilterStatusBarItems(); 69a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createSummaryBar(); 70bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!WebInspector.settings.resourcesLargeRows) 7228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._setLargerResources(WebInspector.settings.resourcesLargeRows); 7328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 74bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), true); 754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // Enable faster hint. 764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._popoverHelper.setTimeout(100); 77bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 78bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.calculator = new WebInspector.NetworkTransferTimeCalculator(); 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filter(this._filterAllElement, false); 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 82ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 83ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceStarted, this._onResourceStarted, this); 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceUpdated, this._onResourceUpdated, this); 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._onResourceUpdated, this); 862bde8e466a4451c7319e3a072d118917957d6554Steve Block WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.FrameCommittedLoad, this._onFrameCommitLoad, this); 87bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 88bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 89bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkPanel.prototype = { 90bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get toolbarItemLabel() 91bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return WebInspector.UIString("Network"); 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 94bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get statusBarItems() 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 9728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return [this._largerResourcesButton.element, this._preserveLogToggle.element, this._clearButton.element, this._filterBarElement]; 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 99bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen isCategoryVisible: function(categoryName) 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return true; 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen elementsToRestoreScrollPositionsFor: function() 106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return [this.containerElement, this._dataGrid.scrollContainer]; 108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 110bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resize: function() 111bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.resize.call(this); 113bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._updateOffscreenRows(); 115a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 116a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 11728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu updateSidebarWidth: function(width) 118a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 119a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!this._viewingResourceMode) 120a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 12128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.Panel.prototype.updateSidebarWidth.call(this, width); 122a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 123a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 124a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch updateMainViewWidth: function(width) 125a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 126a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.style.left = width + "px"; 127a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 128a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 129a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch handleShortcut: function(event) 130a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 131a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode && event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) { 132a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch event.handled = true; 134a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 135a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 136a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 137bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTimelineGrid: function() 138bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 139bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid = new WebInspector.TimelineGrid(); 140bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.element.addStyleClass("network-timeline-grid"); 141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.appendChild(this._timelineGrid.element); 142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTable: function() 145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var columns = {name: {}, method: {}, status: {}, type: {}, size: {}, time: {}, timeline: {}}; 147a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Name"), WebInspector.UIString("Path")); 148a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.sortable = true; 149a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.width = "20%"; 150a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.name.disclosure = true; 151bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 152bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.title = WebInspector.UIString("Method"); 153bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.sortable = true; 154bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.method.width = "7%"; 155bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 156a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.status.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Status"), WebInspector.UIString("Text")); 157bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.status.sortable = true; 158bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.status.width = "8%"; 159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.type.title = WebInspector.UIString("Type"); 161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.type.sortable = true; 162e14391e94c850b8bd03680c23b38978db68687a8John Reck columns.type.width = "10%"; 163bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 164a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.size.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Size"), WebInspector.UIString("Transfer")); 165bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.sortable = true; 166bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.width = "10%"; 167bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.size.aligned = "right"; 168bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 16928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu columns.time.titleDOMFragment = this._makeHeaderFragment(WebInspector.UIString("Time"), WebInspector.UIString("Latency")); 170bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.sortable = true; 171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.width = "10%"; 172bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.time.aligned = "right"; 173bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 174bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen columns.timeline.title = ""; 175a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.timeline.sortable = false; 176e14391e94c850b8bd03680c23b38978db68687a8John Reck columns.timeline.width = "37%"; 177a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch columns.timeline.sort = "ascending"; 178bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid = new WebInspector.DataGrid(columns); 180f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this._dataGrid.element.addEventListener("contextmenu", this._contextMenu.bind(this), true); 181a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.containerElement.appendChild(this._dataGrid.element); 182bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.addEventListener("sorting changed", this._sortItems, this); 183bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.addEventListener("width changed", this._updateDividersIfNeeded, this); 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._dataGrid.scrollContainer.addEventListener("scroll", this._updateOffscreenRows.bind(this)); 185a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 186a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._patchTimelineHeader(); 187a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 188a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 189a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _makeHeaderFragment: function(title, subtitle) 190a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 191a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var fragment = document.createDocumentFragment(); 192a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch fragment.appendChild(document.createTextNode(title)); 193a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var subtitleDiv = document.createElement("div"); 194a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleDiv.className = "network-header-subtitle"; 195a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleDiv.textContent = subtitle; 196a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch fragment.appendChild(subtitleDiv); 197a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return fragment; 198a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 199a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 200a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _patchTimelineHeader: function() 201a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 202a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timelineSorting = document.createElement("select"); 203a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 204a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var option = document.createElement("option"); 205a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "startTime"; 206a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Timeline"); 207a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 208a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 209a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 210a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "startTime"; 211a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Start Time"); 212a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 213a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 214a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "responseTime"; 216a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Response Time"); 217a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 218a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 219a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 220a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "endTime"; 221a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("End Time"); 222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 223a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 224a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 225a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "duration"; 226a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Duration"); 227a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 228a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 229a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option = document.createElement("option"); 230a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.value = "latency"; 231a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.label = WebInspector.UIString("Latency"); 232a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.appendChild(option); 233a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 234a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var header = this._dataGrid.headerTableHeader("timeline"); 235e14391e94c850b8bd03680c23b38978db68687a8John Reck header.replaceChild(timelineSorting, header.firstChild); 236a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 237a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.addEventListener("click", function(event) { event.stopPropagation() }, false); 238a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch timelineSorting.addEventListener("change", this._sortByTimeline.bind(this), false); 239a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineSortSelector = timelineSorting; 240bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 241bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 242bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createSortingFunctions: function() 243bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 244bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sortingFunctions = {}; 245a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameComparator; 246a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.method = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "method", false); 247a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.status = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "statusCode", false); 248a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.type = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "mimeType", false); 249a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeComparator; 250a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.time = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "duration", false); 251a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "startTime", false); 252a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "startTime", false); 253a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "endTime", false); 254a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "responseReceivedTime", false); 255a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "duration", true); 256a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.ResourcePropertyComparator.bind(null, "latency", true); 257a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 258a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timeCalculator = new WebInspector.NetworkTransferTimeCalculator(); 259a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var durationCalculator = new WebInspector.NetworkTransferDurationCalculator(); 260a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 261a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators = {}; 262a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.timeline = timeCalculator; 263a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.startTime = timeCalculator; 264a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.endTime = timeCalculator; 265a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.responseTime = timeCalculator; 266a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.duration = durationCalculator; 267a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._calculators.latency = durationCalculator; 268bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 269bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 270a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _sortItems: function() 271bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 272a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var columnIdentifier = this._dataGrid.sortColumnIdentifier; 273a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (columnIdentifier === "timeline") { 274a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sortByTimeline(); 275a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 276a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 277a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var sortingFunction = this._sortingFunctions[columnIdentifier]; 278a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!sortingFunction) 279a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 280a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 281a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.sortNodes(sortingFunction, this._dataGrid.sortOrder === "descending"); 282a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineSortSelector.selectedIndex = 0; 2832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 284a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 285a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 286a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _sortByTimeline: function() 287a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 288a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var selectedIndex = this._timelineSortSelector.selectedIndex; 289a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!selectedIndex) 290a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch selectedIndex = 1; // Sort by start time by default. 291a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var selectedOption = this._timelineSortSelector[selectedIndex]; 292a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var value = selectedOption.value; 293a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 294a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var sortingFunction = this._sortingFunctions[value]; 295a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.sortNodes(sortingFunction); 296a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.calculator = this._calculators[value]; 297a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this.calculator.startAtZero) 298a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.hideEventDividers(); 299a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else 300a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.showEventDividers(); 301a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.markColumnAsSortedBy("timeline", "ascending"); 3022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 303a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 304a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 305a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createFilterStatusBarItems: function() 306a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 307a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var filterBarElement = document.createElement("div"); 308a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.className = "scope-bar status-bar-item"; 309a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.id = "network-filter"; 310a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 311a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch function createFilterElement(category, label) 312a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 313a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var categoryElement = document.createElement("li"); 314a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.category = category; 315a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.className = category; 316a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.appendChild(document.createTextNode(label)); 317a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch categoryElement.addEventListener("click", this._updateFilter.bind(this), false); 318a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.appendChild(categoryElement); 319a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 320a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return categoryElement; 321a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 322a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 323a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterAllElement = createFilterElement.call(this, "all", WebInspector.UIString("All")); 324a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 325a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Add a divider 326a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var dividerElement = document.createElement("div"); 327a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch dividerElement.addStyleClass("scope-bar-divider"); 328a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch filterBarElement.appendChild(dividerElement); 329a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 330a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var category in this._categories) 331a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createFilterElement.call(this, category, this._categories[category].title); 332a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterBarElement = filterBarElement; 333a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 334a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 335a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createSummaryBar: function() 336a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 33781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var tbody = this._dataGrid.dataTableBody; 33881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var tfoot = document.createElement("tfoot"); 33981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var tr = tfoot.createChild("tr", "revealed network-summary-bar"); 34081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var td = tr.createChild("td"); 34181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch td.setAttribute("colspan", 7); 34281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch tbody.parentNode.insertBefore(tfoot, tbody); 34381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._summaryBarElement = td; 344a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 345a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 346a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _updateSummaryBar: function() 347a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 348a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var numRequests = this._resources.length; 349a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 350a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!numRequests) { 351a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._summaryBarElement._isDisplayingWarning) 352a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 353a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement._isDisplayingWarning = true; 354a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 355a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var img = document.createElement("img"); 356a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch img.src = "Images/warningIcon.png"; 357a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.removeChildren(); 358a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.appendChild(img); 359a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.appendChild(document.createTextNode( 360a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.UIString("No requests captured. Reload the page to see detailed information on the network activity."))); 361a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 362a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 363a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._summaryBarElement._isDisplayingWarning; 364a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 365a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var transferSize = 0; 366a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var baseTime = -1; 367a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var maxTime = -1; 368a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._resources.length; ++i) { 369a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var resource = this._resources[i]; 3706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner transferSize += (resource.cached || !resource.transferSize) ? 0 : resource.transferSize; 3712bde8e466a4451c7319e3a072d118917957d6554Steve Block if (resource === WebInspector.mainResource) 372a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch baseTime = resource.startTime; 373f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (resource.endTime > maxTime) 374a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch maxTime = resource.endTime; 375a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 376a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var text = String.sprintf(WebInspector.UIString("%d requests"), numRequests); 377a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text += " \u2758 " + String.sprintf(WebInspector.UIString("%s transferred"), Number.bytesToString(transferSize)); 378a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (baseTime !== -1 && this._mainResourceLoadTime !== -1 && this._mainResourceDOMContentTime !== -1 && this._mainResourceDOMContentTime > baseTime) { 379a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text += " \u2758 " + String.sprintf(WebInspector.UIString("%s (onload: %s, DOMContentLoaded: %s)"), 380a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(maxTime - baseTime), 381a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(this._mainResourceLoadTime - baseTime), 382a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Number.secondsToString(this._mainResourceDOMContentTime - baseTime)); 383a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 384a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._summaryBarElement.textContent = text; 385a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 386a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 387a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _showCategory: function(category) 388a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 389a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("filter-" + category); 390a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this._hiddenCategories[category]; 391a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 392a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 393a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _hideCategory: function(category) 394a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 395a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("filter-" + category); 396a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hiddenCategories[category] = true; 397bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 398bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 399bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _updateFilter: function(e) 400bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 401bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var isMac = WebInspector.isMac(); 402bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var selectMultiple = false; 403bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (isMac && e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey) 404bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen selectMultiple = true; 405bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!isMac && e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey) 406bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen selectMultiple = true; 407bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 408a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filter(e.target, selectMultiple); 409bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 410bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 411a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _filter: function(target, selectMultiple) 412a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 413a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch function unselectAll() 414a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 415a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._filterBarElement.childNodes.length; ++i) { 416a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var child = this._filterBarElement.childNodes[i]; 417a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!child.category) 418a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch continue; 419a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 420a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch child.removeStyleClass("selected"); 421a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory(child.category); 422a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 423a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 424a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 425a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.category === this._filterAllElement) { 426a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.hasStyleClass("selected")) { 427a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // We can't unselect All, so we break early here 428a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 429a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 430a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 431a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If All wasn't selected, and now is, unselect everything else. 432a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unselectAll.call(this); 433a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 434a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Something other than All is being selected, so we want to unselect All. 435a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._filterAllElement.hasStyleClass("selected")) { 436a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._filterAllElement.removeStyleClass("selected"); 437a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory("all"); 438a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 439a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 440a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 441a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!selectMultiple) { 442a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If multiple selection is off, we want to unselect everything else 443a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // and just select ourselves. 444a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unselectAll.call(this); 445a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 446a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.addStyleClass("selected"); 447a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._showCategory(target.category); 44881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._updateOffscreenRows(); 449a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 450a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 451a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 452a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (target.hasStyleClass("selected")) { 453a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If selectMultiple is turned on, and we were selected, we just 454a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // want to unselect ourselves. 455a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.removeStyleClass("selected"); 456a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._hideCategory(target.category); 457a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 458a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If selectMultiple is turned on, and we weren't selected, we just 459a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // want to select ourselves. 460a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch target.addStyleClass("selected"); 461a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._showCategory(target.category); 462a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 4632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._updateOffscreenRows(); 464a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 465a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 466bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _scheduleRefresh: function() 467bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 468bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._needsRefresh) 469bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 470bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 471bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._needsRefresh = true; 472bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 473bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.visible && !("_refreshTimeout" in this)) 474bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshTimeout = setTimeout(this.refresh.bind(this), 500); 475bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 476bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 477bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _updateDividersIfNeeded: function(force) 478bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 479a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var timelineColumn = this._dataGrid.columns.timeline; 480a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (var i = 0; i < this._dataGrid.resizers.length; ++i) { 481a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (timelineColumn.ordinal === this._dataGrid.resizers[i].rightNeighboringColumnID) { 482a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Position timline grid location. 483a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.style.left = this._dataGrid.resizers[i].style.left; 484a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.style.right = "18px"; 485a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 486a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 487bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 488bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var proceed = true; 489bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this.visible) { 490bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._scheduleRefresh(); 491bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen proceed = false; 492bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else 493bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen proceed = this._timelineGrid.updateDividers(force, this.calculator); 494f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 495bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!proceed) 496bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 497bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 498bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.calculator.startAtZero || !this.calculator.computePercentageFromEventTime) { 499bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // If our current sorting method starts at zero, that means it shows all 500bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // resources starting at the same point, and so onLoad event and DOMContent 501bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // event lines really wouldn't make much sense here, so don't render them. 502bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Additionally, if the calculator doesn't have the computePercentageFromEventTime 503bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // function defined, we are probably sorting by size, and event times aren't relevant 504bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // in this case. 505bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 506bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 507bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 508bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.removeEventDividers(); 509bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceLoadTime !== -1) { 510bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percent = this.calculator.computePercentageFromEventTime(this._mainResourceLoadTime); 511bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 512bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var loadDivider = document.createElement("div"); 513bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDivider.className = "network-event-divider network-red-divider"; 514bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 515bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var loadDividerPadding = document.createElement("div"); 516bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.className = "network-event-divider-padding"; 517bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.title = WebInspector.UIString("Load event fired"); 518bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.appendChild(loadDivider); 519bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen loadDividerPadding.style.left = percent + "%"; 520bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(loadDividerPadding); 521bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 522f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 523bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceDOMContentTime !== -1) { 524bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percent = this.calculator.computePercentageFromEventTime(this._mainResourceDOMContentTime); 525bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 526bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var domContentDivider = document.createElement("div"); 527bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDivider.className = "network-event-divider network-blue-divider"; 528f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 529bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var domContentDividerPadding = document.createElement("div"); 530bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.className = "network-event-divider-padding"; 531bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.title = WebInspector.UIString("DOMContent event fired"); 532bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.appendChild(domContentDivider); 533bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen domContentDividerPadding.style.left = percent + "%"; 534bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(domContentDividerPadding); 535bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 536bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 537bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 538bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshIfNeeded: function() 539bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 540bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._needsRefresh) 541bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.refresh(); 542bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 543bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 544bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _invalidateAllItems: function() 545bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 546bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = this._resources.slice(); 547bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 548bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 549bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get calculator() 550bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 551bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return this._calculator; 552bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 553bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 554bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set calculator(x) 555bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 556bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!x || this._calculator === x) 557bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 558bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 559bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator = x; 560bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator.reset(); 561bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 562bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._invalidateAllItems(); 563bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.refresh(); 564bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 565bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 566bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _resourceGridNode: function(resource) 567bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 5682bde8e466a4451c7319e3a072d118917957d6554Steve Block return this._resourceGridNodes[resource.__gridNodeId]; 5692bde8e466a4451c7319e3a072d118917957d6554Steve Block }, 5702bde8e466a4451c7319e3a072d118917957d6554Steve Block 5712bde8e466a4451c7319e3a072d118917957d6554Steve Block _createResourceGridNode: function(resource) 5722bde8e466a4451c7319e3a072d118917957d6554Steve Block { 5732bde8e466a4451c7319e3a072d118917957d6554Steve Block var node = new WebInspector.NetworkDataGridNode(this, resource); 5742bde8e466a4451c7319e3a072d118917957d6554Steve Block resource.__gridNodeId = this._lastResourceGridNodeId++; 5752bde8e466a4451c7319e3a072d118917957d6554Steve Block this._resourceGridNodes[resource.__gridNodeId] = node; 5762bde8e466a4451c7319e3a072d118917957d6554Steve Block return node; 577bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 578bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 579bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen revealAndSelectItem: function(resource) 580bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 581bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var node = this._resourceGridNode(resource); 582bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (node) { 583bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.reveal(); 584bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.select(true); 585bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 586bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 587bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 588bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen addEventDivider: function(divider) 589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 590bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineGrid.addEventDivider(divider); 591bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 592bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 593bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createStatusbarButtons: function() 594bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 59528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle = new WebInspector.StatusBarButton(WebInspector.UIString("Preserve Log upon Navigation"), "record-profile-status-bar-item"); 59628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle.addEventListener("click", this._onPreserveLogClicked.bind(this), false); 59728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 598bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-status-bar-item"); 599a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._clearButton.addEventListener("click", this._reset.bind(this), false); 600bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 601bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton = new WebInspector.StatusBarButton(WebInspector.UIString("Use small resource rows."), "network-larger-resources-status-bar-item"); 60228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._largerResourcesButton.toggled = WebInspector.settings.resourcesLargeRows; 603e14391e94c850b8bd03680c23b38978db68687a8John Reck this._largerResourcesButton.addEventListener("click", this._toggleLargerResources.bind(this), false); 604bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 605bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 606bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set mainResourceLoadTime(x) 607bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 608bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceLoadTime === x) 609bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 610f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 611bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = x || -1; 612bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Update the dividers to draw the new line 613bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 614bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 615bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 616bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen set mainResourceDOMContentTime(x) 617bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 618bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._mainResourceDOMContentTime === x) 619bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 620bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 621bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = x || -1; 622bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 623bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 624bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 625bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen show: function() 626bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 627bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.show.call(this); 628bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshIfNeeded(); 629bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) 631bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.visibleView.show(this._viewsContainerElement); 632bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 633bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 634a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 635a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 636a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch hide: function() 637a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 638a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.Panel.prototype.hide.call(this); 639a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._popoverHelper.hidePopup(); 640bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 641bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 642bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get searchableViews() 643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 644bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var views = []; 645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return views; 646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 647bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 648bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen searchMatchFound: function(view, matches) 649bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 650bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNode(view.resource).searchMatches = matches; 651bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 652bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 653bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen searchCanceled: function(startingNewSearch) 654bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 655bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.searchCanceled.call(this, startingNewSearch); 656bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 657bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (startingNewSearch || !this._resources) 658bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 659bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 660bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 661bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen performSearch: function(query) 662bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 663bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.Panel.prototype.performSearch.call(this, query); 664bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 665bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 666bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refresh: function() 667bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 668bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._needsRefresh = false; 669bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if ("_refreshTimeout" in this) { 670bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen clearTimeout(this._refreshTimeout); 671bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this._refreshTimeout; 672bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 673bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 67428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var wasScrolledToLastRow = this._dataGrid.isScrolledToLastRow(); 675bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var staleItemsLength = this._staleResources.length; 676bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var boundariesChanged = false; 677bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 678bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < staleItemsLength; ++i) { 679bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = this._staleResources[i]; 680bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var node = this._resourceGridNode(resource); 681bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!node) { 682bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Create the timeline tree element and graph. 6832bde8e466a4451c7319e3a072d118917957d6554Steve Block node = this._createResourceGridNode(resource); 684bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.appendChild(node); 685bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 686bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen node.refreshResource(); 687bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 688bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.calculator.updateBoundaries(resource)) 689bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen boundariesChanged = true; 690bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 691bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 692bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (boundariesChanged) { 693bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // The boundaries changed, so all item graphs are stale. 694bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._invalidateAllItems(); 695bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen staleItemsLength = this._staleResources.length; 696bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 697bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 698bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < staleItemsLength; ++i) 699bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNode(this._staleResources[i]).refreshGraph(this.calculator); 700bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 701bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = []; 702bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sortItems(); 703a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._updateSummaryBar(); 70481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._updateOffscreenRows(); 705bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.updateWidths(); 70628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 70728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (wasScrolledToLastRow) 70828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._dataGrid.scrollToLastRow(); 70928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu }, 71028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 71128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu _onPreserveLogClicked: function(e) 71228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu { 71328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._preserveLogToggle.toggled = !this._preserveLogToggle.toggled; 71428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu }, 71528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 716a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _reset: function() 717bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 718bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper.hidePopup(); 719a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._closeVisibleResource(); 720bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 721a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleGridMode(); 722bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 723bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Begin reset timeline 724bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._calculator) 725bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._calculator.reset(); 726bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 727bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resources = []; 728e14391e94c850b8bd03680c23b38978db68687a8John Reck this._resourcesById = {}; 72928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._resourcesByURL = {}; 730bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources = []; 731bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._resourceGridNodes = {}; 732bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 733bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.removeChildren(); 734bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._updateDividersIfNeeded(true); 735bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // End reset timeline. 736a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 737bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceLoadTime = -1; 738bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._mainResourceDOMContentTime = -1; 739f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 740bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._viewsContainerElement.removeChildren(); 74128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._viewsContainerElement.appendChild(this._closeButtonElement); 74281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._updateSummaryBar(); 74381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebInspector.extensionServer.resetResources(); 744bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 745bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 746e14391e94c850b8bd03680c23b38978db68687a8John Reck get resources() 747e14391e94c850b8bd03680c23b38978db68687a8John Reck { 74865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return this._resources; 749e14391e94c850b8bd03680c23b38978db68687a8John Reck }, 750e14391e94c850b8bd03680c23b38978db68687a8John Reck 75165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch resourceById: function(id) 752bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 75365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return this._resourcesById[id]; 75465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 755bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 756ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _onResourceStarted: function(event) 757ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 758ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._appendResource(event.data); 759ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 760ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 761ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _appendResource: function(resource) 76265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 76365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resources.push(resource); 76465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resourcesById[resource.identifier] = resource; 76565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resourcesByURL[resource.url] = resource; 76628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 76765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Pull all the redirects of the main resource upon commit load. 76865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (resource.redirects) { 76965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (var i = 0; i < resource.redirects.length; ++i) 770ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(resource.redirects[i]); 77128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 77228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 773ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(resource); 774ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch }, 775ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 776ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _onResourceUpdated: function(event) 777ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 778ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch this._refreshResource(event.data); 77965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 78065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 781ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch _refreshResource: function(resource) 78265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 783bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._staleResources.push(resource); 784bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._scheduleRefresh(); 785f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 786cad810f21b803229eb11403f9209855525a25d57Steve Block var oldView = WebInspector.ResourceView.existingResourceViewForResource(resource); 7874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!oldView) 788bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 789bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 790cad810f21b803229eb11403f9209855525a25d57Steve Block if (WebInspector.ResourceView.resourceViewTypeMatchesResource(resource)) 7914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 792bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 793cad810f21b803229eb11403f9209855525a25d57Steve Block var newView = WebInspector.ResourceView.recreateResourceView(resource); 7944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView === oldView) 7954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView = newView; 796bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 797bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 79865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch clear: function() 79965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 80065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (this._preserveLogToggle.toggled) 80165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 80265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._reset(); 80365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 80465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8052bde8e466a4451c7319e3a072d118917957d6554Steve Block _onFrameCommitLoad: function(event) 80665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 8072bde8e466a4451c7319e3a072d118917957d6554Steve Block if (event.data.frame.parentId) 8082bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 8092bde8e466a4451c7319e3a072d118917957d6554Steve Block 8102bde8e466a4451c7319e3a072d118917957d6554Steve Block // Main frame committed load. 81165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (this._preserveLogToggle.toggled) 81265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 81365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8142bde8e466a4451c7319e3a072d118917957d6554Steve Block // Preserve provisional load resources. 8152bde8e466a4451c7319e3a072d118917957d6554Steve Block var loaderId = event.data.loaderId; 8162bde8e466a4451c7319e3a072d118917957d6554Steve Block var resourcesToPreserve = []; 8172bde8e466a4451c7319e3a072d118917957d6554Steve Block for (var i = 0; i < this._resources.length; ++i) { 8182bde8e466a4451c7319e3a072d118917957d6554Steve Block var resource = this._resources[i]; 8192bde8e466a4451c7319e3a072d118917957d6554Steve Block if (resource.loaderId === loaderId) 8202bde8e466a4451c7319e3a072d118917957d6554Steve Block resourcesToPreserve.push(resource); 8212bde8e466a4451c7319e3a072d118917957d6554Steve Block } 8222bde8e466a4451c7319e3a072d118917957d6554Steve Block 82365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._reset(); 8242bde8e466a4451c7319e3a072d118917957d6554Steve Block 8252bde8e466a4451c7319e3a072d118917957d6554Steve Block // Restore preserved items. 8262bde8e466a4451c7319e3a072d118917957d6554Steve Block for (var i = 0; i < resourcesToPreserve.length; ++i) 8272bde8e466a4451c7319e3a072d118917957d6554Steve Block this._appendResource(resourcesToPreserve[i]); 82865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }, 82965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch canShowAnchorLocation: function(anchor) 831bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 8322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return !!this._resourcesByURL[anchor.href]; 833bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 834bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch showAnchorLocation: function(anchor) 836bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 8372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._showResource(this._resourcesByURL[anchor.href], anchor.getAttribute("line_number") - 1); 838bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 839bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 840a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _showResource: function(resource, line) 841bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 842bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!resource) 843bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 844bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 845bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._popoverHelper.hidePopup(); 846bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 847a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._toggleViewingResourceMode(); 848bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) { 8504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView.detach(); 8514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang delete this.visibleView; 8524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 853bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var view = new WebInspector.NetworkItemView(resource); 855bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen view.show(this._viewsContainerElement); 8564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView = view; 857bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 858bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.updateSidebarWidth(); 859bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 860bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 861a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _closeVisibleResource: function() 862bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 863a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.removeStyleClass("viewing-resource"); 864bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 8654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this.visibleView) { 8664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this.visibleView.detach(); 8674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang delete this.visibleView; 8684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 869bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 870bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._lastSelectedGraphTreeElement) 871bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._lastSelectedGraphTreeElement.select(true); 872bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 873bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.updateSidebarWidth(); 874bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 875bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 876bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _toggleLargerResources: function() 877bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 87828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WebInspector.settings.resourcesLargeRows = !WebInspector.settings.resourcesLargeRows; 87928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._setLargerResources(WebInspector.settings.resourcesLargeRows); 880bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 881bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 882bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _setLargerResources: function(enabled) 883bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 884bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.toggled = enabled; 885bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!enabled) { 886bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.title = WebInspector.UIString("Use large resource rows."); 887bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.element.addStyleClass("small"); 888a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.addStyleClass("small"); 889e14391e94c850b8bd03680c23b38978db68687a8John Reck this._viewsContainerElement.addStyleClass("small"); 890bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 891bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._largerResourcesButton.title = WebInspector.UIString("Use small resource rows."); 892bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._dataGrid.element.removeStyleClass("small"); 893a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineGrid.element.removeStyleClass("small"); 894e14391e94c850b8bd03680c23b38978db68687a8John Reck this._viewsContainerElement.removeStyleClass("small"); 895bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 89681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this._updateOffscreenRows(); 897bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 898bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 899bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _getPopoverAnchor: function(element) 900bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 901bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var anchor = element.enclosingNodeOrSelfWithClass("network-graph-bar") || element.enclosingNodeOrSelfWithClass("network-graph-label"); 902bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!anchor) 903bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return null; 904bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = anchor.parentElement.resource; 905bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource && resource.timing ? anchor : null; 906bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 907bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 908bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _showPopover: function(anchor) 909bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 910bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = anchor.parentElement.resource; 9114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var tableElement = WebInspector.ResourceTimingView.createTimingTable(resource); 912bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var popover = new WebInspector.Popover(tableElement); 913bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen popover.show(anchor); 914bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return popover; 915bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 916bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 917a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _toggleGridMode: function() 918bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 919a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode) { 920a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewingResourceMode = false; 921a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.removeStyleClass("viewing-resource"); 922a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("viewing-resource-mode"); 923a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.addStyleClass("hidden"); 924a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.style.right = 0; 925a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.sidebarElement.style.removeProperty("width"); 9264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (this._dataGrid.selectedNode) 9274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._dataGrid.selectedNode.selected = false; 928a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 929a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 930a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._briefGrid) { 931a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("full-grid-mode"); 932a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("brief-grid-mode"); 933a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 934a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("method"); 935a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("status"); 936a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("type"); 937a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("size"); 938a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("time"); 939a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 940a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 941a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 20; 942a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.timeline = 80; 943a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } else { 944a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("full-grid-mode"); 945a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("brief-grid-mode"); 946a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 947a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("method"); 948a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("status"); 949a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("type"); 950a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("size"); 951a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("time"); 952a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 953a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 954a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 20; 955a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.method = 7; 956a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.status = 8; 957e14391e94c850b8bd03680c23b38978db68687a8John Reck widths.type = 10; 958a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.size = 10; 959a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.time = 10; 960e14391e94c850b8bd03680c23b38978db68687a8John Reck widths.timeline = 37; 961a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 962a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 963a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.showColumn("timeline"); 964a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.applyColumnWidthsMap(widths); 965a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 966a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 967a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 968a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _toggleViewingResourceMode: function() 969a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 970a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (this._viewingResourceMode) 971a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 972a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewingResourceMode = true; 973a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._preservedColumnWidths = this._dataGrid.columnWidthsMap(); 974a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 975a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.element.addStyleClass("viewing-resource"); 976a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.addStyleClass("viewing-resource-mode"); 977a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("full-grid-mode"); 978a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.element.removeStyleClass("brief-grid-mode"); 979a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 980a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("method"); 981a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("status"); 982a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("type"); 983a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("size"); 984a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("time"); 985a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.hideColumn("timeline"); 986a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 987a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._viewsContainerElement.removeStyleClass("hidden"); 988a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this.updateSidebarWidth(200); 989a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 990a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var widths = {}; 991a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch widths.name = 100; 992a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._dataGrid.applyColumnWidthsMap(widths); 993f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 994f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 995f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _contextMenu: function(event) 996f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 997f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var contextMenu = new WebInspector.ContextMenu(); 998f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var gridNode = this._dataGrid.dataGridNodeFromNode(event.target); 999f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var resource = gridNode && gridNode._resource; 1000f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (resource) 10012bde8e466a4451c7319e3a072d118917957d6554Steve Block contextMenu.appendItem(WebInspector.UIString("Copy entry as HAR"), this._exportResource.bind(this, resource)); 10022bde8e466a4451c7319e3a072d118917957d6554Steve Block contextMenu.appendItem(WebInspector.UIString("Copy network log as HAR"), this._exportAll.bind(this)); 1003f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch contextMenu.show(event); 1004f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1005f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1006f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _exportAll: function() 1007f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1008f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var harArchive = { 1009f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log: (new WebInspector.HARLog()).build() 1010f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 10112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorFrontendHost.copyText(JSON.stringify(harArchive)); 1012f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }, 1013f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1014f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _exportResource: function(resource) 1015f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 1016f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch var har = (new WebInspector.HAREntry(resource)).build(); 10172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block InspectorFrontendHost.copyText(JSON.stringify(har)); 10182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 10192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _updateOffscreenRows: function(e) 10212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 10222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var dataTableBody = this._dataGrid.dataTableBody; 10232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rows = dataTableBody.children; 10242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var recordsCount = rows.length; 10252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (recordsCount < 2) 10262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; // Filler row only. 10272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var visibleTop = this._dataGrid.scrollContainer.scrollTop; 10292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var visibleBottom = visibleTop + this._dataGrid.scrollContainer.offsetHeight; 10302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rowHeight = 0; 10322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Filler is at recordsCount - 1. 10342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var unfilteredRowIndex = 0; 10352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block for (var i = 0; i < recordsCount - 1; ++i) { 10362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var row = rows[i]; 10372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var dataGridNode = this._dataGrid.dataGridNodeFromNode(row); 10392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (dataGridNode.isFilteredOut()) { 10402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.removeStyleClass("offscreen"); 10412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block continue; 10422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 10432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!rowHeight) 10452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block rowHeight = row.offsetHeight; 10462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var rowIsVisible = unfilteredRowIndex * rowHeight < visibleBottom && (unfilteredRowIndex + 1) * rowHeight > visibleTop; 10482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (rowIsVisible !== row.rowIsVisible) { 10492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (rowIsVisible) 10502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.removeStyleClass("offscreen"); 10512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 10522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.addStyleClass("offscreen"); 10532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block row.rowIsVisible = rowIsVisible; 10542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 10552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block unfilteredRowIndex++; 10562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1057bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1058bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1059bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1060bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkPanel.prototype.__proto__ = WebInspector.Panel.prototype; 1061bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1062bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkBaseCalculator = function() 1063bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1064bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1065bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1066bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkBaseCalculator.prototype = { 1067bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeSummaryValues: function(items) 1068bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1069bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var total = 0; 1070bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryValues = {}; 1071bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1072bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var itemsLength = items.length; 1073bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < itemsLength; ++i) { 1074bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var item = items[i]; 1075bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var value = this._value(item); 1076bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof value === "undefined") 1077bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1078bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!(item.category.name in categoryValues)) 1079bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[item.category.name] = 0; 1080bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[item.category.name] += value; 1081bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen total += value; 1082bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1083bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1084bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {categoryValues: categoryValues, total: total}; 1085bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1086bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1087bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphPercentages: function(item) 1088bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1089bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {start: 0, middle: 0, end: (this._value(item) / this.boundarySpan) * 100}; 1090bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1091bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1092bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphLabels: function(item) 1093bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1094bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const label = this.formatValue(this._value(item)); 1095bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: label, right: label, tooltip: label}; 1096bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1097bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1098bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen get boundarySpan() 1099bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return this.maximumBoundary - this.minimumBoundary; 1101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen updateBoundaries: function(item) 1104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.minimumBoundary = 0; 1106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var value = this._value(item); 1108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof this.maximumBoundary === "undefined" || value > this.maximumBoundary) { 1109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.maximumBoundary = value; 1110bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return true; 1111bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return false; 1113bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1114bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1115bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen reset: function() 1116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this.minimumBoundary; 1118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this.maximumBoundary; 1119bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1120bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1121bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _value: function(item) 1122bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1123bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1124bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1125bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1126bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1128bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return value.toString(); 1129bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1132bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator = function(startAtZero) 1133bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1134bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkBaseCalculator.call(this); 1135bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.startAtZero = startAtZero; 1136bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1137bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1138bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator.prototype = { 1139bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeSummaryValues: function(resources) 1140bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1141bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesByCategory = {}; 1142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesLength = resources.length; 1143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < resourcesLength; ++i) { 1144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = resources[i]; 1145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!(resource.category.name in resourcesByCategory)) 1146bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[resource.category.name] = []; 1147bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[resource.category.name].push(resource); 1148bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1149bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1150bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var earliestStart; 1151bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var latestEnd; 1152bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryValues = {}; 1153bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var category in resourcesByCategory) { 1154bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen resourcesByCategory[category].sort(WebInspector.Resource.CompareByTime); 1155bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] = 0; 1156bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1157bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var segment = {start: -1, end: -1}; 1158bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var categoryResources = resourcesByCategory[category]; 1160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourcesLength = categoryResources.length; 1161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen for (var i = 0; i < resourcesLength; ++i) { 1162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resource = categoryResources[i]; 1163bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime === -1 || resource.endTime === -1) 1164bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1165bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1166bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof earliestStart === "undefined") 1167bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen earliestStart = resource.startTime; 1168bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1169bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen earliestStart = Math.min(earliestStart, resource.startTime); 1170bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (typeof latestEnd === "undefined") 1172bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen latestEnd = resource.endTime; 1173bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1174bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen latestEnd = Math.max(latestEnd, resource.endTime); 1175bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1176bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime <= segment.end) { 1177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.end = Math.max(segment.end, resource.endTime); 1178bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen continue; 1179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1180bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1181bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] += segment.end - segment.start; 1182bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1183bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.start = resource.startTime; 1184bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen segment.end = resource.endTime; 1185bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1186bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1187bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Add the last segment 1188bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen categoryValues[category] += segment.end - segment.start; 1189bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1190bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1191bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {categoryValues: categoryValues, total: latestEnd - earliestStart}; 1192bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1193bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1194bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphPercentages: function(resource) 1195bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1196bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.startTime !== -1) 1197bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var start = ((resource.startTime - this.minimumBoundary) / this.boundarySpan) * 100; 1198bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1199bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var start = 0; 1200bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1201bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.responseReceivedTime !== -1) 1202bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var middle = ((resource.responseReceivedTime - this.minimumBoundary) / this.boundarySpan) * 100; 1203bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1204bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var middle = (this.startAtZero ? start : 100); 1205bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1206bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.endTime !== -1) 1207bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var end = ((resource.endTime - this.minimumBoundary) / this.boundarySpan) * 100; 1208bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1209bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var end = (this.startAtZero ? middle : 100); 1210bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1211bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.startAtZero) { 1212bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen end -= start; 1213bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen middle -= start; 1214bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen start = 0; 1215bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1216bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1217bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {start: start, middle: middle, end: end}; 1218bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1219f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1220bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computePercentageFromEventTime: function(eventTime) 1221bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1222bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // This function computes a percentage in terms of the total loading time 1223bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // of a specific event. If startAtZero is set, then this is useless, and we 1224bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // want to return 0. 1225bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (eventTime !== -1 && !this.startAtZero) 1226bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return ((eventTime - this.minimumBoundary) / this.boundarySpan) * 100; 1227bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1228bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1229bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1230bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1231bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen computeBarGraphLabels: function(resource) 1232bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1233bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightLabel = ""; 1234bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.responseReceivedTime !== -1 && resource.endTime !== -1) 1235bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen rightLabel = this.formatValue(resource.endTime - resource.responseReceivedTime); 1236bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1237bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var hasLatency = resource.latency > 0; 1238bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (hasLatency) 1239bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftLabel = this.formatValue(resource.latency); 1240bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1241bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftLabel = rightLabel; 1242bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1243bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.timing) 1244bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: leftLabel, right: rightLabel}; 1245bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1246bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (hasLatency && rightLabel) { 1247bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var total = this.formatValue(resource.duration); 1248bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s latency, %s download (%s total)", leftLabel, rightLabel, total); 1249bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else if (hasLatency) 1250bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s latency", leftLabel); 1251bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else if (rightLabel) 1252bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = WebInspector.UIString("%s download", rightLabel); 1253bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1254bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (resource.cached) 1255bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen tooltip = WebInspector.UIString("%s (from cache)", tooltip); 1256bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return {left: leftLabel, right: rightLabel, tooltip: tooltip}; 1257bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1258bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1259bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen updateBoundaries: function(resource) 1260bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1261bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var didChange = false; 1262bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1263bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var lowerBound; 1264bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this.startAtZero) 1265bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lowerBound = 0; 1266bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1267bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lowerBound = this._lowerBound(resource); 1268bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1269bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (lowerBound !== -1 && (typeof this.minimumBoundary === "undefined" || lowerBound < this.minimumBoundary)) { 1270bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.minimumBoundary = lowerBound; 1271bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen didChange = true; 1272bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1273bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1274bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var upperBound = this._upperBound(resource); 1275bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (upperBound !== -1 && (typeof this.maximumBoundary === "undefined" || upperBound > this.maximumBoundary)) { 1276bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this.maximumBoundary = upperBound; 1277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen didChange = true; 1278bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1279bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1280bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return didChange; 1281bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1282bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1283bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1284bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 128565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1286bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1287bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1288bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _lowerBound: function(resource) 1289bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1290bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1291bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1292bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1293bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1294bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1296bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1297bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTimeCalculator.prototype.__proto__ = WebInspector.NetworkBaseCalculator.prototype; 1300bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1301bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator = function() 1302bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1303bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkTimeCalculator.call(this, false); 1304bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1305bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1306bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator.prototype = { 1307bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1308bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 130965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1310bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1311bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1312bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _lowerBound: function(resource) 1313bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1314bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.startTime; 1315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1316bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1318bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.endTime; 1320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1322bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1323bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferTimeCalculator.prototype.__proto__ = WebInspector.NetworkTimeCalculator.prototype; 1324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1325bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator = function() 1326bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1327bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebInspector.NetworkTimeCalculator.call(this, true); 1328bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1329bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1330bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator.prototype = { 1331bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen formatValue: function(value) 1332bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 133365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return Number.secondsToString(value); 1334bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1335bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1336bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _upperBound: function(resource) 1337bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1338bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return resource.duration; 1339bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1340bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1341bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1342bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkTransferDurationCalculator.prototype.__proto__ = WebInspector.NetworkTimeCalculator.prototype; 1343bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1344a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode = function(panel, resource) 1345bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1346a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebInspector.DataGridNode.call(this, {}); 1347a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._panel = panel; 1348a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._resource = resource; 1349bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1350bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1351a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.prototype = { 1352a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createCells: function() 1353bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1354a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell = this._createDivInTD("name"); 1355a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._methodCell = this._createDivInTD("method"); 1356a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._statusCell = this._createDivInTD("status"); 1357a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._typeCell = this._createDivInTD("type"); 1358a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._sizeCell = this._createDivInTD("size"); 1359a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timeCell = this._createDivInTD("time"); 1360a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._createTimelineCell(); 13614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._nameCell.addEventListener("click", this.select.bind(this), false); 13622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._nameCell.addEventListener("dblclick", this._openInNewTab.bind(this), false); 13632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 13642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block isFilteredOut: function() 13662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 13672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!this._panel._hiddenCategories.all) 13682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 13692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return this._resource.category.name in this._panel._hiddenCategories; 1370bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1371bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1372a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch select: function() 1373bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1374a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._panel._showResource(this._resource); 13754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WebInspector.DataGridNode.prototype.select.apply(this, arguments); 1376bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1377bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 13782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _openInNewTab: function() 13792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 13802bde8e466a4451c7319e3a072d118917957d6554Steve Block PageAgent.openInInspectedWindow(this._resource.url); 13812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 13822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1383a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch get selectable() 1384bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 13854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!this._panel._viewingResourceMode) 13864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return false; 13872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return !this.isFilteredOut(); 1388bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1389bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1390a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _createDivInTD: function(columnIdentifier) 1391bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1392bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var td = document.createElement("td"); 1393a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch td.className = columnIdentifier + "-column"; 1394bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var div = document.createElement("div"); 1395bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen td.appendChild(div); 1396bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.appendChild(td); 1397bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return div; 1398bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1399bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1400bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _createTimelineCell: function() 1401bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1402bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement = document.createElement("div"); 1403bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.className = "network-graph-side"; 1404bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1405bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement = document.createElement("div"); 1406bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // this._barAreaElement.className = "network-graph-bar-area hidden"; 1407bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.className = "network-graph-bar-area"; 1408bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.resource = this._resource; 1409bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.appendChild(this._barAreaElement); 1410bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1411bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement = document.createElement("div"); 1412bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.className = "network-graph-bar waiting"; 1413bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._barLeftElement); 1414bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1415bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement = document.createElement("div"); 1416bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.className = "network-graph-bar"; 1417bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._barRightElement); 1418bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 14194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1420bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement = document.createElement("div"); 1421bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.className = "network-graph-label waiting"; 1422bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._labelLeftElement); 1423bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1424bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement = document.createElement("div"); 1425bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.className = "network-graph-label"; 1426bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.appendChild(this._labelRightElement); 1427bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 14284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._graphElement.addEventListener("mouseover", this._refreshLabelPositions.bind(this), false); 14294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1430bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineCell = document.createElement("td"); 1431a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._timelineCell.className = "timeline-column"; 1432bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.appendChild(this._timelineCell); 1433bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timelineCell.appendChild(this._graphElement); 1434bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1435bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1436bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refreshResource: function() 1437bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1438a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._refreshNameCell(); 1439bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1440bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._methodCell.textContent = this._resource.requestMethod; 1441bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1442bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshStatusCell(); 1443bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1444bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.mimeType) { 1445bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.removeStyleClass("network-dim-cell"); 1446bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.textContent = this._resource.mimeType; 1447bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1448bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.addStyleClass("network-dim-cell"); 1449bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._typeCell.textContent = WebInspector.UIString("Pending"); 1450bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1451bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1452bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshSizeCell(); 1453bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._refreshTimeCell(); 1454bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1455bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.cached) 1456bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.addStyleClass("resource-cached"); 1457bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1458f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch this._element.addStyleClass("network-item"); 1459bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this._element.hasStyleClass("network-category-" + this._resource.category.name)) { 1460bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.removeMatchingStyleClasses("network-category-\\w+"); 1461bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._element.addStyleClass("network-category-" + this._resource.category.name); 1462bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1463bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1464bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1465a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _refreshNameCell: function() 1466bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1467a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.removeChildren(); 1468bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1469bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.category === WebInspector.resourceCategories.images) { 1470bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var previewImage = document.createElement("img"); 1471bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen previewImage.className = "image-network-icon-preview"; 147265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch this._resource.populateImageSource(previewImage); 1473bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1474bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var iconElement = document.createElement("div"); 1475bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.className = "icon"; 1476bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.appendChild(previewImage); 1477bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1478bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var iconElement = document.createElement("img"); 1479bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen iconElement.className = "icon"; 1480bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1481a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.appendChild(iconElement); 1482a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.appendChild(document.createTextNode(this._fileName())); 1483bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1484bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1485bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var subtitle = this._resource.displayDomain; 1486bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1487bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.path && this._resource.lastPathComponent) { 1488bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var lastPathComponentIndex = this._resource.path.lastIndexOf("/" + this._resource.lastPathComponent); 1489bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (lastPathComponentIndex != -1) 1490bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen subtitle += this._resource.path.substring(0, lastPathComponentIndex); 1491bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1492bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1493a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._appendSubtitle(this._nameCell, subtitle); 1494a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch this._nameCell.title = this._resource.url; 1495bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1496bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1497bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _fileName: function() 1498bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1499bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var fileName = this._resource.displayName; 1500bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.queryString) 1501bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen fileName += "?" + this._resource.queryString; 1502bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return fileName; 1503bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1504bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1505bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshStatusCell: function() 1506bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1507bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.removeChildren(); 1508bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 15092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (this._resource.failed) { 15102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (this._resource.canceled) 15112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._statusCell.textContent = WebInspector.UIString("(canceled)"); 15122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 15132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._statusCell.textContent = WebInspector.UIString("(failed)"); 15142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._statusCell.addStyleClass("network-dim-cell"); 15152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 15162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 15172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 15184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var fromCache = this._resource.cached; 15194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (fromCache) { 15204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.textContent = WebInspector.UIString("(from cache)"); 15214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.addStyleClass("network-dim-cell"); 15224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 15234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 15244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 15254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang this._statusCell.removeStyleClass("network-dim-cell"); 1526bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.statusCode) { 1527bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.appendChild(document.createTextNode(this._resource.statusCode)); 1528bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.removeStyleClass("network-dim-cell"); 1529bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._statusCell, this._resource.statusText); 1530bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.title = this._resource.statusCode + " " + this._resource.statusText; 1531bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 15322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (this._resource.isDataURL() && this._resource.finished) 15332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._statusCell.textContent = WebInspector.UIString("(data url)"); 15342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 15352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this._statusCell.textContent = WebInspector.UIString("Pending"); 1536bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._statusCell.addStyleClass("network-dim-cell"); 1537bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1538bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1539bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1540bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshSizeCell: function() 1541bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1542bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var resourceSize = typeof this._resource.resourceSize === "number" ? Number.bytesToString(this._resource.resourceSize) : "?"; 1543bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var transferSize = typeof this._resource.transferSize === "number" ? Number.bytesToString(this._resource.transferSize) : "?"; 1544bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var fromCache = this._resource.cached; 1545bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.textContent = !fromCache ? resourceSize : WebInspector.UIString("(from cache)"); 1546bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (fromCache) 1547bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.addStyleClass("network-dim-cell"); 1548bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else 1549bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._sizeCell.removeStyleClass("network-dim-cell"); 1550bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!fromCache) 1551bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._sizeCell, transferSize); 1552bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1553bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1554bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshTimeCell: function() 1555bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1556bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._resource.duration > 0) { 1557bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.removeStyleClass("network-dim-cell"); 1558bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.textContent = Number.secondsToString(this._resource.duration); 1559bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._appendSubtitle(this._timeCell, Number.secondsToString(this._resource.latency)); 1560bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1561bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.addStyleClass("network-dim-cell"); 1562bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._timeCell.textContent = WebInspector.UIString("Pending"); 1563bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1564bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1565bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1566bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _appendSubtitle: function(cellElement, subtitleText) 1567bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1568bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var subtitleElement = document.createElement("div"); 1569a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch subtitleElement.className = "network-cell-subtitle"; 1570bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen subtitleElement.textContent = subtitleText; 1571bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen cellElement.appendChild(subtitleElement); 1572bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1573bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1574bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen refreshGraph: function(calculator) 1575bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1576bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var percentages = calculator.computeBarGraphPercentages(this._resource); 1577bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._percentages = percentages; 1578bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1579bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barAreaElement.removeStyleClass("hidden"); 1580bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1581bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!this._graphElement.hasStyleClass("network-category-" + this._resource.category.name)) { 1582bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.removeMatchingStyleClasses("network-category-\\w+"); 1583bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._graphElement.addStyleClass("network-category-" + this._resource.category.name); 1584bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1585bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1586bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.style.setProperty("left", percentages.start + "%"); 1587bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.style.setProperty("right", (100 - percentages.end) + "%"); 1588bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.style.setProperty("right", (100 - percentages.end) + "%"); 1590bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.style.setProperty("left", percentages.middle + "%"); 1591bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 15924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang var labels = calculator.computeBarGraphLabels(this._resource); 1593bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.textContent = labels.left; 1594bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.textContent = labels.right; 1595bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1596bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var tooltip = (labels.tooltip || ""); 1597bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barLeftElement.title = tooltip; 1598bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.title = tooltip; 1599bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.title = tooltip; 1600bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._barRightElement.title = tooltip; 1601bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen }, 1602bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1603bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _refreshLabelPositions: function() 1604bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 1605a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!this._percentages) 1606a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 1607bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.removeProperty("left"); 1608bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.removeProperty("right"); 1609bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.removeStyleClass("before"); 1610bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.removeStyleClass("hidden"); 1611bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1612bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.removeProperty("left"); 1613bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.removeProperty("right"); 1614bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.removeStyleClass("after"); 1615bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.removeStyleClass("hidden"); 1616bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1617bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelPadding = 10; 1618bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const barRightElementOffsetWidth = this._barRightElement.offsetWidth; 1619bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const barLeftElementOffsetWidth = this._barLeftElement.offsetWidth; 1620bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1621bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (this._barLeftElement) { 1622bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftBarWidth = barLeftElementOffsetWidth - labelPadding; 1623bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightBarWidth = (barRightElementOffsetWidth - barLeftElementOffsetWidth) - labelPadding; 1624bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1625bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftBarWidth = (barLeftElementOffsetWidth - barRightElementOffsetWidth) - labelPadding; 1626bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightBarWidth = barRightElementOffsetWidth - labelPadding; 1627bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1628bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1629bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelLeftElementOffsetWidth = this._labelLeftElement.offsetWidth; 1630bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelRightElementOffsetWidth = this._labelRightElement.offsetWidth; 1631bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1632bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelBefore = (labelLeftElementOffsetWidth > leftBarWidth); 1633bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const labelAfter = (labelRightElementOffsetWidth > rightBarWidth); 1634bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const graphElementOffsetWidth = this._graphElement.offsetWidth; 1635bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1636bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore && (graphElementOffsetWidth * (this._percentages.start / 100)) < (labelLeftElementOffsetWidth + 10)) 1637bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var leftHidden = true; 1638bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1639bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelAfter && (graphElementOffsetWidth * ((100 - this._percentages.end) / 100)) < (labelRightElementOffsetWidth + 10)) 1640bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var rightHidden = true; 1641bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1642bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (barLeftElementOffsetWidth == barRightElementOffsetWidth) { 1643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // The left/right label data are the same, so a before/after label can be replaced by an on-bar label. 1644bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore && !labelAfter) 1645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen leftHidden = true; 1646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else if (labelAfter && !labelBefore) 1647bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen rightHidden = true; 1648bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1649bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1650bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelBefore) { 1651bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (leftHidden) 1652bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.addStyleClass("hidden"); 1653bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("right", (100 - this._percentages.start) + "%"); 1654bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.addStyleClass("before"); 1655bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1656bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("left", this._percentages.start + "%"); 1657bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelLeftElement.style.setProperty("right", (100 - this._percentages.middle) + "%"); 1658bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1659bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1660bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (labelAfter) { 1661bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (rightHidden) 1662bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.addStyleClass("hidden"); 1663bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("left", this._percentages.end + "%"); 1664bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.addStyleClass("after"); 1665bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 1666bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("left", this._percentages.middle + "%"); 1667bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen this._labelRightElement.style.setProperty("right", (100 - this._percentages.end) + "%"); 1668bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1669bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 1670bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1671bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1672a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.NameComparator = function(a, b) 1673bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1674bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var aFileName = a._resource.displayName + (a._resource.queryString ? a._resource.queryString : ""); 1675bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var bFileName = b._resource.displayName + (b._resource.queryString ? b._resource.queryString : ""); 1676bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (aFileName > bFileName) 1677bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 1; 1678bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (bFileName > aFileName) 1679bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return -1; 1680bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1681bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1682bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1683a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.SizeComparator = function(a, b) 1684a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 1685a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (b._resource.cached && !a._resource.cached) 1686a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 1; 1687a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (a._resource.cached && !b._resource.cached) 1688a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return -1; 1689a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1690a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (a._resource.resourceSize === b._resource.resourceSize) 1691a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 0; 1692a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1693a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return a._resource.resourceSize - b._resource.resourceSize; 1694a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 1695a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1696a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.NetworkDataGridNode.ResourcePropertyComparator = function(propertyName, revert, a, b) 1697bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1698bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var aValue = a._resource[propertyName]; 1699bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen var bValue = b._resource[propertyName]; 1700bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (aValue > bValue) 1701a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return revert ? -1 : 1; 1702bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (bValue > aValue) 1703a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return revert ? 1 : -1; 1704bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 1705bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1706bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1707bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenWebInspector.NetworkDataGridNode.prototype.__proto__ = WebInspector.DataGridNode.prototype; 1708