15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @extends {WebInspector.PanelWithSidebarTree}
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditsPanel = function()
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebInspector.PanelWithSidebarTree.call(this, "audits");
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("panelEnablerView.css");
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("auditsPanel.css");
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auditsTreeElement = new WebInspector.SidebarSectionTreeElement("", {}, true);
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.sidebarTree.appendChild(this.auditsTreeElement);
43a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.auditsTreeElement.listItemElement.classList.add("hidden");
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auditsItemTreeElement = new WebInspector.AuditsSidebarTreeElement(this);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auditsTreeElement.appendChild(this.auditsItemTreeElement);
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auditResultsTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("RESULTS"), {}, true);
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.sidebarTree.appendChild(this.auditResultsTreeElement);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.auditResultsTreeElement.expand();
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._constructCategories();
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
549e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    this._auditController = new WebInspector.AuditController(this);
55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._launcherView = new WebInspector.AuditLauncherView(this._auditController);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var id in this.categoriesById)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._launcherView.addCategory(this.categoriesById[id]);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditsPanel.prototype = {
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
62f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @return {boolean}
63f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
64f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    canSearch: function()
65f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
66f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return false;
67f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
68f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
69f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {!Object.<string, !WebInspector.AuditCategory>}
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get categoriesById()
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._auditCategoriesById;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!WebInspector.AuditCategory} category
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addCategory: function(category)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.categoriesById[category.id] = category;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._launcherView.addCategory(category);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} id
88a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.AuditCategory}
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getCategory: function(id)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.categoriesById[id];
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _constructCategories: function()
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._auditCategoriesById = {};
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var categoryCtorID in WebInspector.AuditCategories) {
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var auditCategory = new WebInspector.AuditCategories[categoryCtorID]();
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            auditCategory._id = categoryCtorID;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.categoriesById[categoryCtorID] = auditCategory;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} mainResourceURL
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!Array.<!WebInspector.AuditCategoryResult>} results
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    auditFinishedCallback: function(mainResourceURL, results)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var children = this.auditResultsTreeElement.children;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var ordinal = 1;
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < children.length; ++i) {
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (children[i].mainResourceURL === mainResourceURL)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                ordinal++;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var resultTreeElement = new WebInspector.AuditResultSidebarTreeElement(this, results, mainResourceURL, ordinal);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.auditResultsTreeElement.appendChild(resultTreeElement);
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        resultTreeElement.revealAndSelect();
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!Array.<!WebInspector.AuditCategoryResult>} categoryResults
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    showResults: function(categoryResults)
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!categoryResults._resultView)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            categoryResults._resultView = new WebInspector.AuditResultView(categoryResults);
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.visibleView = categoryResults._resultView;
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    showLauncherView: function()
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.visibleView = this._launcherView;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get visibleView()
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._visibleView;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set visibleView(x)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._visibleView === x)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._visibleView)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._visibleView.detach();
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._visibleView = x;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (x)
15509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            x.show(this.mainElement());
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    wasShown: function()
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.Panel.prototype.wasShown.call(this);
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._visibleView)
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.auditsItemTreeElement.select();
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    clearResults: function()
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.auditsItemTreeElement.revealAndSelect();
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.auditResultsTreeElement.removeChildren();
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    __proto__: WebInspector.PanelWithSidebarTree.prototype
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
17609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.AuditCategory}
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} displayName
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.AuditCategoryImpl = function(displayName)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._displayName = displayName;
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._rules = [];
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.AuditCategoryImpl.prototype = {
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @override
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get id()
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // this._id value is injected at construction time.
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._id;
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @override
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get displayName()
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._displayName;
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!WebInspector.AuditRule} rule
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!WebInspector.AuditRule.Severity} severity
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addRule: function(rule, severity)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        rule.severity = severity;
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._rules.push(rule);
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @override
217aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.Target} target
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest>} requests
219a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function()} categoryDoneCallback
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!WebInspector.Progress} progress
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
223aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    run: function(target, requests, ruleResultCallback, categoryDoneCallback, progress)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._ensureInitialized();
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var remainingRulesCount = this._rules.length;
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        progress.setTotalWork(remainingRulesCount);
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callbackWrapper(result)
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            ruleResultCallback(result);
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            progress.worked();
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!--remainingRulesCount)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                categoryDoneCallback();
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < this._rules.length; ++i)
236aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._rules[i].run(target, requests, callbackWrapper, progress);
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _ensureInitialized: function()
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._initialized) {
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if ("initialize" in this)
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.initialize();
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._initialized = true;
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} id
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} displayName
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRule = function(id, displayName)
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._id = id;
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._displayName = displayName;
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @enum {string}
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRule.Severity = {
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Info: "info",
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Warning: "warning",
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Severe: "severe"
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRule.SeverityOrder = {
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "info": 3,
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "warning": 2,
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    "severe": 1
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRule.prototype = {
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get id()
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._id;
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get displayName()
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._displayName;
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
287a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.AuditRule.Severity} severity
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set severity(severity)
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._severity = severity;
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
295aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.Target} target
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest>} requests
297a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.AuditRuleResult)} callback
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!WebInspector.Progress} progress
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
300aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    run: function(target, requests, callback, progress)
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (progress.isCanceled())
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = new WebInspector.AuditRuleResult(this.displayName);
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result.severity = this._severity;
307aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this.doRun(target, requests, result, callback, progress);
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
311aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.Target} target
312a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!WebInspector.NetworkRequest>} requests
313a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.AuditRuleResult} result
314a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.AuditRuleResult)} callback
315a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.Progress} progress
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
317aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    doRun: function(target, requests, result, callback, progress)
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        throw new Error("doRun() not implemented");
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!WebInspector.AuditCategory} category
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditCategoryResult = function(category)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.title = category.displayName;
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.ruleResults = [];
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditCategoryResult.prototype = {
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
33509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {!WebInspector.AuditRuleResult} ruleResult
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addRuleResult: function(ruleResult)
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.ruleResults.push(ruleResult);
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
345a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {(string|boolean|number|!Object)} value
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} expanded
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} className
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRuleResult = function(value, expanded, className)
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.value = value;
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.className = className;
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.expanded = expanded;
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.violationCount = 0;
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._formatters = {
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        r: WebInspector.AuditRuleResult.linkifyDisplayName
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var standardFormatters = Object.keys(String.standardFormatters);
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < standardFormatters.length; ++i)
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._formatters[standardFormatters[i]] = String.standardFormatters[standardFormatters[i]];
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} url
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {!Element}
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRuleResult.linkifyDisplayName = function(url)
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return WebInspector.linkifyURLAsNode(url, WebInspector.displayNameForURL(url));
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/**
3735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} domain
3745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {string}
3755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRuleResult.resourceDomain = function(domain)
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return domain || WebInspector.UIString("[empty domain]");
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRuleResult.prototype = {
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
383a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {(string|boolean|number|!Object)} value
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean=} expanded
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} className
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {!WebInspector.AuditRuleResult}
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addChild: function(value, expanded, className)
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this.children)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.children = [];
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var entry = new WebInspector.AuditRuleResult(value, expanded, className);
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.children.push(entry);
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return entry;
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addURL: function(url)
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.addChild(WebInspector.AuditRuleResult.linkifyDisplayName(url));
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {!Array.<string>} urls
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addURLs: function(urls)
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < urls.length; ++i)
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.addURL(urls[i]);
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} snippet
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addSnippet: function(snippet)
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.addChild(snippet, false, "source-code");
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} format
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {...*} vararg
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {!WebInspector.AuditRuleResult}
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addFormatted: function(format, vararg)
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var substitutions = Array.prototype.slice.call(arguments, 1);
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var fragment = document.createDocumentFragment();
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function append(a, b)
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!(b instanceof Node))
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                b = document.createTextNode(b);
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            a.appendChild(b);
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return a;
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var formattedResult = String.format(format, substitutions, this._formatters, fragment, append).formattedResult;
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (formattedResult instanceof Node)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            formattedResult.normalize();
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.addChild(formattedResult);
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.SidebarTreeElement}
450a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.AuditsPanel} panel
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditsSidebarTreeElement = function(panel)
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._panel = panel;
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.small = false;
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.SidebarTreeElement.call(this, "audits-sidebar-tree-item", WebInspector.UIString("Audits"), "", null, false);
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditsSidebarTreeElement.prototype = {
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onattach: function()
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.SidebarTreeElement.prototype.onattach.call(this);
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
4667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {boolean}
4677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onselect: function()
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._panel.showLauncherView();
4717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return true;
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get selectable()
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    refresh: function()
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.refreshTitles();
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.SidebarTreeElement.prototype
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.SidebarTreeElement}
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!WebInspector.AuditsPanel} panel
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!Array.<!WebInspector.AuditCategoryResult>} results
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} mainResourceURL
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} ordinal
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditResultSidebarTreeElement = function(panel, results, mainResourceURL, ordinal)
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._panel = panel;
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.results = results;
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.mainResourceURL = mainResourceURL;
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.SidebarTreeElement.call(this, "audit-result-sidebar-tree-item", String.sprintf("%s (%d)", mainResourceURL, ordinal), "", {}, false);
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditResultSidebarTreeElement.prototype = {
5047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
5057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {boolean}
5067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    onselect: function()
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._panel.showResults(this.results);
5107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return true;
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get selectable()
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.SidebarTreeElement.prototype
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Contributed audit rules should go into this namespace.
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditRules = {};
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Contributed audit categories should go into this namespace.
526a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @type {!Object.<string, function(new:WebInspector.AuditCategory)>}
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.AuditCategories = {};
529