1d0825bca7fe65beaee391d30da42e937db621564Steve Block/*
2ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen 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
315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenWebInspector.AuditLauncherView = function(runnerCallback)
32d0825bca7fe65beaee391d30da42e937db621564Steve Block{
33d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebInspector.View.call(this);
34d0825bca7fe65beaee391d30da42e937db621564Steve Block    this._runnerCallback = runnerCallback;
35d0825bca7fe65beaee391d30da42e937db621564Steve Block    this._categoryIdPrefix = "audit-category-item-";
36d0825bca7fe65beaee391d30da42e937db621564Steve Block    this._auditRunning = false;
37d0825bca7fe65beaee391d30da42e937db621564Steve Block
38d0825bca7fe65beaee391d30da42e937db621564Steve Block    this.element.addStyleClass("audit-launcher-view");
39d0825bca7fe65beaee391d30da42e937db621564Steve Block
40d0825bca7fe65beaee391d30da42e937db621564Steve Block    this._contentElement = document.createElement("div");
41d0825bca7fe65beaee391d30da42e937db621564Steve Block    this._contentElement.className = "audit-launcher-view-content";
42d0825bca7fe65beaee391d30da42e937db621564Steve Block    this.element.appendChild(this._contentElement);
435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._boundCategoryClickListener = this._categoryClicked.bind(this);
44d0825bca7fe65beaee391d30da42e937db621564Steve Block
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    this._resetResourceCount();
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._sortedCategories = [];
48d0825bca7fe65beaee391d30da42e937db621564Steve Block
495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._headerElement = document.createElement("h1");
505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._headerElement.className = "no-audits";
515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._headerElement.textContent = WebInspector.UIString("No audits to run");
525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    this._contentElement.appendChild(this._headerElement);
53ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
54ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceStarted, this._onResourceStarted, this);
55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._onResourceFinished, this);
56d0825bca7fe65beaee391d30da42e937db621564Steve Block}
57d0825bca7fe65beaee391d30da42e937db621564Steve Block
58d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditLauncherView.prototype = {
59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    _resetResourceCount: function()
60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        this._loadedResources = 0;
62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        this._totalResources = 0;
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    },
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    _onResourceStarted: function(event)
66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
67ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        var resource = event.data;
68ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        // Ignore long-living WebSockets for the sake of progress indicator, as we won't be waiting them anyway.
69ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        if (resource.type === WebInspector.Resource.Type.WebSocket)
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            return;
71ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        ++this._totalResources;
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._updateResourceProgress();
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    },
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
75ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    _onResourceFinished: function(event)
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
77ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        var resource = event.data;
78ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        // See resorceStarted for details.
79ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        if (resource.type === WebInspector.Resource.Type.WebSocket)
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            return;
81ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        ++this._loadedResources;
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._updateResourceProgress();
83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    },
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    addCategory: function(category)
865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    {
875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        if (!this._sortedCategories.length)
885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            this._createLauncherUI();
895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        var categoryElement = this._createCategoryElement(category.displayName, category.id);
915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        category._checkboxElement = categoryElement.firstChild;
925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        if (this._selectAllCheckboxElement.checked) {
935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            category._checkboxElement.checked = true;
945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            ++this._currentCategoriesCount;
955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        }
965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        function compareCategories(a, b)
985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        {
995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            var aTitle = a.displayName || "";
1005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            var bTitle = b.displayName || "";
1015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            return aTitle.localeCompare(bTitle);
1025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        }
1035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        var insertBefore = insertionIndexForObjectInListSortedByFunction(category, this._sortedCategories, compareCategories);
1045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        this._categoriesElement.insertBefore(categoryElement, this._categoriesElement.children[insertBefore]);
1055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        this._sortedCategories.splice(insertBefore, 0, category);
1065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        this._updateButton();
1075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    },
1085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
109d0825bca7fe65beaee391d30da42e937db621564Steve Block    _setAuditRunning: function(auditRunning)
110d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
111d0825bca7fe65beaee391d30da42e937db621564Steve Block        if (this._auditRunning === auditRunning)
112d0825bca7fe65beaee391d30da42e937db621564Steve Block            return;
113d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._auditRunning = auditRunning;
114d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._updateButton();
115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._updateResourceProgress();
116d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
117d0825bca7fe65beaee391d30da42e937db621564Steve Block
118d0825bca7fe65beaee391d30da42e937db621564Steve Block    _launchButtonClicked: function(event)
119d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
120d0825bca7fe65beaee391d30da42e937db621564Steve Block        var catIds = [];
121d0825bca7fe65beaee391d30da42e937db621564Steve Block        var childNodes = this._categoriesElement.childNodes;
1225ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        for (var category = 0; category < this._sortedCategories.length; ++category) {
1235ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            if (this._sortedCategories[category]._checkboxElement.checked)
1245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen                catIds.push(this._sortedCategories[category].id);
125d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
1265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
127d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._setAuditRunning(true);
128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._runnerCallback(catIds, this._auditPresentStateElement.checked, this._setAuditRunning.bind(this, false));
129d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
130d0825bca7fe65beaee391d30da42e937db621564Steve Block
131d0825bca7fe65beaee391d30da42e937db621564Steve Block    _selectAllClicked: function(checkCategories)
132d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
133d0825bca7fe65beaee391d30da42e937db621564Steve Block        var childNodes = this._categoriesElement.childNodes;
134d0825bca7fe65beaee391d30da42e937db621564Steve Block        for (var i = 0, length = childNodes.length; i < length; ++i)
135d0825bca7fe65beaee391d30da42e937db621564Steve Block            childNodes[i].firstChild.checked = checkCategories;
1365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        this._currentCategoriesCount = checkCategories ? this._sortedCategories.length : 0;
137d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._updateButton();
138d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
139d0825bca7fe65beaee391d30da42e937db621564Steve Block
140d0825bca7fe65beaee391d30da42e937db621564Steve Block    _categoryClicked: function(event)
141d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
142d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._currentCategoriesCount += event.target.checked ? 1 : -1;
1435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        this._selectAllCheckboxElement.checked = this._currentCategoriesCount === this._sortedCategories.length;
144d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._updateButton();
145d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
146d0825bca7fe65beaee391d30da42e937db621564Steve Block
147d0825bca7fe65beaee391d30da42e937db621564Steve Block    _createCategoryElement: function(title, id)
148d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
149d0825bca7fe65beaee391d30da42e937db621564Steve Block        var labelElement = document.createElement("label");
150d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.id = this._categoryIdPrefix + id;
151d0825bca7fe65beaee391d30da42e937db621564Steve Block
152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        var element = document.createElement("input");
153d0825bca7fe65beaee391d30da42e937db621564Steve Block        element.type = "checkbox";
154bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        if (id !== "")
155bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen            element.addEventListener("click", this._boundCategoryClickListener, false);
156d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(element);
157d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(document.createTextNode(title));
158d0825bca7fe65beaee391d30da42e937db621564Steve Block
159d0825bca7fe65beaee391d30da42e937db621564Steve Block        return labelElement;
160d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
161d0825bca7fe65beaee391d30da42e937db621564Steve Block
1625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    _createLauncherUI: function()
163d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
164d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._headerElement = document.createElement("h1");
165d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._headerElement.textContent = WebInspector.UIString("Select audits to run");
1665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        for (var child = 0; child < this._contentElement.children.length; ++child)
1685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen            this._contentElement.removeChild(this._contentElement.children[child]);
1695ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
170d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._contentElement.appendChild(this._headerElement);
171d0825bca7fe65beaee391d30da42e937db621564Steve Block
172d0825bca7fe65beaee391d30da42e937db621564Steve Block        function handleSelectAllClick(event)
173d0825bca7fe65beaee391d30da42e937db621564Steve Block        {
174d0825bca7fe65beaee391d30da42e937db621564Steve Block            this._selectAllClicked(event.target.checked);
175d0825bca7fe65beaee391d30da42e937db621564Steve Block        }
176d0825bca7fe65beaee391d30da42e937db621564Steve Block        var categoryElement = this._createCategoryElement(WebInspector.UIString("Select All"), "");
177d0825bca7fe65beaee391d30da42e937db621564Steve Block        categoryElement.id = "audit-launcher-selectall";
178d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._selectAllCheckboxElement = categoryElement.firstChild;
179d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._selectAllCheckboxElement.checked = true;
180d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._selectAllCheckboxElement.addEventListener("click", handleSelectAllClick.bind(this), false);
181d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._contentElement.appendChild(categoryElement);
182d0825bca7fe65beaee391d30da42e937db621564Steve Block
183d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._categoriesElement = document.createElement("div");
184d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._categoriesElement.className = "audit-categories-container";
185d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._contentElement.appendChild(this._categoriesElement);
186d0825bca7fe65beaee391d30da42e937db621564Steve Block
187d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._currentCategoriesCount = 0;
188d0825bca7fe65beaee391d30da42e937db621564Steve Block
189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        var flexibleSpaceElement = document.createElement("div");
190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        flexibleSpaceElement.className = "flexible-space";
191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._contentElement.appendChild(flexibleSpaceElement);
192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
193d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._buttonContainerElement = document.createElement("div");
194d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._buttonContainerElement.className = "button-container";
195d0825bca7fe65beaee391d30da42e937db621564Steve Block
196d0825bca7fe65beaee391d30da42e937db621564Steve Block        var labelElement = document.createElement("label");
197d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._auditPresentStateElement = document.createElement("input");
198d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._auditPresentStateElement.name = "audit-mode";
199d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._auditPresentStateElement.type = "radio";
200d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._auditPresentStateElement.checked = true;
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        this._auditPresentStateLabelElement = document.createTextNode(WebInspector.UIString("Audit Present State"));
202d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(this._auditPresentStateElement);
203d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(this._auditPresentStateLabelElement);
204d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._buttonContainerElement.appendChild(labelElement);
205d0825bca7fe65beaee391d30da42e937db621564Steve Block
206d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement = document.createElement("label");
207d0825bca7fe65beaee391d30da42e937db621564Steve Block        this.auditReloadedStateElement = document.createElement("input");
208d0825bca7fe65beaee391d30da42e937db621564Steve Block        this.auditReloadedStateElement.name = "audit-mode";
209d0825bca7fe65beaee391d30da42e937db621564Steve Block        this.auditReloadedStateElement.type = "radio";
210d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(this.auditReloadedStateElement);
211d0825bca7fe65beaee391d30da42e937db621564Steve Block        labelElement.appendChild(document.createTextNode("Reload Page and Audit on Load"));
212d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._buttonContainerElement.appendChild(labelElement);
213d0825bca7fe65beaee391d30da42e937db621564Steve Block
214d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._launchButton = document.createElement("button");
215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._launchButton.type = "button";
216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._launchButton.textContent = WebInspector.UIString("Run");
217d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._launchButton.addEventListener("click", this._launchButtonClicked.bind(this), false);
218d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._buttonContainerElement.appendChild(this._launchButton);
219d0825bca7fe65beaee391d30da42e937db621564Steve Block
220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._resourceProgressContainer = document.createElement("span");
221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._resourceProgressContainer.className = "resource-progress";
222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        var resourceProgressImage = document.createElement("img");
223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._resourceProgressContainer.appendChild(resourceProgressImage);
224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._resourceProgressTextElement = document.createElement("span");
225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._resourceProgressContainer.appendChild(this._resourceProgressTextElement);
226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._buttonContainerElement.appendChild(this._resourceProgressContainer);
227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
228d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._contentElement.appendChild(this._buttonContainerElement);
229d0825bca7fe65beaee391d30da42e937db621564Steve Block
230d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._selectAllClicked(this._selectAllCheckboxElement.checked);
231d0825bca7fe65beaee391d30da42e937db621564Steve Block        this._updateButton();
232e14391e94c850b8bd03680c23b38978db68687a8John Reck        this._updateResourceProgress();
233d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
234d0825bca7fe65beaee391d30da42e937db621564Steve Block
235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    _updateResourceProgress: function()
236d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        if (!this._resourceProgressContainer)
238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            return;
239d0825bca7fe65beaee391d30da42e937db621564Steve Block
24021939df44de1705786c545cd1bf519d47250322dBen Murdoch        if (!this._auditRunning) {
24121939df44de1705786c545cd1bf519d47250322dBen Murdoch            this._resetResourceCount();
242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            this._resourceProgressContainer.addStyleClass("hidden");
24321939df44de1705786c545cd1bf519d47250322dBen Murdoch        } else
244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            this._resourceProgressContainer.removeStyleClass("hidden");
245ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        this._resourceProgressTextElement.textContent = WebInspector.UIString("Loading (%d of %d)", this._loadedResources, this._totalResources);
2468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    },
2478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    _updateButton: function()
249d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        this._launchButton.disabled = !this._currentCategoriesCount || this._auditRunning;
251d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
252d0825bca7fe65beaee391d30da42e937db621564Steve Block}
253d0825bca7fe65beaee391d30da42e937db621564Steve Block
254d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebInspector.AuditLauncherView.prototype.__proto__ = WebInspector.View.prototype;
255