OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | |
5 /** | 4 /** |
6 * @constructor | 5 * @unrestricted |
7 * @param {string} metric | |
8 * @param {number} value | |
9 * @param {string} description | |
10 */ | 6 */ |
11 WebInspector.ServerTiming = function(metric, value, description) | 7 WebInspector.ServerTiming = class { |
12 { | 8 /** |
| 9 * @param {string} metric |
| 10 * @param {number} value |
| 11 * @param {string} description |
| 12 */ |
| 13 constructor(metric, value, description) { |
13 this.metric = metric; | 14 this.metric = metric; |
14 this.value = value; | 15 this.value = value; |
15 this.description = description; | 16 this.description = description; |
16 }; | 17 } |
17 | 18 |
18 /** | 19 /** |
19 * @param {!Array<!WebInspector.NetworkRequest.NameValue>} headers | 20 * @param {!Array<!WebInspector.NetworkRequest.NameValue>} headers |
20 * @return {?Array<!WebInspector.ServerTiming>} | 21 * @return {?Array<!WebInspector.ServerTiming>} |
21 */ | 22 */ |
22 WebInspector.ServerTiming.parseHeaders = function(headers) | 23 static parseHeaders(headers) { |
23 { | 24 var rawServerTimingHeaders = headers.filter(item => item.name.toLowerCase()
=== 'server-timing'); |
24 var rawServerTimingHeaders = headers.filter(item => item.name.toLowerCase()
=== "server-timing"); | |
25 if (!rawServerTimingHeaders.length) | 25 if (!rawServerTimingHeaders.length) |
26 return null; | 26 return null; |
27 | 27 |
28 /** | 28 /** |
29 * @param {?string} valueString | 29 * @param {?string} valueString |
30 * @return {?Array<!WebInspector.ServerTiming>} | 30 * @return {?Array<!WebInspector.ServerTiming>} |
31 */ | 31 */ |
32 function createFromHeaderValue(valueString) | 32 function createFromHeaderValue(valueString) { |
33 { | 33 // https://www.w3.org/TR/server-timing/ |
34 // https://www.w3.org/TR/server-timing/ | 34 var serverTimingMetricRegExp = |
35 var serverTimingMetricRegExp = /[ \t]*([\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~0-
9A-Za-z]+)[ \t]*(?:=[ \t]*(\d+(?:\.\d+)?))?[ \t]*(?:;[ \t]*(?:"([^"]+)"|([\!\#\$
\%\&\'\*\+\-\.\^\_\`\|\~0-9A-Za-z]+)))?[ \t]*(?:,(.*))?/; | 35 /[ \t]*([\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~0-9A-Za-z]+)[ \t]*(?:=[ \t]*(\d
+(?:\.\d+)?))?[ \t]*(?:;[ \t]*(?:"([^"]+)"|([\!\#\$\%\&\'\*\+\-\.\^\_\`\|\~0-9A-
Za-z]+)))?[ \t]*(?:,(.*))?/; |
36 var metricMatch; | 36 var metricMatch; |
37 var result = []; | 37 var result = []; |
38 while (valueString && (metricMatch = serverTimingMetricRegExp.exec(value
String))) { | 38 while (valueString && (metricMatch = serverTimingMetricRegExp.exec(valueSt
ring))) { |
39 var metric = metricMatch[1]; | 39 var metric = metricMatch[1]; |
40 var value = metricMatch[2]; | 40 var value = metricMatch[2]; |
41 var description = metricMatch[3] || metricMatch[4]; | 41 var description = metricMatch[3] || metricMatch[4]; |
42 if (value !== null) | 42 if (value !== null) |
43 value = Math.abs(parseFloat(metricMatch[2])); | 43 value = Math.abs(parseFloat(metricMatch[2])); |
44 valueString = metricMatch[5]; // comma delimited headers | 44 valueString = metricMatch[5]; // comma delimited headers |
45 result.push(new WebInspector.ServerTiming(metric, value, description
)); | 45 result.push(new WebInspector.ServerTiming(metric, value, description)); |
46 } | 46 } |
47 return result; | 47 return result; |
48 } | 48 } |
49 | 49 |
50 var serverTimings = rawServerTimingHeaders.reduce((memo, header) => { | 50 var serverTimings = rawServerTimingHeaders.reduce((memo, header) => { |
51 var timing = createFromHeaderValue(header.value); | 51 var timing = createFromHeaderValue(header.value); |
52 Array.prototype.push.apply(memo, timing); | 52 Array.prototype.push.apply(memo, timing); |
53 return memo; | 53 return memo; |
54 }, []); | 54 }, []); |
55 serverTimings.sort((a, b) => a.metric.toLowerCase().compareTo(b.metric.toLow
erCase())); | 55 serverTimings.sort((a, b) => a.metric.toLowerCase().compareTo(b.metric.toLow
erCase())); |
56 return serverTimings; | 56 return serverTimings; |
| 57 } |
57 }; | 58 }; |
| 59 |
| 60 |
OLD | NEW |