1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions are 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * met: 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Redistributions of source code must retain the above copyright 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer. 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Redistributions in binary form must reproduce the above 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * copyright notice, this list of conditions and the following disclaimer 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * in the documentation and/or other materials provided with the 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * distribution. 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Neither the name of Google Inc. nor the names of its 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * contributors may be used to endorse or promote products derived from 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * this software without specific prior written permission. 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20d0825bca7fe65beaee391d30da42e937db621564Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21d0825bca7fe65beaee391d30da42e937db621564Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22d0825bca7fe65beaee391d30da42e937db621564Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23d0825bca7fe65beaee391d30da42e937db621564Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24d0825bca7fe65beaee391d30da42e937db621564Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25d0825bca7fe65beaee391d30da42e937db621564Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26d0825bca7fe65beaee391d30da42e937db621564Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 30d0825bca7fe65beaee391d30da42e937db621564Steve Block 31d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsPanel = function() 32d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 33e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WebInspector.Panel.call(this, "audits"); 34d0825bca7fe65beaee391d30da42e937db621564Steve Block 35d0825bca7fe65beaee391d30da42e937db621564Steve Block this.createSidebar(); 36d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsTreeElement = new WebInspector.SidebarSectionTreeElement("", {}, true); 37d0825bca7fe65beaee391d30da42e937db621564Steve Block this.sidebarTree.appendChild(this.auditsTreeElement); 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.auditsTreeElement.listItemElement.addStyleClass("hidden"); 39d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsTreeElement.expand(); 40d0825bca7fe65beaee391d30da42e937db621564Steve Block 41d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsItemTreeElement = new WebInspector.AuditsSidebarTreeElement(); 42d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsTreeElement.appendChild(this.auditsItemTreeElement); 43d0825bca7fe65beaee391d30da42e937db621564Steve Block 44d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditResultsTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("RESULTS"), {}, true); 45d0825bca7fe65beaee391d30da42e937db621564Steve Block this.sidebarTree.appendChild(this.auditResultsTreeElement); 46d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditResultsTreeElement.expand(); 47d0825bca7fe65beaee391d30da42e937db621564Steve Block 485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear audit results."), "clear-status-bar-item"); 49d0825bca7fe65beaee391d30da42e937db621564Steve Block this.clearResultsButton.addEventListener("click", this._clearButtonClicked.bind(this), false); 50d0825bca7fe65beaee391d30da42e937db621564Steve Block 51d0825bca7fe65beaee391d30da42e937db621564Steve Block this.viewsContainerElement = document.createElement("div"); 52d0825bca7fe65beaee391d30da42e937db621564Steve Block this.viewsContainerElement.id = "audit-views"; 53d0825bca7fe65beaee391d30da42e937db621564Steve Block this.element.appendChild(this.viewsContainerElement); 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen this._constructCategories(); 565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen this._launcherView = new WebInspector.AuditLauncherView(this.initiateAudit.bind(this)); 585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen for (id in this.categoriesById) 595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen this._launcherView.addCategory(this.categoriesById[id]); 60d0825bca7fe65beaee391d30da42e937db621564Steve Block} 61d0825bca7fe65beaee391d30da42e937db621564Steve Block 62d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsPanel.prototype = { 63d0825bca7fe65beaee391d30da42e937db621564Steve Block get toolbarItemLabel() 64d0825bca7fe65beaee391d30da42e937db621564Steve Block { 65d0825bca7fe65beaee391d30da42e937db621564Steve Block return WebInspector.UIString("Audits"); 66d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 67d0825bca7fe65beaee391d30da42e937db621564Steve Block 68d0825bca7fe65beaee391d30da42e937db621564Steve Block get statusBarItems() 69d0825bca7fe65beaee391d30da42e937db621564Steve Block { 70d0825bca7fe65beaee391d30da42e937db621564Steve Block return [this.clearResultsButton.element]; 71d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 72d0825bca7fe65beaee391d30da42e937db621564Steve Block 73d0825bca7fe65beaee391d30da42e937db621564Steve Block get mainResourceLoadTime() 74d0825bca7fe65beaee391d30da42e937db621564Steve Block { 75d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._mainResourceLoadTime; 76d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 77d0825bca7fe65beaee391d30da42e937db621564Steve Block 78d0825bca7fe65beaee391d30da42e937db621564Steve Block set mainResourceLoadTime(x) 79d0825bca7fe65beaee391d30da42e937db621564Steve Block { 80d0825bca7fe65beaee391d30da42e937db621564Steve Block this._mainResourceLoadTime = x; 81d0825bca7fe65beaee391d30da42e937db621564Steve Block this._didMainResourceLoad(); 82d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 83d0825bca7fe65beaee391d30da42e937db621564Steve Block 84d0825bca7fe65beaee391d30da42e937db621564Steve Block get mainResourceDOMContentTime() 85d0825bca7fe65beaee391d30da42e937db621564Steve Block { 86d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._mainResourceDOMContentTime; 87d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 88d0825bca7fe65beaee391d30da42e937db621564Steve Block 89d0825bca7fe65beaee391d30da42e937db621564Steve Block set mainResourceDOMContentTime(x) 90d0825bca7fe65beaee391d30da42e937db621564Steve Block { 91d0825bca7fe65beaee391d30da42e937db621564Steve Block this._mainResourceDOMContentTime = x; 92d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 93d0825bca7fe65beaee391d30da42e937db621564Steve Block 94d0825bca7fe65beaee391d30da42e937db621564Steve Block get categoriesById() 95d0825bca7fe65beaee391d30da42e937db621564Steve Block { 96d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._auditCategoriesById; 97d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 98d0825bca7fe65beaee391d30da42e937db621564Steve Block 995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen addCategory: function(category) 1005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen { 1015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen this.categoriesById[category.id] = category; 1025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen this._launcherView.addCategory(category); 1035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen }, 1045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 1055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen getCategory: function(id) 1065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen { 1075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return this.categoriesById[id]; 1085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen }, 1095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 110d0825bca7fe65beaee391d30da42e937db621564Steve Block _constructCategories: function() 111d0825bca7fe65beaee391d30da42e937db621564Steve Block { 112d0825bca7fe65beaee391d30da42e937db621564Steve Block this._auditCategoriesById = {}; 113d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var categoryCtorID in WebInspector.AuditCategories) { 114d0825bca7fe65beaee391d30da42e937db621564Steve Block var auditCategory = new WebInspector.AuditCategories[categoryCtorID](); 1158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block auditCategory._id = categoryCtorID; 1168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.categoriesById[categoryCtorID] = auditCategory; 117d0825bca7fe65beaee391d30da42e937db621564Steve Block } 118d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 119d0825bca7fe65beaee391d30da42e937db621564Steve Block 120d0825bca7fe65beaee391d30da42e937db621564Steve Block _executeAudit: function(categories, resultCallback) 121d0825bca7fe65beaee391d30da42e937db621564Steve Block { 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch var resources = WebInspector.networkResources; 123d0825bca7fe65beaee391d30da42e937db621564Steve Block 124d0825bca7fe65beaee391d30da42e937db621564Steve Block var rulesRemaining = 0; 125d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var i = 0; i < categories.length; ++i) 126d0825bca7fe65beaee391d30da42e937db621564Steve Block rulesRemaining += categories[i].ruleCount; 127d0825bca7fe65beaee391d30da42e937db621564Steve Block 128d0825bca7fe65beaee391d30da42e937db621564Steve Block var results = []; 129d0825bca7fe65beaee391d30da42e937db621564Steve Block var mainResourceURL = WebInspector.mainResource.url; 130d0825bca7fe65beaee391d30da42e937db621564Steve Block 131d0825bca7fe65beaee391d30da42e937db621564Steve Block function ruleResultReadyCallback(categoryResult, ruleResult) 132d0825bca7fe65beaee391d30da42e937db621564Steve Block { 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ruleResult && ruleResult.children) 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block categoryResult.addRuleResult(ruleResult); 135d0825bca7fe65beaee391d30da42e937db621564Steve Block 136d0825bca7fe65beaee391d30da42e937db621564Steve Block --rulesRemaining; 137d0825bca7fe65beaee391d30da42e937db621564Steve Block 138d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!rulesRemaining && resultCallback) 139d0825bca7fe65beaee391d30da42e937db621564Steve Block resultCallback(mainResourceURL, results); 140d0825bca7fe65beaee391d30da42e937db621564Steve Block } 141d0825bca7fe65beaee391d30da42e937db621564Steve Block 142d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!rulesRemaining) { 143d0825bca7fe65beaee391d30da42e937db621564Steve Block resultCallback(mainResourceURL, results); 144d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 145d0825bca7fe65beaee391d30da42e937db621564Steve Block } 146d0825bca7fe65beaee391d30da42e937db621564Steve Block 147d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var i = 0; i < categories.length; ++i) { 148d0825bca7fe65beaee391d30da42e937db621564Steve Block var category = categories[i]; 149d0825bca7fe65beaee391d30da42e937db621564Steve Block var result = new WebInspector.AuditCategoryResult(category); 150d0825bca7fe65beaee391d30da42e937db621564Steve Block results.push(result); 1515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen category.run(resources, ruleResultReadyCallback.bind(null, result)); 152d0825bca7fe65beaee391d30da42e937db621564Steve Block } 153d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 154d0825bca7fe65beaee391d30da42e937db621564Steve Block 155d0825bca7fe65beaee391d30da42e937db621564Steve Block _auditFinishedCallback: function(launcherCallback, mainResourceURL, results) 156d0825bca7fe65beaee391d30da42e937db621564Steve Block { 157d0825bca7fe65beaee391d30da42e937db621564Steve Block var children = this.auditResultsTreeElement.children; 158d0825bca7fe65beaee391d30da42e937db621564Steve Block var ordinal = 1; 159d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var i = 0; i < children.length; ++i) { 160d0825bca7fe65beaee391d30da42e937db621564Steve Block if (children[i].mainResourceURL === mainResourceURL) 161d0825bca7fe65beaee391d30da42e937db621564Steve Block ordinal++; 162d0825bca7fe65beaee391d30da42e937db621564Steve Block } 163d0825bca7fe65beaee391d30da42e937db621564Steve Block 164d0825bca7fe65beaee391d30da42e937db621564Steve Block var resultTreeElement = new WebInspector.AuditResultSidebarTreeElement(results, mainResourceURL, ordinal); 165d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditResultsTreeElement.appendChild(resultTreeElement); 166d0825bca7fe65beaee391d30da42e937db621564Steve Block resultTreeElement.reveal(); 167d0825bca7fe65beaee391d30da42e937db621564Steve Block resultTreeElement.select(); 168d0825bca7fe65beaee391d30da42e937db621564Steve Block if (launcherCallback) 169d0825bca7fe65beaee391d30da42e937db621564Steve Block launcherCallback(); 170d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 171d0825bca7fe65beaee391d30da42e937db621564Steve Block 172d0825bca7fe65beaee391d30da42e937db621564Steve Block initiateAudit: function(categoryIds, runImmediately, launcherCallback) 173d0825bca7fe65beaee391d30da42e937db621564Steve Block { 174d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!categoryIds || !categoryIds.length) 175d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 176d0825bca7fe65beaee391d30da42e937db621564Steve Block 177d0825bca7fe65beaee391d30da42e937db621564Steve Block var categories = []; 178d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var i = 0; i < categoryIds.length; ++i) 179d0825bca7fe65beaee391d30da42e937db621564Steve Block categories.push(this.categoriesById[categoryIds[i]]); 180d0825bca7fe65beaee391d30da42e937db621564Steve Block 181d0825bca7fe65beaee391d30da42e937db621564Steve Block function initiateAuditCallback(categories, launcherCallback) 182d0825bca7fe65beaee391d30da42e937db621564Steve Block { 183d0825bca7fe65beaee391d30da42e937db621564Steve Block this._executeAudit(categories, this._auditFinishedCallback.bind(this, launcherCallback)); 184d0825bca7fe65beaee391d30da42e937db621564Steve Block } 185d0825bca7fe65beaee391d30da42e937db621564Steve Block 186d0825bca7fe65beaee391d30da42e937db621564Steve Block if (runImmediately) 187d0825bca7fe65beaee391d30da42e937db621564Steve Block initiateAuditCallback.call(this, categories, launcherCallback); 188d0825bca7fe65beaee391d30da42e937db621564Steve Block else 189d0825bca7fe65beaee391d30da42e937db621564Steve Block this._reloadResources(initiateAuditCallback.bind(this, categories, launcherCallback)); 190d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 191d0825bca7fe65beaee391d30da42e937db621564Steve Block 192d0825bca7fe65beaee391d30da42e937db621564Steve Block _reloadResources: function(callback) 193d0825bca7fe65beaee391d30da42e937db621564Steve Block { 19428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu this._pageReloadCallback = callback; 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block PageAgent.reloadPage(false); 196d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 197d0825bca7fe65beaee391d30da42e937db621564Steve Block 198d0825bca7fe65beaee391d30da42e937db621564Steve Block _didMainResourceLoad: function() 199d0825bca7fe65beaee391d30da42e937db621564Steve Block { 20028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (this._pageReloadCallback) { 20128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu var callback = this._pageReloadCallback; 20228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu delete this._pageReloadCallback; 203d0825bca7fe65beaee391d30da42e937db621564Steve Block callback(); 204d0825bca7fe65beaee391d30da42e937db621564Steve Block } 205d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 206d0825bca7fe65beaee391d30da42e937db621564Steve Block 207d0825bca7fe65beaee391d30da42e937db621564Steve Block showResults: function(categoryResults) 208d0825bca7fe65beaee391d30da42e937db621564Steve Block { 209d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!categoryResults._resultView) 210d0825bca7fe65beaee391d30da42e937db621564Steve Block categoryResults._resultView = new WebInspector.AuditResultView(categoryResults); 211d0825bca7fe65beaee391d30da42e937db621564Steve Block 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.visibleView = categoryResults._resultView; 213d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 214d0825bca7fe65beaee391d30da42e937db621564Steve Block 215d0825bca7fe65beaee391d30da42e937db621564Steve Block showLauncherView: function() 216d0825bca7fe65beaee391d30da42e937db621564Steve Block { 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.visibleView = this._launcherView; 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 2195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block get visibleView() 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return this._visibleView; 223d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 224d0825bca7fe65beaee391d30da42e937db621564Steve Block 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block set visibleView(x) 226d0825bca7fe65beaee391d30da42e937db621564Steve Block { 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this._visibleView === x) 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (this._visibleView) 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._visibleView.hide(); 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._visibleView = x; 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (x) 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block x.show(this.viewsContainerElement); 237d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 238d0825bca7fe65beaee391d30da42e937db621564Steve Block 239d0825bca7fe65beaee391d30da42e937db621564Steve Block attach: function() 240d0825bca7fe65beaee391d30da42e937db621564Steve Block { 241d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.Panel.prototype.attach.call(this); 242d0825bca7fe65beaee391d30da42e937db621564Steve Block 243d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsItemTreeElement.select(); 244d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 245d0825bca7fe65beaee391d30da42e937db621564Steve Block 246d0825bca7fe65beaee391d30da42e937db621564Steve Block updateMainViewWidth: function(width) 247d0825bca7fe65beaee391d30da42e937db621564Steve Block { 248d0825bca7fe65beaee391d30da42e937db621564Steve Block this.viewsContainerElement.style.left = width + "px"; 249d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 250d0825bca7fe65beaee391d30da42e937db621564Steve Block 251d0825bca7fe65beaee391d30da42e937db621564Steve Block _clearButtonClicked: function() 252d0825bca7fe65beaee391d30da42e937db621564Steve Block { 253d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsItemTreeElement.reveal(); 254d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditsItemTreeElement.select(); 255d0825bca7fe65beaee391d30da42e937db621564Steve Block this.auditResultsTreeElement.removeChildren(); 256d0825bca7fe65beaee391d30da42e937db621564Steve Block } 257d0825bca7fe65beaee391d30da42e937db621564Steve Block} 258d0825bca7fe65beaee391d30da42e937db621564Steve Block 259d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsPanel.prototype.__proto__ = WebInspector.Panel.prototype; 260d0825bca7fe65beaee391d30da42e937db621564Steve Block 261d0825bca7fe65beaee391d30da42e937db621564Steve Block 262d0825bca7fe65beaee391d30da42e937db621564Steve Block 2638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockWebInspector.AuditCategory = function(displayName) 264d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 265d0825bca7fe65beaee391d30da42e937db621564Steve Block this._displayName = displayName; 266d0825bca7fe65beaee391d30da42e937db621564Steve Block this._rules = []; 267d0825bca7fe65beaee391d30da42e937db621564Steve Block} 268d0825bca7fe65beaee391d30da42e937db621564Steve Block 269d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditCategory.prototype = { 270d0825bca7fe65beaee391d30da42e937db621564Steve Block get id() 271d0825bca7fe65beaee391d30da42e937db621564Steve Block { 2728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // this._id value is injected at construction time. 273d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._id; 274d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 275d0825bca7fe65beaee391d30da42e937db621564Steve Block 276d0825bca7fe65beaee391d30da42e937db621564Steve Block get displayName() 277d0825bca7fe65beaee391d30da42e937db621564Steve Block { 278d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._displayName; 279d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 280d0825bca7fe65beaee391d30da42e937db621564Steve Block 281d0825bca7fe65beaee391d30da42e937db621564Steve Block get ruleCount() 282d0825bca7fe65beaee391d30da42e937db621564Steve Block { 2838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this._ensureInitialized(); 284d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._rules.length; 285d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 286d0825bca7fe65beaee391d30da42e937db621564Steve Block 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addRule: function(rule, severity) 288d0825bca7fe65beaee391d30da42e937db621564Steve Block { 289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block rule.severity = severity; 290d0825bca7fe65beaee391d30da42e937db621564Steve Block this._rules.push(rule); 291d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 292d0825bca7fe65beaee391d30da42e937db621564Steve Block 2935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen run: function(resources, callback) 294d0825bca7fe65beaee391d30da42e937db621564Steve Block { 2958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this._ensureInitialized(); 296d0825bca7fe65beaee391d30da42e937db621564Steve Block for (var i = 0; i < this._rules.length; ++i) 297d0825bca7fe65beaee391d30da42e937db621564Steve Block this._rules[i].run(resources, callback); 2988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 2998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block _ensureInitialized: function() 3018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block { 3028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!this._initialized) { 3038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if ("initialize" in this) 3048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.initialize(); 3058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this._initialized = true; 3068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 307d0825bca7fe65beaee391d30da42e937db621564Steve Block } 308d0825bca7fe65beaee391d30da42e937db621564Steve Block} 309d0825bca7fe65beaee391d30da42e937db621564Steve Block 310d0825bca7fe65beaee391d30da42e937db621564Steve Block 311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRule = function(id, displayName) 312d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 313d0825bca7fe65beaee391d30da42e937db621564Steve Block this._id = id; 314d0825bca7fe65beaee391d30da42e937db621564Steve Block this._displayName = displayName; 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRule.Severity = { 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Info: "info", 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Warning: "warning", 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Severe: "severe" 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRule.SeverityOrder = { 324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "info": 3, 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "warning": 2, 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "severe": 1 327d0825bca7fe65beaee391d30da42e937db621564Steve Block} 328d0825bca7fe65beaee391d30da42e937db621564Steve Block 329d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditRule.prototype = { 330d0825bca7fe65beaee391d30da42e937db621564Steve Block get id() 331d0825bca7fe65beaee391d30da42e937db621564Steve Block { 332d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._id; 333d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 334d0825bca7fe65beaee391d30da42e937db621564Steve Block 335d0825bca7fe65beaee391d30da42e937db621564Steve Block get displayName() 336d0825bca7fe65beaee391d30da42e937db621564Steve Block { 337d0825bca7fe65beaee391d30da42e937db621564Steve Block return this._displayName; 338d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 339d0825bca7fe65beaee391d30da42e937db621564Steve Block 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block set severity(severity) 341d0825bca7fe65beaee391d30da42e937db621564Steve Block { 342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._severity = severity; 343d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 344d0825bca7fe65beaee391d30da42e937db621564Steve Block 345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block run: function(resources, callback) 346d0825bca7fe65beaee391d30da42e937db621564Steve Block { 347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var result = new WebInspector.AuditRuleResult(this.displayName); 348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block result.severity = this._severity; 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.doRun(resources, result, callback); 350d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 351d0825bca7fe65beaee391d30da42e937db621564Steve Block 352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block doRun: function(resources, result, callback) 353d0825bca7fe65beaee391d30da42e937db621564Steve Block { 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block throw new Error("doRun() not implemented"); 355d0825bca7fe65beaee391d30da42e937db621564Steve Block } 356d0825bca7fe65beaee391d30da42e937db621564Steve Block} 357d0825bca7fe65beaee391d30da42e937db621564Steve Block 358d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditCategoryResult = function(category) 359d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 360d0825bca7fe65beaee391d30da42e937db621564Steve Block this.title = category.displayName; 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.ruleResults = []; 362d0825bca7fe65beaee391d30da42e937db621564Steve Block} 363d0825bca7fe65beaee391d30da42e937db621564Steve Block 364d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditCategoryResult.prototype = { 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addRuleResult: function(ruleResult) 366d0825bca7fe65beaee391d30da42e937db621564Steve Block { 367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.ruleResults.push(ruleResult); 368d0825bca7fe65beaee391d30da42e937db621564Steve Block } 369d0825bca7fe65beaee391d30da42e937db621564Steve Block} 370d0825bca7fe65beaee391d30da42e937db621564Steve Block 371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRuleResult = function(value, expanded, className) 372d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 373d0825bca7fe65beaee391d30da42e937db621564Steve Block this.value = value; 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.className = className; 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.expanded = expanded; 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.violationCount = 0; 377d0825bca7fe65beaee391d30da42e937db621564Steve Block} 378d0825bca7fe65beaee391d30da42e937db621564Steve Block 379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRuleResult.linkifyDisplayName = function(url) 380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return WebInspector.linkifyURL(url, WebInspector.displayNameForURL(url)); 382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 3838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.AuditRuleResult.resourceDomain = function(domain) 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return domain || WebInspector.UIString("[empty domain]"); 387d0825bca7fe65beaee391d30da42e937db621564Steve Block} 388d0825bca7fe65beaee391d30da42e937db621564Steve Block 389d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditRuleResult.prototype = { 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addChild: function(value, expanded, className) 391d0825bca7fe65beaee391d30da42e937db621564Steve Block { 392d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!this.children) 393d0825bca7fe65beaee391d30da42e937db621564Steve Block this.children = []; 394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var entry = new WebInspector.AuditRuleResult(value, expanded, className); 395d0825bca7fe65beaee391d30da42e937db621564Steve Block this.children.push(entry); 396d0825bca7fe65beaee391d30da42e937db621564Steve Block return entry; 397d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 398d0825bca7fe65beaee391d30da42e937db621564Steve Block 399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addURL: function(url) 400d0825bca7fe65beaee391d30da42e937db621564Steve Block { 401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return this.addChild(WebInspector.AuditRuleResult.linkifyDisplayName(url)); 402d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 403d0825bca7fe65beaee391d30da42e937db621564Steve Block 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addURLs: function(urls) 405d0825bca7fe65beaee391d30da42e937db621564Steve Block { 406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (var i = 0; i < urls.length; ++i) 407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this.addURL(urls[i]); 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }, 409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block addSnippet: function(snippet) 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return this.addChild(snippet, false, "source-code"); 413d0825bca7fe65beaee391d30da42e937db621564Steve Block } 414d0825bca7fe65beaee391d30da42e937db621564Steve Block} 415d0825bca7fe65beaee391d30da42e937db621564Steve Block 416d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsSidebarTreeElement = function() 417d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 418d0825bca7fe65beaee391d30da42e937db621564Steve Block this.small = false; 419d0825bca7fe65beaee391d30da42e937db621564Steve Block 420d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.SidebarTreeElement.call(this, "audits-sidebar-tree-item", WebInspector.UIString("Audits"), "", null, false); 421d0825bca7fe65beaee391d30da42e937db621564Steve Block} 422d0825bca7fe65beaee391d30da42e937db621564Steve Block 423d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsSidebarTreeElement.prototype = { 424d0825bca7fe65beaee391d30da42e937db621564Steve Block onattach: function() 425d0825bca7fe65beaee391d30da42e937db621564Steve Block { 426d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.SidebarTreeElement.prototype.onattach.call(this); 427d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 428d0825bca7fe65beaee391d30da42e937db621564Steve Block 429d0825bca7fe65beaee391d30da42e937db621564Steve Block onselect: function() 430d0825bca7fe65beaee391d30da42e937db621564Steve Block { 431d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.panels.audits.showLauncherView(); 432d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 433d0825bca7fe65beaee391d30da42e937db621564Steve Block 434d0825bca7fe65beaee391d30da42e937db621564Steve Block get selectable() 435d0825bca7fe65beaee391d30da42e937db621564Steve Block { 436d0825bca7fe65beaee391d30da42e937db621564Steve Block return true; 437d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 438d0825bca7fe65beaee391d30da42e937db621564Steve Block 439d0825bca7fe65beaee391d30da42e937db621564Steve Block refresh: function() 440d0825bca7fe65beaee391d30da42e937db621564Steve Block { 441d0825bca7fe65beaee391d30da42e937db621564Steve Block this.refreshTitles(); 442d0825bca7fe65beaee391d30da42e937db621564Steve Block } 443d0825bca7fe65beaee391d30da42e937db621564Steve Block} 444d0825bca7fe65beaee391d30da42e937db621564Steve Block 445d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditsSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; 446d0825bca7fe65beaee391d30da42e937db621564Steve Block 447d0825bca7fe65beaee391d30da42e937db621564Steve Block 448d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditResultSidebarTreeElement = function(results, mainResourceURL, ordinal) 449d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 450d0825bca7fe65beaee391d30da42e937db621564Steve Block this.results = results; 451d0825bca7fe65beaee391d30da42e937db621564Steve Block this.mainResourceURL = mainResourceURL; 452d0825bca7fe65beaee391d30da42e937db621564Steve Block 453d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.SidebarTreeElement.call(this, "audit-result-sidebar-tree-item", String.sprintf("%s (%d)", mainResourceURL, ordinal), "", {}, false); 454d0825bca7fe65beaee391d30da42e937db621564Steve Block} 455d0825bca7fe65beaee391d30da42e937db621564Steve Block 456d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditResultSidebarTreeElement.prototype = { 457d0825bca7fe65beaee391d30da42e937db621564Steve Block onselect: function() 458d0825bca7fe65beaee391d30da42e937db621564Steve Block { 459d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.panels.audits.showResults(this.results); 460d0825bca7fe65beaee391d30da42e937db621564Steve Block }, 461d0825bca7fe65beaee391d30da42e937db621564Steve Block 462d0825bca7fe65beaee391d30da42e937db621564Steve Block get selectable() 463d0825bca7fe65beaee391d30da42e937db621564Steve Block { 464d0825bca7fe65beaee391d30da42e937db621564Steve Block return true; 465d0825bca7fe65beaee391d30da42e937db621564Steve Block } 466d0825bca7fe65beaee391d30da42e937db621564Steve Block} 467d0825bca7fe65beaee391d30da42e937db621564Steve Block 468d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditResultSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; 469d0825bca7fe65beaee391d30da42e937db621564Steve Block 470d0825bca7fe65beaee391d30da42e937db621564Steve Block// Contributed audit rules should go into this namespace. 471d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditRules = {}; 472d0825bca7fe65beaee391d30da42e937db621564Steve Block 473d0825bca7fe65beaee391d30da42e937db621564Steve Block// Contributed audit categories should go into this namespace. 474d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditCategories = {}; 475