Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: chrome/browser/resources/about_stats.js

Issue 7215034: Apply CSP to chrome: and about: pages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/about_stats.html ('k') | chrome/browser/resources/about_version.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /* Counter accessor for Name Node. */
6 function getCounterNameFromCounterNode(node) {
7 return node.childNodes[1];
8 }
9
10 /* Counter accessor for Value Node. */
11 function getCounterValueFromCounterNode(node) {
12 return node.childNodes[3];
13 }
14
15 /* Counter accessor for Delta Node. */
16 function getCounterDeltaFromCounterNode(node) {
17 return node.childNodes[5];
18 }
19
20 /* Timer accessor for Name Node. */
21 function getTimerNameFromTimerNode(node) {
22 return node.childNodes[1];
23 }
24
25 /* Timer accessor for Value Node. */
26 function getTimerValueFromTimerNode(node) {
27 return node.childNodes[3];
28 }
29
30 /* Timer accessor for Time Node. */
31 function getTimerTimeFromTimerNode(node) {
32 return node.childNodes[5];
33 }
34
35 /* Timer accessor for Average Time Node. */
36 function getTimerAvgTimeFromTimerNode(node) {
37 return node.childNodes[7];
38 }
39
40 /* Do the filter work. Hide all nodes matching node.*/
41 function filterMatching(text, nodelist, functionToGetNameNode) {
42 var showAll = text.length == 0;
43 for (var i = 0, node; node = nodelist[i]; i++) {
44 var name = functionToGetNameNode(node).innerHTML.toLowerCase();
45 if (showAll || name.indexOf(text) >= 0) {
46 node.style.display = "table-row";
47 } else {
48 node.style.display = "none";
49 }
50 }
51 }
52
53 /* Hides or shows counters based on the user's current filter selection. */
54 function doFilter() {
55 var filter = document.getElementById("filter");
56 var text = filter.value.toLowerCase();
57 var nodes = document.getElementsByName("counter");
58 filterMatching(text, nodes, getCounterNameFromCounterNode);
59 var nodes = document.getElementsByName("timer");
60 filterMatching(text, nodes, getTimerNameFromTimerNode);
61 }
62
63 /* Colors the counters based on increasing or decreasing value. */
64 function doColor() {
65 var nodes = document.getElementsByName("counter");
66 for (var i = 0, node; node = nodes[i]; i++) {
67 var child = getCounterDeltaFromCounterNode(node);
68 var delta = child.innerHTML;
69 if (delta > 0) {
70 child.style.color = "Green";
71 } else if (delta == 0) {
72 child.style.color = "Black";
73 } else {
74 child.style.color = "Red";
75 }
76 }
77 }
78
79 /* Counters with no values are null. Remove them. */
80 function removeNullValues() {
81 var nodes = document.getElementsByName("counter");
82 for (var i = nodes.length - 1; i >= 0; i--) {
83 var node = nodes[i];
84 var value = getCounterValueFromCounterNode(node).innerHTML;
85 if (value == "null") {
86 node.parentNode.removeChild(node);
87 }
88 }
89 var nodes = document.getElementsByName("timer");
90 for (var i = 0, node; node = nodes[i]; i++) {
91 var value_node = getTimerValueFromTimerNode(node);
92 if (value_node.innerHTML == "null") {
93 value_node.innerHTML = "";
94 }
95 }
96 }
97
98 /* Compute the average time for timers */
99 function computeTimes() {
100 var nodes = document.getElementsByName("timer");
101 for (var i = 0, node; node = nodes[i]; i++) {
102 var count = getTimerValueFromTimerNode(node).innerHTML;
103 if (count.length > 0) {
104 var time = getTimerTimeFromTimerNode(node).innerHTML;
105 var avg = getTimerAvgTimeFromTimerNode(node);
106 avg.innerHTML = Math.round(time / count * 100) / 100;
107 }
108 }
109 }
110
111 /* All the work we do onload. */
112 function onLoadWork() {
113 // This is the javascript code that processes the template:
114 var input = new JsEvalContext(templateData);
115 var output = document.getElementById('t');
116 jstProcess(input, output);
117
118 // Add handlers to dynamically created HTML elements.
119 var elements = document.getElementsByName("string-sort");
120 for (var i = 0; i < elements.length; ++i)
121 elements[i].onclick = function () { sort_table("string"); };
122
123 elements = document.getElementsByName("number-sort");
124 for (i = 0; i < elements.length; ++i)
125 elements[i].onclick = function () { sort_table("number"); };
126
127 doColor();
128 removeNullValues();
129 computeTimes();
130 document.getElementById("filter").focus();
131 }
132
133 // The function should only be used as the event handler
134 // on a table cell element. To use it, put it in a <td> element:
135 // <td onclick="sort('string')" ...>
136 //
137 // The function sorts rows after the row with onclick event handler.
138 //
139 // type: the data type, 'string', 'number'
140 function sort_table(type){
141 var cell = event.target;
142 var cnum = cell.cellIndex;
143
144 var row = cell.parentNode;
145 var start_index = row.rowIndex + 1;
146
147 var tbody = row.parentNode;
148 var table = tbody.parentNode;
149
150 var rows = new Array();
151
152 var indexes = new Array();
153 // skip the first row
154 for (var i = start_index; i < table.rows.length; i++)
155 rows.push(table.rows[i]);
156
157 // a, b are strings
158 function compare_strings(a,b) {
159 if (a == b) return 0;
160 if (a < b) return -1;
161 return 1;
162 }
163
164 // a, b are numbers
165 function compare_numbers(a,b) {
166 var x = isNaN(a) ? 0 : a;
167 var y = isNaN(b) ? 0 : b;
168 return x - y;
169 }
170
171 var sort_func = undefined;
172 if (type === 'string') {
173 sort_func = function(a, b) {
174 var x = a.cells[cnum].innerText;
175 var y = b.cells[cnum].innerText;
176 return compare_strings(x, y);
177 } ;
178
179 } else if (type === 'number') {
180 sort_func = function(a, b) {
181 var x = parseFloat(a.cells[cnum].innerText);
182 var y = parseFloat(b.cells[cnum].innerText);
183 return compare_numbers(x, y);
184 }
185 }
186
187 rows.sort(sort_func);
188
189 // change tables
190 if (cell._reverse) {
191 for (var i = rows.length - 1; i >= 0; i--)
192 tbody.appendChild(rows[i]);
193 cell._reverse = false;
194 } else {
195 for (var i = 0; i < rows.length; i++)
196 tbody.appendChild(rows[i]);
197 cell._reverse = true;
198 }
199 }
200
201 document.addEventListener('DOMContentLoaded', onLoadWork);
202
OLDNEW
« no previous file with comments | « chrome/browser/resources/about_stats.html ('k') | chrome/browser/resources/about_version.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698